软件验证与确认(Verification and Validation)简述
张艾森1,2
(上海工业自动化仪表研究院1,国家能源核电站仪表研发(实验)中心2,上海,200233)
摘要:计算机设备和信息处理技术正迅速进入仪表和过程控制工程之中,由于其方便的操作和其他诸多优点,更多用户乐于去使用它们。在起初用于基本功能控制后,在更多的安全关键控制中,计算机设备和信息处理技术得到了更多的应用,此时,软件的质量被人们日益重视起来,其好坏如何评判,其质量如何保证是人们最关心的问题。软件的验证与确认技术正是达到质量保证的重要环节。
关键词:软件验证与确认(V&V);独立性;管理;文档
1软件V&V的准则
软件的验证与确认是数字化仪控系统的关键技术之一,其质量的评估难以量化的给出。从相关标准条款中,可以得到软件V&V的准则如下:
⑴计划先于行动,没有计划和大纲无法开展工作。
⑵对所有软件开发步骤的验证和确认方案,没有完全可信的东西,没有“免检产品”。
⑶所有结果和过程都应详细的记录并保存,确保可追溯性。
2评估独立性的要求
通常对于软件质量的评估其出发点来自于对软件开发过程的评估,辅以对软件成品的一系列测试。从验证和确认的角度来说,对过程的逐一评估是软件的验证阶段,而对软件成品的测试归结为软件的确认。在IEC60880中提及,额外的验证活动由第三方来进行。第三方的介入对软件质量而言是提升了信心。
在IEEE1012中,V&V团队的独立形式和独立程度被分成了四个等级。IEC60880针对核电站A类软件,其独立性要求应参照IEEE1012中最高级别来制定。但有一点要指出,60880中对于独立评审的要求规定似乎没有IEEE1012中给的具体。在标准中没有给出经济独立性的要求,也没有明确给出第三方是指不同组织间的,还是同一公司的不同部门。在其中只是指出,V&V团队的独立程度应在国家相关规定条款中给出,而国内还没有哪一个具体标准给出了关于团队独立性的明确指导,多数还是遵循IEEE1012中的相关规定。
3软件评估的初始管理
从对IEC60880整篇标准的理解中不难看出,软件质量的获得最重要的并不是某几位专家的评估,而是整个开发过程的有序管理。有序管理的几个重要目标应该是:
⑴足够的人员配置以及人员对应职责的明确无误。这点可以在第8章中看出,其明确要求
了构成人员的能力以及其目标职责的明晰。
⑵文档的正确管理。在IEC60880中,无论在软件开发的任何阶段,都会在某一结点明确
的要求相应的输出文档。这些文档的存在最大程度的保证了整个过程的可追溯性。针对文档的管理及要求在第7.4条中给出。
对于一个V&V团队来说,首先应该建立的是质量保证计划,该质量保证计划中明确给出的是:
⑴人员配置结构及人员职责分配。
⑵操作流程的规定包括方法的描述。工具的配置情况,采用标准的情况,管理。
⑶文档管理计划,包括文档管理,文档统一格式。
⑷通讯记录归档管理。
⑸安全性管理,涉及保密性的管理条约。
4文档管理的要求
在整个软件评估过程中,对于文档的评估和审查占据了非常重要的角。因此,建立完整的,可追溯的文档系统是非常必要的。文档建立的几个关键注意点在于:
⑴要求的记录内容详尽(项目,目标,准则,使用设备,方法,流程,结果等);
⑵为了方便查阅而做的标记;
⑶完成时间和参与人员可查(人员包括完成人员和审核人员);
⑷管理制度的建立。
后续文档,例如软件验证计划,软件确认计划等,都需要遵照质量保证计划中的相关内容建立。
5软件设计验证
软件的设计验证应在软件的初始设计介入。从设计概念上来说:保证软件安全的关键在于尽可能减少软件的功能,并且简化必要的功能。
软件验证工作首先要解决的问题是依照从系统要求中得到的软件要求规范对照设计大纲。软件的正确与否在软件设计之初就已经决定了。其目标内容为:
⑴概念设计大纲中是否将目标功能全部包含在内。
⑵设计大纲中的功能设计要求是否相关要求。这些要求的内容应在是响应时间,动作时间
等一系列系统要求中给出的参数。这些参数是否正确也应参照相关核电站安全设计要求。
⑶详细设计大纲中提及的设计方法是否可行。最安全的软件应该是最简单的软件,最新的
编成方法与技术应当在核电站软件设计结束中慎重使用。
在完成对概念设计和详细设计两个部分的审核后,开发团队应提交相应的代码。对于V&V团队来说,代码的测试应该以功能块为基础进行。代码测试的主要方法是静态测试和动态测试。从IEC60880的角度来说,它推荐使用自动化测试工具(测试工具及平台的质量管理在后面给出)。静态测试的关注目标主要是测试覆盖率,其面向的是软件设计的规范化和一些可能出现的系统错误。好的自动化测试工具可以帮助测试人员更好的完成任务。动态测试的目标应当是检验软件模块是否正确执行了目标功能,并且没有执行非预期的功能。测试目标功能相对来说简单。由其规定输入得到期望输出进行比较即可。难点应该在于检验非预期功能。个人认为顺序执行功能是不太会带来问题的,因为软件不存在随机误差,所有的故障皆为系统误差。非预期功能的出现主要来自于非预期模块间的相互调用或者来自数据超出设计范围后的非预期影响。因此,在模块测试间进行排列组合进行测试是动态测试的一个重要部分。
在验证阶段所出的故障需要进行一项额外的分析。就是为什么该错误在软件早期设计没有被发现。如果分析结果显示该错误在早期可以被发现并改正,则这一错误所涉及的相关设计都需要被重新评估,避免整个软件系统出现致命的设计错误。
验证测试主要方法在IEC60880中有明确的要求,其主要方法如下:
⑴测试过程的监督管理。该方法的好处是不需要额外的准备工作,并且不需要具备详细的
相关知识基础。缺点就是,无法得到详细的流程框图,无法对整个软件进行详细的评,只有比较粗矿的理论基础,不够深入。
⑵根据需求进行静态分析。好处是可以给出可靠性框图或类似流程图之类的框图,而不必
详细阅读代码。可以作为对其他程序分析的辅助方法。这类方法在对自动代码生成的软件时会显得有效,可以在早期发现设计上的缺陷。
⑶根据正确性进行静态分析,好处和缺点同上。
⑷编程检验。好处是可以得到软件正确性的详细评估报告。缺点是无法辨别软件中的循环
的相关内容。
⑸编程分析。主要可以分为人工的方法和自动化工具的方法。标准中强烈推荐自动化工具
的方法,尽可能多的使用。
⑹利用测试用例分析软件性能。
⑺崩溃测试。
⑻连接外部硬件进行的测试。
⑼静态测试用例和动态路径来测试软件方法流程。
⑽开关附加软件或外部设备后是否能获得正确的操作。
⑾路径测试:每种状态至少运行一次。每种输出至少执行一次。每种循环在最高最低值时分别至少执行一次。每条路径至少执行一次。
⑿数据移动测试。每种内存排列至少执行一次。每个内存地址标记至少执行一次。每个输入到输出的绘制至少执行一次。
⒀时间测试。测试所有时间约束条件。所有可能的中断顺序组合测试。所有重要中断顺序的组合测试。
⒁其他测试。例如:每一个模块接口测试至少一次。每个模块至少调用一次。高负荷情况下运行。数学运算的精度测试。输入数据边界值检查等。
在软件验证测试中,IEC60880明确了需要进行基于统计方法的测试。对应不同的PFD 要求明确了试验次数。应用统计测试的方法有如下几个特点需要注意:
⑴试验是基于系统要求而独立设计的测试用例。
⑵测试的顺序和数量不影响每一次单独运行的程序结果。
⑶出现的每一个失效都要被检测到;
⑷测试数量通常来说都会很庞大;
⑸失效次数应该是很少的。
在IEC60880中并没有对测试用例给出明确的要求。从事物的两面性来考虑的话,我觉得为了保证试验的有效性,统计测试是否应该也从两个方面来进行。在60880中明确指出,软件应准确完成预期的功能,同时,不应该完成非预期的功能。因此,应设计测试用例对于预期功能应进行规定次数的统计测试,同时,设计另一个测试用例对于非法和非预期的功能也进行相同次数的统计测试。
6软件修改要求
软件的修改在设计过程中通常也是不可避免的,在IEC60880总对于修改有非常严格的规定,在流程需要遵循以下三个顺序:
⑴生成修改请求;
⑵分析和评估修改请求;
⑶商议决定修改请求。
以上所有内容都应以正式文档进行归档。
7工具
从开发角度来说,IEC60880中明确给出了软件开发和验证中所使用的软件类型,其具体如下:
⑴结构工具。用于支持完成软件规范,设计,开发执行等工作。
⑵测试编辑工具。
⑶图形界面工具。
⑷自动代码生成工具。
⑸语法分析工具。
⑹语义分析工具。
⑺形式化证明工具。
⑻比较工具。
工具的管理依照质量保证计划中的相关要求进行。对于在软件开发中所使用的所有工具都应有相应的质量评估。这些评估结果和建议应详细的记录和归档。
对于这些工具的评估主要面向几个方面:
⑴适应性的评估。目标工具本身是否适合进行类似的开发工作,包括其功能、精度等。
⑵质量评估。质量的评估可以从两个方面着手进行。首先如果工具本身能提供权威第三方
的认证信息及相关评估资料,则可以相信工具本身的质量有相应的保证。其次由V&V 小组对工具进行必要的测试和评估。平贵的对象内容应包括:工具开发过程与环境。工具功能准确性的测试。使用经验的
反馈和外界评价。如果目标工具无法提供完备的资料说明和可测试功能的相关说明的话,对于工具的使用就应有相应的限制措施。
⑶工具本身也应有配置管理的相关要求。该配置管理的设立意在加强软件设计的可追溯
性。其对应的关注点在于工具的名称,型号/版本,配置构成,错误记录,修改记录和评估报告等。
validation verification8软件相关资料评估
对于提供资料的评估应遵循以下的几条内容:
⑴数据资料的来源应尽可能来自用户和在役设备。(安装在不同设备上,运行一定的时间,
无重大修改或重大错误记录)
⑵数据资料是遵循良好管理流程得来的。
⑶数据资料应提供证明,证明其可信度。
⑷数据资料的来源要与预期使用的环境相似。
⑸数据资料的来源版本应与目标相同。
⑹不同的版本出现的问题也应分析评估。
9软件安全管理
软件的安全性设计应从两个方面来考虑:
⑴软件的授权使用,应保证授权人员可以顺利进入软件系统,非授权人员无法进入系统。
授权人员进入系统的方法应考虑多样性。仅仅使用密码的方法是不够的,还应考虑类似通行证,指纹,身份卡等其他物理方法。非授权人员无法进入系统应考虑在多次无效输入后的系统保护模式以防止进一步的攻击。
⑵授权进入系统之后的安全防护。在开发阶段应避免软件后门,隐藏功能的出现。设计完
成后重要的系统参数不允许操作人员的修改后者需要修改时的严格程序控制。该程序从进入修改到修改完成后可追溯性都需要加以考虑。传输数据应是系统中安全系数较低的
数据。在设计文档中明示重要的安全功能。
验证和确认软件功能时,应专门有针对安全功能的相关测试:
⑴限制可访问功能的能力。
⑵系统参数进出监控的管理。
⑶对于软件或相关侧书修改的追溯。
⑷系统登入不能仅仅依赖密码保护,应有类似于质问,身份卡等其他方法的帮助。
软件转移时,安装,备份时应有相应的手段或发方法以保证其准确性。可以从两个方面来考虑:
⑴管理角度。工具的统一管理和质量保证。操作流程的规范和统一。
⑵技术角度。比对校验软件设备的使用。软件安装后的功能确认计划。
10各阶段形成应重点考察的对象
对于整个软件生命周期来说,主要分为以下几个阶段:软件设计验证阶段,代码验证阶段,模块验证阶段,集成测试阶段,软件修改阶段,软件测试规范(其贯穿几个阶段,在此分列)。针对每个阶段,分列其考察重点如下:
10.1软件设计验证:
1不符合软件要求的部分。
2不符合核电站设计标准的部分。
3模块,数据,结构,运算方法等不适合的问题。(包括方法不适合,或者方法过于先进而没有获得足够使用经验的情况)
4设计功能不合理的部分。
10.2代码验证:
V&V团队首先制定代码测试计划。重点考察问题:
1设计流程与概念设计时的一致性;
2软件编码是否符合公司或者相关国家/国际标准中的要求;(通常推荐使用自动化工具,根据功能块图自动生成代码,缺点是前期设计考虑要周到,优点是生成的代码质量有保证)
3嵌套,循环等的问题;
4内存占用的情况;
5数据移动的情况。
10.3模块验证:
首先也是要制定验证计划。重点考察问题:
1单一模块执行预期功能是否准确;
2跳转是否准确,有无类似死循环的问题;
3调用是否准确,有无非预期的调用导致进入非预期功能状态;
10.4集成测试:
按要求完成集成测试计划,重点考察问题:
1依照系统规范要求和软件规范要求验证功能完整性;
2验证功能准确性;
3统计次数符合标准要求。
10.5软件修改请求
1修改求情原因;
2修改的目标;
3修改涉及的功能检索,影响范围;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。