第3章软件测试实质3.1测试原则3.2测试术语定义有真正完美的软件么?经过测试人员的努力,能够消除所有的软件缺陷么?如果做不到,我们该怎么办?3.1测试原则(特点)1、完全测试程序是不可能的左图是一个不超过100行的程序结构图,有大概100,000,000,000,000条可能的执行路径。以每秒执行1000个测试用例的速度计算,完成所有可能路径的测试大概需要3170年。白盒测试如果你打算测试下windows的计算器,只考虑整数的加法:x+yxyz在32位的计算机上运行,只考虑x,y是整数,不同的测试数据组合最大可能数目为:2的64方,以每秒执行1000个测试用例的速度计算,完成测试大概需要工作5亿年。黑盒测试无法进行完全测试的原因下面的各种情况,都可能导致问题的复杂化,或使软件留有隐患:输入量太大输出结果太多软件执行路径太多软件说明书本身就是主观的产物,可能不正确,也经常会变动。2、软件测试是有风险的如果我们不去进行完全测试,必然会遗漏或放弃些什么,换句话说:我们是在冒险!我们究竟该怎么做才能将风险降低?关键思想:将数量巨大的可能测试减少到可以控制的范围,以及针对风险做出明智的选择,哪些测试不重要,哪些重要。缺陷数量测试量最优测试点测试费用漏掉的缺陷3、测试无法显示潜伏的软件缺陷测试不是为了证明软件是完善的,而是要尽量证明软件是有问题的!只能报告软件缺陷存在不能报告软件缺陷不存在4、找到的缺陷越多,说明软件缺陷越多软件缺陷就和生活中的害虫一样,发现一个,往往附近就可能会有一群!为什么会这样:程序员也有状态、心情不佳的时候人们总是习惯反复犯同样的错误缺陷往往是有关联的,一个错误往往导致更多的错误,而你可能只是发现了冰山的一角5、杀虫剂现象:软件测试越多,免疫力越强难道软件也像生物一样能自动进化?其实指的是无论是项目组、程序员,还是测试人员,一般都有常规、固定的工作模式或习惯,容易产生盲点。回想一下螺旋模式,不断的重复改善:改变测试方法,改变测试重点6、并非所有的软件缺陷都需要修复即使测试中发现了问题,也并非所有缺陷都需要或能够得到修复没有足够的时间修复的风险不算真正的软件缺陷不值得修复到底是否进行修复,有时很难决断,从这个角度而言,我们是在冒险,有时后果很严重7、难以说清的软件缺陷没有人发现软件中存在的问题,该问题是缺陷吗?没有答案完美本身就没有固定的标准你脸上长个痣,有人觉得难看是缺陷,有人觉得那是美人痣。。。(回顾)软件缺陷的定义产品说明书:是软件开发小组的一个协定。它对开发的产品进行定义,给出产品的细节、如何做、做什么、不能做什么。至少满足以下5个规则之一才称为软件缺陷:软件未实现产品说明书要求的功能。软件出现了产品说明书指明不应出现的错误。软件实现了产品说明书未提到的功能。软件未实现产品说明书虽未明确提及但应该实现的目标。软件难以理解、不易使用、运行缓慢或者从测试员的角度看最终用户会认为不好。8、产品说明书不断变化,没有最终版本开发者的噩梦!9、软件测试员在产品小组中不受欢迎早点找出缺陷、控制情绪、不要总是报告坏消息10、软件测试是一项讲究条理的技术工作不再是随心所欲3.2软件测试的术语定义1、精确和准确不准确,不精确精确,不准确准确,不精确准确,精确2、确认和验证确认:保证软件产品符合产品说明书验证:保证软件满足用户要求满足产品说明书未必满足实际需求哈勃太空望远镜的例子就是很典型的3、质量和可靠性可靠性:软件运行稳定质量:包括价格、服务等良好的可靠性并不代表良好的质量,只是其一4、测试和质量保证(QA)软件测试人员的职责是尽可能早的发现缺陷,并确保缺陷得以修复软件质量保证人员的职责是创建和执行改进软件开过程,并防止软件缺陷发生的标准和方法。一个关注如何避免产生缺陷,侧重点是控制产品产生的过程,一个关注如何尽快发现缺陷,重点是产品本身。软件质量保证活动与测试的关系单元测试开发方法学配置管理验证技术评审正确性验证性能调试集成测试系统测试原子事务模块冗余性质量保证检错避免错误测试调试容错