ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

计算机软件控制确认程序设计与执行指南:从风险评估到数据完整性

计算机软件控制确认程序设计与执行指南:从风险评估到数据完整性 简介《计算机软件控制确认程序》是一份可直接套用的程序文件模板面向生产企业、检测机构的质量管理人员、设备管理者和体系内审员用于规范计算机软件在监视和测量过程中的确认与控制。文档按程序文件标准结构展开明确技术负责人、生产车间与检测室负责人、仓库管理员及操作人员的四级职责并详细列出首次确认、再次确认和系统升级重装后的验证要求包括基本功能逐项确认、人机界面与组态数据检查、模拟联动试车、切断电源和拔出插件等故障状态下冗余功能验证同时强调未经批准不得擅自升级操作系统软件并附有《计算机软件确认表》等配套记录表单。资源共1个doc文档压缩包大小33KB内容精炼完整覆盖软件使用、贮存、升级、删除等全周期控制适合作为编制内部质量管理体系文件、应对ISO/IEC 17025认证或设备软件验证工作的参考范例。已有309人学习下载对于需要建立健全计算机化系统管理流程的团队具有较高的实用价值。1. 计算机软件控制确认程序在干什么先分清“文件”和“证据”做批记录系统、SCADA、HMI 或实验室设备验证的同行大概率碰过这种场面软件版本升级了、配方参数改了现场只拿来一份新的程序文件问“控制逻辑变了你们确认过什么”答不上来。审计时最怕的不是程序写得差而是“没有证据证明程序一直在按既定方式运行”。计算机软件控制确认程序正是这一类交付物——它把“软件对设备的控制符合预期”这件事从口头解释变成可复核的记录链。它既是确认方案也是执行记录还是放行依据。这篇博文面向 IT、验证、设备与质量工程师讲清楚怎么设计、编写和执行这套确认程序以及参数、边界和坑在哪。2. 软件分类与确认深度CSV 验证里的风险评估怎么落到确认程序里2.1 先给软件定性不是所有软件都值得同一套确认程序计算机软件控制确认程序的第一步不是写测试用例而是给软件分类。常见做法是参考 GAMP 5 的软件分类思路把对象分成基础架构软件如操作系统、不可配置软件如固件、可配置软件如组态软件、HMI 运行时和定制软件纯开发代码。分类决定了你要投入多少确认证据不可配置软件重供应商评估可配置软件重配置项核对定制软件重代码审查和功能测试。一张分类表就能避免“什么都在测”或“什么都不测”的两个极端。软件类别典型对象确认深度重点证据1类 基础架构Windows Server、数据库引擎版本记录、补丁核对安装清单、补丁列表3类 不可配置仪器固件、商用成品模块供应商声明、安装确认出厂证书、版本号截图4类 可配置组态软件、SCADA、HMI、PLC 程序配置项核对 功能测试配方参数表、逻辑图、测试记录5类 定制开发内部开发的批控脚本、数据分析程序需求追溯 代码审查 全功能测试需求矩阵、代码走查记录、测试脚本2.2 用风险评估筛出“关键控制点”而不是把需求全部搬到测试用例确认程序不要直接拿用户需求说明书里的每一条当测试项那样会写出几百页没人看的用例。我一般会先做一次功能影响评估按“失败后果严重度 × 发生可能性 × 可检测性”给控制功能算风险值只把高中风险项纳入确认程序。比如一个灭菌柜的升温段控制失败会导致产品报废甚至安全事件必须测而一个报表导出按钮失败可以靠人工复核兜底放到低风险清单里记录即可。评估结果要写进确认程序的引言部分否则审计员会问“为什么这个关键报警没测”。风险评估结果不只是一个分值它还会影响测试数据的准备方式。高风险控制点需要边界测试超温、超压、断电恢复中风险点只需要范围测试低风险点做冒烟测试即可。这个分层思路写进确认程序的测试策略章节后面设计用例时就不会每一步都追求“最严苛”执行周期也能压下来。提示确认程序中引用的风险评估记录必须有版本号和日期因为风险分值会随工艺变化更新旧的确认结论可能因此失效。3. 把确认程序拆成可执行用例配置核对、功能测试与参数表设计3.1 配置项核对先证明“装的就是我要的那套”计算机软件控制确认程序里最容易漏的一步是配置核对。很多人拿到软件就点按钮测功能但忘了先确认当前运行的这套程序控制逻辑版本、配方表、通信地址和设计文档一致。配置核对建议做成一张清单逐项记录程序名称、版本号、校验值MD5 或 CRC、关键变量名、报警阈值、PID 参数、操作员权限表。核对方式除了肉眼对比截图更可靠的是写脚本自动比对。import hashlib import json import sys # 标准配置来自确认方案 with open(expected_config.json, r, encodingutf-8) as f: expected json.load(f) # 实际配置来自系统导出或 HMI 备份 with open(actual_config.json, r, encodingutf-8) as f: actual json.load(f) diffs [] for key in expected[parameters]: exp_val expected[parameters][key] act_val actual[parameters].get(key) if exp_val ! act_val: diffs.append(f{key}: 期望 {exp_val}实际 {act_val}) if diffs: print(配置不一致不能进入功能测试) for d in diffs: print( , d) sys.exit(1) else: print(配置核对通过)这段逻辑很直白把确认方案里的参数标准值放在expected_config.json把从系统里导出的实际值放在actual_config.json脚本只做一件事——逐键比对有差异就阻断测试并打印差异项。参数说明parameters里存的通常是报警阈值、PID 增益、配方温度目标值这类控制参数sys.exit(1)的作用是给 CI 或手动执行一个非零退出码方便后续脚本判断“未通过”。如果两类配置的字段命名不同先做一层字段映射不要改标准配置文件否则追溯链会断。3.2 功能测试用例的编排方式按“前置条件—操作—预期结果”三段写确认程序里的功能测试用例格式比内容更影响执行效率。我建议所有用例统一用“前置条件 / 操作步骤 / 预期结果”三段结构并且给每个用例编号例如 FC-01、FC-02。前置条件里必须写清楚初始状态比如“操作员权限为管理员”“设备处于待机模式”“批次号已生成”。操作步骤要具体到点击哪个按钮、输入什么值避免写“将温度设为正常值”这种模糊表述。功能测试的预期结果不能只写“系统运行正常”要写可观测的判定依据。比如“HMI 显示温度稳定在 121.0±0.5℃”“数据库的 recipe_actual 表新增一行记录value 字段等于输入值”“超温报警触发时上位机在 2 秒内收到报警消息”。这些依据越具体执行时越不需要主观判断复核也越容易。如果一个用例的预期结果无法用截图、日志或数据记录来证明说明它还没写好。3.3 参数表设计把可配置项和不可配置项分开列确认程序里要附一张控制参数总表我习惯把它拆成三列来源设计值来自需求或配方开发、确认值本机实际设定、默认值软件安装时的出厂值。三者不一致时在备注里解释原因。这张表最大的价值在于给后续变更评估提供基线——下次改任何一个参数比对这张表就能快速判断影响范围。参数名设计值确认值默认值影响风险灭菌温度设定121.0℃121.0℃121.0℃低超温报警阈值123.5℃123.5℃125.0℃高PID_P8.08.210.0中参数表还有一个容易被忽视的用途反向验证“程序版本与设计文档的匹配性”。如果某项参数的确认值与设计值不一致不要直接改表先回到设计文档看版本设计文档未更新就说明变更管理流程出了问题。这个检查点写入确认程序后能逼着团队先走变更流程再执行测试而不是事后再补记录。4. 执行确认程序审计追踪、数据完整性与偏差处理时的检查点4.1 执行阶段必须留哪些电子记录执行确认程序时功能测试通过还不算数还要证明“这些测试是在受控条件下执行的”。四个方面的记录缺一不可操作者身份与权限谁登录系统做的操作、时间戳操作发生的时间、输入与输出数据配方参数、传感器读数、审计追踪系统自动记录的变更日志。常见的做法是测试时全程录屏并导出系统审计日志我一般会把审计日志按用户、时间、操作类型过滤后与测试用例逐条对应。import csv from datetime import datetime # 审计日志字段: timestamp, user, action, detail with open(audit_log.csv, r, encodingutf-8) as f: reader csv.DictReader(f) last_ts None for row in reader: ts datetime.strptime(row[timestamp], %Y-%m-%d %H:%M:%S) if last_ts and ts last_ts: print(f时间戳乱序: {row[timestamp]} {row[user]} {row[action]}) last_ts ts这段脚本用于快速筛查审计日志里的时钟回拨或乱序记录。参数说明timestamp字段格式要和系统导出一致如果系统导出的是 Unix 时间戳就改用datetime.fromtimestamp(float(row[timestamp]))解析。乱序不一定是作弊也可能是系统时钟被调整或跨时区导出但确认程序里要对这类现象写明原因和影响评估。4.2 偏差处理的分级不是所有异常都叫偏差执行确认程序时发现实际结果与预期不符第一反应不要是“重新测一次就过了”。偏差管理是计算机软件控制确认程序的核心环节审计员盯的就是有没有遗漏未报告的异常。我把偏差分为三级重大偏差控制功能失效、数据丢失、未授权访问、次要偏差界面显示不友好、操作步骤说明不明确、微小偏差拼写错误、格式问题、不影响功能的提示文案。重大偏差必须先暂停测试等根因调查和纠正措施完成后再恢复次要偏差可以在测试结束后集中评估微小偏差记录在案即可。常见的误操作是在功能测试中临时修改了某个参数来“让测试通过”然后忘记恢复。确认程序里要增加一条执行纪律任何变更必须先出变更记录再改配置最后重测受影响的用例。违反这条纪律的偏差数据完整性审查时会被质疑为有意掩盖。执行确认程序的负责人要在每日收尾时检查一次配置基线确保当天的测试环境没有被悄悄改过。4.3 数据完整性检查点手动记录和电子记录必须自洽计算机软件控制确认程序的测试记录经常存在两种数据来源操作员手填的表单和系统自动生成的日志。审计时最容易被挑出的就是两者对不上。比如手写记录显示“12:03 开始升温”但审计日志里对应的操作时间戳是“12:17”。我建议在确认程序里加一个数据一致性核查步骤抽查至少 30% 的测试项把人工记录时间与审计日志时间做比对时间差超过 5 分钟就要在备注里说明原因。这个 5 分钟的宽松度在方案里写清楚否则审计员会觉得你连自己的记录都不信任。更严格的做法是要求电子数据作为原始记录纸面表单只作为辅助这取决于企业的数据完整性策略。5. 交付一套能复用的确认程序可追溯矩阵与自动化配置比对脚本计算机软件控制确认程序的最后交付不是把文档签完字就行了而是让这套确认程序能被下一次版本升级、同类设备复制、法规检查直接复用。这里说三个我比较依赖的落地技巧。第一个技巧是可追溯矩阵不要堆需求编号。我见过很多人把用户需求、设计规格、测试用例列成一张巨大的 Excel几十列看着很全实际没人维护。我一般只维护三列需求编号、确认程序中的测试用例编号、测试结果文件编号。重点不是列全而是“每一项可配置的控制点都能从需求找到测试结果”。这样审计员抽查任何一个关键参数你都能在五分钟内定位到证据。第二个技巧是给配置核对写一个可重复执行的脚本别每次靠截图对比。上一章我用的是 Python 配合 JSON 文件实际工程里可以把它做成交互式脚本读取确认方案里的参数标准值系统导出 CSV 的实际值自动生成一份config_check_result.html差异项标红。这样每次执行确认程序执行人只需要导出配置、跑脚本、存档结果不需要肉眼在一堆截图里找差异。需要注意的是脚本本身也要受控管理——放到受控文件夹里记录版本号因为脚本的更新也属于软件变更。第三个技巧是设计一个“预期结果与实测记录的对照附录”。很多确认程序的测试记录散落在各个测试人的手里最后归档时到处收集。我通常在确认程序模板里预留好固定格式的表格规定每一页测试记录的填写项用例编号、执行人、执行日期、设备编号、预期结果描述、实际结果、截图编号、备注。执行人在测试现场直接在受控版的打印件上填写扫描归档不留空白页。这样最容易被审计员接受的签名确认方式。再补充一个容易被忽略的收尾动作确认程序执行完要把“已知遗留问题清单”和“可接受理由”一并归档。没有哪套系统是零问题的关键是问题有没有被透明记录并通过风险评估证明可控。比如某个报警存在误报可能但设备停机保护机制独立生效这个风险可以被接受——写清楚理由比藏着不报安全得多。文档签完字后确认程序才算真正闭环接下来再谈放行使用就顺理成章了。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进