1. 绪论
1.1. 软件危机和软件生存期
软件开发项目矛盾主要表现在:
Ø 缺乏大型软件开发的经验和软件开发数据的积累,盲目制订开发工作计划;
Ø 开发初期软件需求不够明确,开发开始未能和用户及时交流,问题隐藏;
Ø 开发过程中无开发规范,开发人员间配合、约定不严密明确,文档不完整;
Ø 缺乏严密有效的软件之路检测手段,交付软件质量差,不同程度严重后果。
典型事例:1963~1966 IBM 开发的IBM360机OS。à 《人月神话》F.P.Brooks
软件生生存期:
Ø 计划(Planning)
ú 主要任务:确定软件开发的总目标;
给出软件的功能、性能、可靠性以及接口方面的设想;
ú 输出物:问题解决方案;
资源、成本、效益、开发进度的估计;
完成任务的实施计划。
Ø 需求分析(Requirement Analysis)
ú 主要任务:详细定义开发软件可满足的需求并给予确切描述;
ú 输出物:软件需求说明书(Software Requirement Specification)或软件规格
说明书;
初步的用户手册(System User’s Manual)。
Ø 设计(Design)
ú 主要任务:将已确定的各项需求转换成相应的体系结构,由功能明确的模块
组成;
ú 输出物:概要设计(Preliminary Design)说明书;
详细设计(Detail Design)说明书。
Ø 编码(Coding)
ú 主要任务:将软件设计转换成计算机可接受的程序;
ú 输出物:源程序清单。
Ø 测试(Testing)保证软件质量的重要手段
ú 主要任务:检验开发工作的成果是否符合要求;
ú 三步:单元测试(Unit Testing);
集成测试(Integrated Testing);
确认测试(Validation Testing)。
Ø 运行和维护(Run and Maintenance)
ú 主要任务:已交付用户的软件投入正式使用。
1.2. 软件测试的意义
广义的测试概念:确认、验证、测试活动
(V,V&T-----Validation,Verification and Testing)
确认 ≠ 验证
确认:如何决定最后软件产品是否正确无误(开发正确无误的软件产品)
编写出的程序相对于软件需求和用户提出的要求是否符合;
程序输出的信息是用户所要的信息吗?
程序在整个系统的环境中能够正确稳定的运行吗?
开发初期,在软件需求规格说明书中明确规定确认的标准。
验证:如何决定软件开发的每个阶段、每个步骤的产品是否正确无误,并且与开发阶段和开发步骤的产品相一致(开发的软件产品是否正确无误)
确保软件能够正确无误地实现软件的需求
开发过程中开展的一系列活动,确保软件能够正确无误地实现软件的需求。
确认+与开发阶段、开发步骤的产品一致=验证
软件生存期各阶段中确认、验证与测试活动包括:
Ø 需求分析阶段
ú 任务:制定V,V&T计划;
确定V,V&T目标;
安排V,V&T活动;
选择采用的方法和工具;
制定进度并做出预算。
ú 产物:基础的测试用例
ú 复审:需求的确保
Ø 概要设计阶段
ú 任务:复审修订V,V&T计划;
ú 产物:针对要执行的逻辑功能生成测试数据;
补充软件需求。
ú 复审:确保内部的一致性、完全性、正确性、清晰性;
检验已进行的设计是否满足需求。
Ø 详细设计阶段
ú 任务:设计功能测试数据;
ú 复审:确保内部的一致性、完全性、正确性、清晰性;
检验详细设计是否对概要设计作出了正确无误的细化;
确认所做的设计满足需求。
Ø 编码与测试阶段
ú 任务:完成测试用例规格说明;
ú 复审:是否遵循编码标准;
自动或手工分析程序;
运行测试用例,以保满足验收要求;
产品验收。
Ø 运行与维护阶段
ú 任务:软件评估;
软件修改评估;
回归测试。
1.3. 什么是软件测试
1983 IEEE
定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
1.4. 应该怎样认识软件测试
能够彻底测试程序 ×
程序测试只能表明错误的存在,而不能表明错误的不存在 √
证实程序的正确性是测试的目的吗? ×
软件错误可以避免吗? ×
开发过程出现的错误何必急于解决? ×
程序验证方法能否取代测试问题 ×
1.5. 软件测试发展的历史回顾