如何在ServiceDesk Plus中设置变更风险评估

假设你是一位 IT 变更经理,正准备实施一项对 IT 基础设施至关重要的变更:数据库服务器升级。在团队完成实施后,与该数据库服务器关联的关键企业服务却发生了中断。而在整个过程中,你和团队始终认为此次变更的失败风险很低。这正是变更风险评估(CRA)不到位的典型案例。

未能准确评估变更风险及其潜在影响,可能引发连锁的 IT 故障,最终造成业务中断、收入损失,甚至影响企业声誉。

CRA 是帮助变更经理、一线主管及实施团队识别潜在风险的关键工具。通过对风险进行量化评估,团队可以及早发现潜在瓶颈并及时应对,从而最大限度地降低变更失败的可能性,确保部署的可控性与成功率。

在本指南中,我们将帮助您深入理解 CRA 的价值,并指导您如何使用 ServiceDesk Plus 构建和实施高效的变更风险评估流程。

什么是变更风险评估?

变更风险评估(CRA)是一种结构化的问卷工具,旨在帮助 IT 团队识别并评估任何 IT 系统新增或修改操作可能带来的潜在风险。该工具的核心在于通过为不同的风险因素赋予权重分值,从而量化分析各因素(如历史成功率、涉及的利益相关者数量、测试覆盖程度等)对变更失败可能性的影响。

一旦完成风险评分,变更经理可根据评估结果制定相应的风险应对措施,例如:引入额外的审批环节、实施更严格的前置条件检查,或提前通知高层管理者,以提高透明度和响应速度。

如何在 ServiceDesk Plus 中设置变更风险评估(CRA)

Zylker 是一家领先的音乐流媒体服务公司,计划将其所有数据库服务器升级到 Microsoft SQL Server 2022。在以前的数据库服务器迁移过程中,实施工作面临多次变更失败,影响了音乐流媒体服务。此类大规模变更的实施通常涉及五到六个团队。为了准确量化未来的变更风险,Zylker 的变更经理在变更模板中建立了一个调查问卷。

图 1:变更模板中的变更风险问卷。

配置一个CRA

让我们来看看如何建立一个类似的 CRA,从而提高变更的成功率。

1. 为 CRA 创建一组问题

ServiceDesk Plus 提示:使用附加字段创建自定义字段。

建立详细 CRA 问卷的第一步是提出一组问题,并将其添加到 ServiceDesk Plus 中的变更模板中。Zylker 的变更经理利用 ServiceDesk Plus 中的 "附加字段 "选项创建了不同的问题,帮助准确映射公司的变更风险。

ServiceDesk Plus 允许您为核心 ITSM 实践创建附加字段,帮助您收集开箱即用字段之外的上下文数据。

要创建新的附加字段,请导航至设置 > 自定义 > 附加字段。使用下拉菜单,选择变更附加字段。这些字段也可以拖放到变更模板中,用于变更从提交到关闭的各个阶段。

从单行、多行、选择列表、单选按钮和百分比等各种字段类型中进行选择,以制作您的风险问卷。Zylker 使用表 1 所示的问题作为其 CRA 的一部分。1 所示的问题作为其 CRA 的一部分。

表1:CRA 问题字段

字段名称可选值列表字段类型
参与团队数量- 1
- 2
- 3
- 4
- 五个或更多
单选按钮
先前经验/变更成功程度- 先前成功
- 先前成功但遇到问题
- 遇到问题后不成功
- 无先前经验
下拉列表
测试程度- 单元测试、质量保证和用户接受测试
- 单元测试和质量保证
- 单元测试
- 未测试
下拉列表
预期服务中断时间- 无中断
- 少于2小时
- 约2至3小时
- 约3至5小时
- 超过5小时
单选按钮
回滚时间- 无中断且回滚时间少于1小时
- 无中断,但回滚时间超过1小时
- 中断时间少于1小时且回滚时间较短
- 中断时间超过1小时且回滚时间较长
- 无回滚选项
下拉列表
2. 在变更请求表单中包含变更审批流程(CRA)

ServiceDesk Plus 提示:将“附加字段”拖放至变更模板中。

在 Zylker 制定了 CRA 问题列表后,下一步是将这些问题呈现给变更请求者。

你可以在系统中将“附加字段”(即 CRA 问题)添加到相关的变更模板中。ServiceDesk Plus 会通过这些“附加字段”收集变更请求者的答案,以便根据具体变更计算其风险评分。

进入设置> 模板及表单 > 变更模板,将创建好的附加字段添加到新的或现有的模板中。建议将这些字段归类至名为“风险评估”的独立分段中,方便用户理解与填写(如图 2 所示)。

图 2:变更模板中的风险评估问题。

3. 创建风险评估问题的评分表

ServiceDesk Plus 提示:创建自定义模块并将评估响应映射到分数。

在将 CRA 问题添加到变更模板后,Zylker 的变更经理创建了一个新的自定义模块,用于构建变更风险评分参考表,并为每个预设回答分配分数。

自定义模块是一种可灵活配置的模块,用于满足组织特定的业务需求,超出了 ServiceDesk Plus 预设的 ITSM 功能范畴。

要创建自定义模块,前往设置>开发者空间>自定义模块,点击“新建”。在“新建自定义模块”表单中填写相关字段(如图 3 所示),并保存模块设置。

图 3:创建自定义模块。

模块创建完成后,您可以在字段部分添加响应和评分字段,以复制 Zylker 的 CRA 评分表。

在“字段”部分,将默认字段名修改为“问题”,然后从页面右侧的拖放区创建两个“单行文本”字段,并命名为“答案”和“评分”。

该模块功能将这些字段与 CRA 问题的选项进行映射。“答案”表示 CRA 的具体响应,而“评分”用于给出每个答案的风险值。

例如,如果某项变更由单个团队执行,且存在以下情况:

  • 1)无类似经验;
  • 2)尚未测试;
  • 3)未预期服务中断;
  • 4)缺乏可逆回滚方案。

——那么这些答案组合将对应一个较高的风险评分。系统将基于这些答案综合计算风险等级。

图 4:向自定义模块添加字段。

4. 填充评分表

ServiceDesk Plus 提示:将样本问卷数据导入自定义模块。

模块创建完成后,Zylker 的变更管理员需要使用一份预定义的样本数据集,对不同组合的答案进行评分。这套数据用于支持系统计算风险等级。幸运的是,ServiceDesk Plus 已提供此 CRA 问卷的样本数据。

点击此处下载样本数据(XLS 格式),并将其导入 ServiceDesk Plus 系统中,以训练风险评分引擎。自定义函数将根据“问题、答案和评分”的组合,从中判断出最终风险分值。

导入步骤如下:进入“设置”>“数据管理”>“导入数据”。在导入向导中选择字段值(如图所示),填写后点击“下一步”。

图 5:导入变更风险问卷的样本数据。

在“详细信息”部分,选择目标模块为“变更风险问卷”,然后将 XLS 文件中的字段列与自定义模块中的字段进行一一映射,如图所示。映射完成后点击“下一步”。

图 6:导入变更风险问卷的示例数据。

数据导入成功后,您可以通过“设置 > 自定义 > 自定义配置”路径,进入对应模块界面,查看已导入的数据内容(如图 7 所示)。

图 7:变更风险问卷。

5. 操作变更风险计算器

ServiceDesk Plus 提示:创建变更触发器以使用自定义函数计算风险评分。

完成样本数据导入后,Zylker 的变更管理员可以设置变更触发器,调用自定义函数以执行风险评分。系统将根据问卷的回答结果,自动计算出风险等级,并将结果更新到变更工单中。

设置流程如下:前往“设置” > “自动化” > “触发器”,切换到“变更触发器”标签页,并点击“新建触发器”。

在触发器表单中,填写以下信息:

  • 名称:例如“变更风险计算器触发器”
  • 描述:概述触发器的用途。设置为在变更创建或编辑时执行,并确保启用“启用触发器”选项。
  • 条件:使用“基于条件应用触发器”,并设置如下两个条件,

    1. 结合“AND”运算符进行匹配:

    表 2:变更触发条件

列名

操作符

模板选择需要进行风险评分的变更模板。
阶段提交

      2. 当变更被编辑时触发触发器:选择在每次满足指定条件时执行触发器操作。

  • 动作:选择“自定义函数”作为要执行的动作类型。在“选择自定义函数”弹出窗口中,点击左侧窗格的“新建自定义函数”。为该函数指定名称与描述,然后将自定义函数的代码复制并粘贴到实例中。完成后,与触发器一并保存自定义函数即可。

—————————————————————————————————————

modifiedfields = context.get("modifiedFields");
oldBean = context.get("initialObj");
if(oldBean == null || modifiedfields != null && (modifiedfields.contains("udf_char1") || modifiedfields.contains("udf_char2") ||
modifiedfields.contains("udf_char3") || modifiedfields.contains("udf_char4") || modifiedfields.contains("udf_char5")))
{
listInfo = {"list_info":{"row_count":100,"start_index":1}};
riskCalcutorScoreObj = zoho.sdp.invokeurl
[
url :"/app/" + context.get("instance") + "/api/v3/cm_change_risk_question"
type :GET
parameters:{"input_data":listInfo}
];
riskCalcutorScore = riskCalcutorScoreObj.get("cm_change_risk_question");
// converting riskdata to hashMap data for enhancing search through values
question_map = Map();
for each riskCalcData in riskCalcutorScore
{
question = riskCalcData.getJSON("cm_attributes").get("txt_name");
if(question_map.containKey(question))
{
temp_map = question_map.get(question);
temp_map.put(riskCalcData.getJSON("cm_attributes").get("txt_answer"),riskCalcData.getJSON("cm_attributes").get("txt_score"));
}
else
{
temp = Map();
temp.put(riskCalcData.getJSON("cm_attributes").get("txt_answer"),riskCalcData.getJSON("cm_attributes").get("txt_score"));
question_map.put(question,temp);
}
}
//field vs question_mapping
questionVsUdfFieldMapping = Map();
questionVsUdfFieldMapping.put("Number of teams involved","udf_char1");
questionVsUdfFieldMapping.put("Level of prior experience/change success","udf_char2");
questionVsUdfFieldMapping.put("Level of testing","udf_char3");
questionVsUdfFieldMapping.put("Expected service outage","udf_char4");
questionVsUdfFieldMapping.put("Reversal time","udf_char5");
udf_fields = changeObj.get("udf_fields");
score = 0;
for each questionField in questionVsUdfFieldMapping.keys()
{
score_map = question_map.get(questionField);
score_map = score_map.toMap();
tempScore = score_map.get(udf_fields.get(questionVsUdfFieldMapping.get(questionField)).toString());
if(tempScore != null)
{
score = score + tempScore.toNumber();
}
}
info "Score : " + score;
// risk assessment based on total score
risk = "None/Minimal";
if(score >= 8 && score < 16)
{
risk = "Low";
}
else if(score >= 16 && score < 24)
{
risk = "Medium";
}
else if(score >= 24 && score < 31)
{
risk = "High";
}
else if(score >= 31)
{
risk = "Critical";
}
info risk;
// update change with risk only if there is a difference
changeRisk = changeObj.get("risk");
if(changeRisk == null || changeRisk.get("name") != null && changeRisk.get("name") != risk)
{
update_param = {"change":{"risk":{"name":risk}}};
update_response = zoho.sdp.invokeurl
[
url :"/app/" + context.get("instance") + "/api/v3/changes/" + changeObj.get("id")
type :PUT
parameters:{"input_data":update_param}
];
info "====================";
info update_response;
}
}

 

一旦变更请求者使用变更触发器中指定的模板创建变更请求,并填写变更风险问卷,ServiceDesk Plus Cloud 将自动计算该变更请求的综合风险评分。根据评分结果,变更详情页面中的“变更风险”字段将自动更新为相应的风险等级。

表 3:变更风险评分标准

评分区间变更风险等级
小于 16
16 至 24
24 至 31
大于 31严重

变更风险等级是根据综合评分结果自动分配的。对于 IT 变更管理人员而言,虽然确保变更的最低风险评分是基本要求,以避免潜在障碍,但更关键的是在不同风险等级的变更中建立有效的审批与管控机制,确保变更过程安全、透明、可控。

借助 ServiceDesk Plus 规避变更风险

通过在 ServiceDesk Plus 中创建自定义 CRA 问卷,Zylker 的变更经理成功识别并量化了各类变更的风险,从而显著提升了公司的变更成功率。

ServiceDesk Plus 是一款基于人工智能的统一服务管理平台,集成了 IT 服务管理核心功能、IT 资产管理、配置管理数据库(CMDB)以及企业服务管理(ESM)能力。这一强大的功能组合,为 IT 和业务服务的设计、管理与交付提供了全面的平台支持。

此外,ServiceDesk Plus 还提供覆盖全生命周期的变更管理功能,帮助 IT 团队有效规避企业级 IT 基础设施变更所带来的各类风险。

想尝试 ServiceDesk Plus?立即免费试用 30 天