第十章 软件测试
验证与确认
软件的错误
(1)软件未达到产品说明书标明的功能;
(2)软件出现了产品说明书指明不会出现的错误;
(3)软件功能超出了产品说明书指明的范围;
(4)软件未达到产品说明书虽未指出但应达到的目标;
(5)软件测试人员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户不满意。
验证与确认
验证与确认是贯穿软件生命周期的规范化评估方法。
软件验证则试图证明在软件生存期各个阶段,软件产品或中间产品是否能满足客户需求,包括逻辑协调性、完备性和正确性。
软件确认是一系列的活动和过程,其目的是保证软件产品能够符合其描述要求。它包括需求规格说明的确认和程序的确认,而程序的确认又分为静态确认与动态确认。
V&V的活动
验证与确认在各个阶段中制定和管理的任务,其活动跨域了软件的整个生命周期。
软件测试基础
广义上讲,测试是指软件产品生存周期内所有的检查、评审和确认活动,如设计评审、系统测试。狭义上讲,测试是对软件产品质量的检验和评价,它一方面检查软件产品质量中存在的质量问题,同时对产品质量进行客观的评价。
软件测试的基本责任
(1)应当把”尽早地和不断地进行软件测试“作为软件开发者的座右铭
(2)程序员应避免检查自己的程序
(3)在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
(4)测试用例应测试输入数据和与之对应的预期输出结果这两部分组成
(5)充分注意测试中的群集现象
(6)严格执行测试计划,排除测试的随意性
(7)应当对每一个测试结果做全面检查
(8)妥善保存一切测试过程文档,为维护提供方便
软件测试与软件开发各阶段的关系
软件测试V模型
软件开发从获取需求、分析设计到编码实现,是一个自顶向下、逐步精化的过程。而软件测试过程却是自底向上,从局部到整体,逐步集成的过程。
测试文档
软件测试文档描述要执行的软件测试及测试的结果。
(1)测试计划
测试目标、测试方法、测试范围、测试资源、测试环境和工具、测试体系结构、测试进度表。
(2)测试规范
系统运行、总体测试方法、测试用例的生成步骤、测试用例的执行步骤、调试和验证。
(3)测试用例
(4)缺陷报告
缺陷编号、题目、状态、提出、解决、所属项目、测试环境、缺陷报告步骤、期待结果、附件。
重要性:1.验证需求的正确性 2.检验测试资源 3.明确任务的风险 4.生成测试用例 5.评价测试结果 6.再测试 7.决定测试性的有效性
软件测试信息流
软件信息流
软件测试人员
(1)沟通能力
(2)移情能力
(3)技术能力
(4)自信心
(5)外交能力
(6)幽默感
(7)很强的记忆力
(8)耐心
(9)怀疑能力
(10)自我督促
(11)洞察力
软件测试策略
软件产品在交付使用之前,一般需要经过单元测试、集成测试、确认测试和系统测试。
软件测试步骤
单元测试
(1)模块接口测试;
(2)模块局部数据结构测试;
(3)模块中所有独立执行通路测试;
(4)模块的各条错误处理通路测试;
(5)模块边界条件测试;
集成测试
1.自顶向下集成
(1)以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代;
(2)依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;
(3)每集成一个模块立即测试一遍;
(4)只有每组测试完成后,才着手替换下一个桩模块;
(5)为避免引入新错误,须不断地进行回归测试,即全部或部分地重复已做过的测试。
2.自底向上集成
(1)把底层模块组织成实现某个子功能的模块群;
(2)开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;
(3)对每个模块群进行测试;
(4)删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群。
确认测试
确认测试主要检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准,
系统测试
系统测试之前,软件工程师应完成下列工作:
(1)为测试软件系统的输入信息设计出错处理通路;
(2)设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助;
(3)参与系统测试的规划和设计,保证软件测试的合理性。
系统测试应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能正确工作并完成所赋予的任务。
(1)恢复测试
(2)安全测试
(3)强度测试
(4)性能测试
软件调试
1.简单的调试方法
(1)在程序中打印语句
(2)运行部分程序
(3)借助于调试工具
2.归纳法调试
(1)收集有关的数据;
(2)组织数据;
(3)提出假设;
(4)证明假设;
3.演绎法调试
(1)列出所有可能的错误原因的假设;
(2)排除不适当的假设;
(3)精化余下的假设;
(4)证明余下的假设。
4.回溯法调试
从程序产生错误的地方出发,人工沿程序的逻辑路径反向搜索,直到找到错误的原因为止。
软件测试方法
静态测试和动态测试
静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测,主要方法包括:人工测试、计算机辅助静态分析。
动态测试是指通过运行程序发现一些错误,一般意义上的测试主要是指动态测试。
黑盒测试与白盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有功能的情况下,通过测试来检测每个功能是否都能正常使用。主要方法:等价类划分、边界值分析、因—果图、错误推测等。
白盒测试也称结构测试或逻辑驱动测试,它知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作。主要方法:逻辑驱动、基本路径测试等。
程序的静态测试
程序的静态测试是在不执行程序的条件下,有条理地仔细审查软件设计、体系结构和代码,从而找出软件错误的过程。
(1)查找问题 (2)遵守规则 (3)审查准备 (4)编写报告
面向对象软件测试
面向对象测试类型
1.模型测试
用例场景测试、系统原型走查、需求模型一致性检查、分析设计模型的检查和走查
2.类测试
类属性的测试、类操作的测试、可能状态下的对象测试
3.交互测试
用例或基于场景的测试、线程测试、对象交互测试
4.系统(子系统)测试
功能测试、压力测试、兼容性测试、安全测试、安装测试以及恢复测试
5.验收测试
6.发布测试
面向对象测试实例
1.日期问题 2.线性表测试
软件测试工具
1.功能测试工具 2.性能测试工具 3.缺陷管理工具 4.测试管理工具
Junit
(1)创建,从junit.framework.TestCase派生unit test需要的test case;
(2)编写测试方法,提供类似如下函数签名的测试方法:
public void testXXXXX();
(3)编译,书写完test case后,编译所写的test case类;
(4)运行,启动junit test runner,运行这个test case 。
LoadRunner
LoadRunner是一种预测行为和性能的工业标准级负载测试工具。