1.什么是集成测试integration tests?
在软件开发过程中,集成测试是一连串的单独测试,目的是找出软件系统中不同的、相互依赖的(已测试过的)软件组件之间的交互错误。集成测试检验软件组件在使用其他组件的接口(即调用其方法)时,是否正确处理了其返回值(返回值、异常)。
2.为什么需要集成测试integration tests?
a)提高软件质量
与所有软件测试一样,集成测试的目的是通过发现错误来提高软件质量。为此,集成测试检查两个或多个软件组件software components(也称为软件模块software modules或软件单元software units)的接口是否匹配。尽管专业软件开发人员已经对所有组件的公共方法进行了测试,但这些集成测试仍是必要的。因为组件、模块或单元测试不足以发现这些组件交互过程中的错误。
b)符合法规要求
许多标准都要求进行集成测试,并制定了相关要求。例如,IEC 62304要求进行集成测试,并验证所选集成测试方法是否合适。
IEC 62304对集成测试integration tests的要求
IEC 62304对集成测试提出了以下要求:
-制定集成计划
-根据计划进行集成测试
-集成测试文档
-如果发现错误,应启动问题解决程序。
注意:许多制造商并不符合问题解决流程的要求。相反,他们对软件进行修改,直到其表现符合规范为止。这既不符合要求,也不符合IEC 62304的理念。
IEC 62304对集成测试integration tests程序评估的要求
此外,制造商必须评估并确保所选的集成测试方法是适当的。自2015版IEC 62304起,第5.6.5节的措辞更加通俗易懂,“验证verify”一词被“评估evaluate”取代,“正确性correctness”一词被“充分性adequacy”取代。因此,不是检查测试程序的正确应用,而是检查测试程序的适用性。
IEC 62304的作者所说的评估也可从附录B.5.6中得出:
-集成策略integration strategy合适。
-制造商已确定正确且必要的测试目标test objectives,如功能正确性、时序和可维护性(例如弱耦合)。
-测试程序 test procedure合适,包括指定测试用例的方法。
-制造商选择了合适的工具suitable tools,例如,用于创建存根/模拟对象,以替代(尚未)可用或待测的硬件和软件组件。
对测试程序的评估通常是通过检查集成计划来完成的。
3.如何进行集成测试integration tests?
步骤1:确定集成测试的目标
ISO 25010的分类法为这些目标的完整性提供了一个很好的核对表。这些目标的选择和优先排序应基于风险。例如,如果软件的时间安排至关重要,则应在集成测试期间对其进行评估。
步骤2:确定集成策略
确定集成策略是测试计划的一部分。作为软件架构的一部分,制造商应该已经确定了集成策略。这决定了组件的集成顺序。集成策略的典型代表有:
-自下而上的策略,这种策略受到开发人员的欢迎,需要许多测试驱动程序
-自上而下的策略,这种策略允许对最终产品形成早期印象,需要许多模拟对象
-大爆炸策略,实际上并不意味着零敲碎打的集成,而是对整个系统进行测试
在自下而上的策略中,测试人员首先测试硬件或操作系统相关层,然后测试更高层(如用户界面)。这意味着,在集成测试过程中,他们每次都会添加下一个更高层次的层,检查是否达到了测试目标。
步骤3:指定测试用例
指定测试用例是测试计划的一部分。为了指定测试用例,进而指定测试数据,制造商应使用黑盒方法等。这些方法有助于系统地确定测试用例,从而以极高的概率发现缺陷。这就是好测试与坏测试的区别所在。测试用例的规范还包括确定如何进行测试、记录测试和评估测试结果。
步骤4:执行测试并记录输出结果
为了执行测试,测试人员必须根据选定的测试策略开发模拟对象或/和测试驱动程序。这样,他们就能按照测试计划的要求执行测试。文件还包括对测试结果的评估。如果出现错误,这些文件可作为解决问题过程的输入。
4.应该注意什么?
a)相关人员的选择
要指定和执行集成测试,既要有编程经验,又要有软件测试方面的能力。
b)正确的时间安排
制造商不应在编程完成后才开始软件集成测试。相反,最好从一开始就按照集成计划测试可用组件的交互作用。这样可以更早地发现错误,更容易地消除错误。在维护阶段,制造商还应将集成测试作为回归测试来执行。这样就能确保更改不会重新引入已修复的错误。
c)符合监管要求
IEC 62304要求制造商在发布软件时,检查软件集成测试是否按设计和开发集成测试计划的规定进行。前提是这些计划已经存在。
5.总结
集成测试是软件质量保证的重要手段。建议将集成测试作为一个单独的步骤,而不是与软件系统测试system tests一起进行。集成测试有助于证明系统可以由各个组件逐一组装起来。这反过来又证实了组件之间所需的弱耦合性,从而证实了良好的体系结构。