1.7 测试和维护
1.测试
源程序编好以后,就进入软件测试阶段。由于软件是一种无形态的、复杂的、知识高度密集的产品,因此往往不可避免地会产生错误。在源程序编好后,就需要查找程序中的各种缺陷和错误,并确认功能和用户说明的一致,这个过程叫做软件的“测试”。
软件测试通常是通过设计一组具有代表性的测试用例,来发现软件中的错误。测试时要注意,不仅要测试正确的数据,还要测试错误数据的情况;不仅检查程序是否做了它应该做的事,还要检查程序是否做了它不应当做的事;要保留测试数据及记录,直至程序废弃等。
(1)按开发的过程划分
软件测试按开发的过程划分为单元测试、集成测试、确认测试、系统测试和验收测试。
① 单元测试也叫模块测试,是对模块进行的测试,该阶段往往会发现编码和详细设计的错误。开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。
② 集成测试是把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。
③ 确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。
④ 系统测试是把已经经过确认的软件纳入实际运行环境中,与其他系统成分组合在一起进行测试。
⑤ 验收测试是部署软件之前的最后一个测试操作。相关的用户或测试人员根据测试计划和结果对系统进行测试,确定产品是否能够满足合同或用户所规定的需求,从而让系统用户决定是否接收系统。
(2)从是否关心软件内部结构和具体实现的角度划分
从是否关心软件内部结构和具体实现的角度,软件测试分为黑盒测试和白盒测试。
① 黑盒测试(black box testing)也称功能测试或数据驱动测试。它是把测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。黑盒测试主要检测以下方面:
是否有不正确或遗漏的功能
在接口上,能否正确地接受输入数据,能否产生正确的输出信息
访问外部信息是否有错
性能上能否满足要求
② 白盒测试(white box testing)也称结构测试,是与黑盒测试相对应的一种测试技术。白盒测试以程序的结构作基础,它要求测试者事先了解被测程序的内部结构,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态和预期的状态是否一致。
2.调试
在测试完成后,找出错误的原因和错误发生的地方并进行修改叫做软件的“调试”。调试技术有单步调试、断点跟踪等。
3.维护
软件生命周期的最后一个阶段是软件维护阶段。软件维护,是指软件系统交付使用以后对软件所做的改变。在软件工程各阶段的活动中,软件维护是时间最长的,一般意义上从软件交付使用的那一刻开始,就正式进入软件维护阶段。
软件维护通常包括四类活动:
(1)为了纠正在使用过程中暴露出来的错误而进行的“改正性维护”;
(2)为了适应外部环境的变化而进行的“适应性维护”;
(3)为了改进原有的软件而进行的“完善性维护”;
(4)为了改进将来的可维护性和可靠性而进行的“预防性维护”。
软件生命周期每个阶段的工作都和软件可维护性有密切的关系。因此,在软件生命周期的每个阶段都必须充分考虑维护问题,并且为软件维护提前做好准备。软件的可理解性、可测试性和可修改性是决定软件可维护性的基本因素。良好的设计、完善的文档资料及一系列严格的复审和测试,使得一旦发现错误时比较容易诊断和纠正。当用户有新要求或者外部环境变化时软件容易适应,并且能够减少维护引入的错误。