第一章——引论
文章目录
引论
1.1软件测试的必要性
软件开发和软件测试的关系,芯片设计与验证,很多东西是相通的。软件测试是非常必要的
1.迪士尼游戏软件无法在多种PC机器上运行
2.英特尔奔腾CPU芯片软件缺陷,美国丹佛机场软件缺陷,都造成了上亿美元损失
3.美国火星探测飞船坠毁,软件测试重视程度不够,没有做集成测试
4.产生的更多悲剧,“冲击波”计算机病毒,放射性设备,导弹拦截系统……
1.2 为什么要进行软件测试?
因此软件测试是十分重要的,是质检的环节,软件开发或者说芯片设计是在创造,那么测试或者验证(verification)就是在做质检的工作,芯片设计一定会有bug,验证是必不可少的。
去修正出现问题的产品所花的钱,比多聘用几个测试人员的费用要高得多!
1.3 什么是软件测试?
QC(quality control),质量检验,力求发现其中的各种缺陷,从而控制软件产品的质量
1.3.1 软件测试学科的形成
早期的开发和测试分的不是很开,1972年,软件测试先驱 Bill Hetzel 博士下了定义:“软件测试是一系列活动,这些活动是为了评估一个程序活软件系统的特性或能力,并确定其是否达到了预期效果 ”。
- 测试是用来验证软件功能执行的正确性
- 测试的目的是验证软件是否符合事先定义的要求
- 测试的活动是以需求定义,软件设计的结果>+
1.3.2 正反两面的争辩
- 软件测试应该是为了发现缺陷,而不是证明程序是无错误的
- 测试没有发现问题并不能说明问题就不存在
- 一个成功的测试必须是发现了软件问题的测试,否则测试就没有价值
测试的目的是证明这个软件是有bug的,是有错误的,而不是证明这个软件是好的,是没有问题的。如果抱着后者的想法去做测试,非常不利于测试人员发现软件的错误。
同时测试要以检验是否满足需求为目标,同时兼顾风险的观点,经济的观点。
1.4 测试和开发的关系
传统的软件瀑布模型:需求分析——>设计——>编程——>测试——>维护。认为测试是在代码完成之后进行,强调测试仅仅是对程序的检验,存在较大的局限性。
现在普遍认为软件测试应该贯穿整个软件的生命周期。V模型认为软件测试和项目同时启动。从四个层次完成对软件的验证,需求,系统架构设计,详细的产品设计和代码的验证。
- 需求验证————验收测试
- 系统架构设计————系统非功能性测试
- 产品详细设计————功能测试
- 代码的验证————单元测试和集成测试
1.5 测试和质量保证的关系
软件质量保证(software quality assurance)SQA 是通过对软件产品有计划的进行评审和审计来验证软件是否合乎标准的系统工程,SQA是一项管理工作,侧重于对流程的评审和监控,而测试是技术性的工作,侧重对产品评估和验证。
1.6 测试驱动开发的思想(test driven development,TDD)
TDD有别于以往的先编码后测试的开发过程,而是在编程之前,先写测试脚本或设计测试用例,强调测试先行,使得开发人员对所写的代码有足够的信息,也有勇气进行代码重构。
总结
本章为绪论,讲了软件测试的重要性,软件测试是软件质量保证的重要手段之一,是软件开发过程中不可缺少的部分。明白了软件测试非常重要。