Chapter 1 全面认识软件测试
1.1软件测试基本认知
为了做好测试,既要有深度,又要有广度;既要有效率,又要有测试工作自身完整的质量。所以,我们应该将正向思维和逆向思维有机地结合起来,做到效率和质量的平衡。
正向思维:验功能。 逆向思维:尽可能找bug。
1.2从狭义测试到广义测试
狭义:动态测试——运行程序而进行的测试,测试只是编程之后的阶段,这也是由传统的瀑布模型儿决定的。
广义:动态测试+静态测试,将需求评审、设计评审、代码评审等也纳入软件测试工作之中。使软件测试成为贯穿整个软件研发周期的质量保证活动。引入静态测试,就可以尽早地发现问题,把问题消灭在萌芽之中,将每个阶段产生的缺陷及时清除,极大地提高产品的质量,有效降低企业成本。
1.3基于质量的认知
缺陷(bug)就是质量的对立面,一切违背质量的问题都可以看作软件缺陷。
质量相对客户而存在,没有客户就没有质量,质量是客户的满意度。
1.产品质量
功能适应性、效率、兼容性、易用性、可靠性、安全性、可维护性、可移植性。
2.使用质量
有效性、效率、满意(有用、信任、愉悦、舒服)、远离风险(经济、健康、安全、环境)、语境完整性(完整、灵活)。
1.4基于风险的认知
软件测试不仅仅停留在单个缺陷上,要从所发现的问题看到(分析出)某类质量风险或某个具有潜在风险的区域。
软件测试被看作是一个动态的质量监控过程,对软件开发全过程进行检测,随时发现不健康的征兆,及时评估新的风险,设置新的监控基准,不断持续。
在敏捷开发中,软件测试就能被解释为对软件产品质量的持续评估。
1.5基于社会性的认知
由于软件常和人类活动紧密联系在一起,所以软件具有很强的社会性,所以有必要把心理学、人类学和社会学等引入到软件测试中。
1.6基于经济的认知
软件测试就是通过投入较低的保障性成本来降低劣质成本,帮助企业获得利润,因此应该从项目启动的第一天起,测试人员就参与进去,尽快尽早地发现更多的缺陷,并督促和帮助开发人员修正缺陷。
1.7基于标准的认知
软件测试被视为“验证”和“有效性确认”这两类活动构成的整体。
验证:检验软件是否已正确地实现了产品规格说明书所定义的系统功能和特性。
有效性确认:确认开发的软件是否满足用户实际需求的活动。
1.8基于Test Oracle的认知
软件测试包括两部分工作——对已知的检测和对未知的试验。即要了解测试的输入具有两重性——确定性和不确定性,而且测试的输出也具有很大的不确定性。
- 什么是Test Oracle(测试预言)?
一种决定一项测试是否通过的(判断)机制。Test Oracle一般依据下列内容作出判断:
1.需求规格说明书和其他需求,设计规范文档;2.竞品;3.启发式测试预言(Heuristic oracle);4.统计测试预言(Statistical oracle );5.一致性测试预言(Consistency oracle);6.基于模型的测试预言(Model-based oracle);7.人类预言(Human oracle)。
“测试=检测+试验”意味着:测试=基于确定性模型/明确测试预言的自动化测试+基于AI搜索的/工具随机/模糊模型的/手工的探索式测试。
1.9基于批判性思维的认知
从批判性思维看,软件测试就是借助观察、经验、反思,推理或沟通等收集信息,并对软件产品相关的质量信息进行分析,以此评估软件质量,并做出结论。
批判性思维促进我们重新审视问题或主题、意图和陈述之间实际的推论关系,勇于质疑证据,去分析和评估陈述、论证的过程。
基于批判性思维,重新定义“软件测试”:软件测试就是测试人员不断质疑被检测系统的过程。
探索式测试聚焦被测系统,侧重发现缺陷,强调在一个相对封闭时间(90min左右的session)内以“设计、执行、分析、学习”的过程不断优化测试的过程。,
1.10基于传统开发模式的认知
软件测试和软件开发构成一个全过程的交互、协作的关系,两者自始至终一起工作,共同致力于同一个目标——按时、高质量地完成项目。“W模型”可以较好的呈现软件测试在SDLC中的位置。
1.11基于敏捷开发的认知
敏捷测试就是符合敏捷宣言思想,遵守敏捷开发原则,在敏捷开发环境下能够很好地和其整体开发流程融合的一系列的测试实践,并具有鲜明的敏捷开发的特征。
1.12小结
软件测试有以下四个方面的的作用:产品质量评估;持续的质量反馈;客户满意度的提升;缺陷预防。