软件测试的实质
测试的原则
完全测试程序是不可能的
在拿到软件后进行完全测试,找到所有软件缺陷,确保软件完美无缺,这是不可能的。即使是最简单的程序也不行,4个主要原因如下:
- 输入量太大
- 输出结果太多
- 软件执行路径太多
- 软件说明书是主观的,可以从旁观者角度来看是缺陷
软件测试员的是有风险的行为
对于软件测试,测试员要学会的一个关键思想是,如何把数量巨大的可能测试减少到可以控制的范围,以及如何针对风险做出明智的选择,判断哪些重要,哪些不。
找到缺陷越多,说明软件缺陷越多
生活中的害虫和软件缺陷几乎完全一样,都成群结队出现,发现一个,附近可能还会有一群。
杀虫剂怪事
与生物的抗药性一样,描述软件测试越多,其对测试的免疫力越来越强。为了克服杀虫剂怪事,测试员必须不断地编写不同的新的测试程序,对不同部分进行测试,以便找出更多软件缺陷。
并非所有缺陷都要修复
虽然测试员尽了最大的努力,但是并非所有的软件缺陷都要修复。测试员要进行良好的判断,搞清楚什么情况下不能追求完美。项目小组需要进行取舍,根据风险决定哪些缺陷需要修复,哪些不需要修复。
不需要修复的原因有这些:1. 没有足够的时间、2. 不算真正的软件缺陷、3. 修复的风险太大、4. 不值得修复
什么叫缺陷难以说清
前面提到了满足软件缺陷的几个条件,遵守这些规则,有助于澄清什么样的软件缺陷才算缺陷的问题。另外,尚未发现或者未观察到的软件缺陷只能说是潜在缺陷。
软件说明书从没有最终版本
软件开发者面临一个难题,整个行业变化太快,去年还很先进的产品今年就过时了;同时软件变得更庞大,更复杂,功能越来越多,导致软件开发周期越来越长。导致产品说明书经常变化。
软件测试是一项讲究条理的专业技术
软件测试的术语与定义
精确与准确(precision&accurancy)
Accuracy正确率,即是上述正确/错误的衡量指标;而Precision准确率,则是上述模糊/精确的衡量指标。题图很好地区分了Accuracy和Precision的区别。我们在现实生活中,更期望的是能射中靶心(提高Accuracy),而不是将箭射在同一个点上(提高Precision),我们要时刻警觉自己陷入这种错误中。
软件测试要精度还是准度很大程度上取决于产品是什么,最终取决于开发小组的目标是什么
确认和验证(verification&validation)
确认时保证软件复合产品说明书的过程;验证时保证软件满足用户要求的过程。验证注重“过程”,确认注重“结果”。
确认和验证同样适用于软件测试,绝对不能假设产品说明书是对的,如果确认产品说明书并对最终产品验证,就有希望避免类似哈勃太空望远镜的问题。
质量与可靠性
软件测试员往往会错误的以为质量与可靠性是一回事。但可靠性其实是质量的一个方面,为了确保程序质量高且可靠性强,软件测试员必须在整个产品的开发过程中进行确认与验证。
测试与质量保证
最后一对定义是测试(testing)和质量保证(quality assurance),这两个术语经常用于描述确认和验证的小组和过程。
- 软件测试员的目标是尽可能早的找出软件缺陷,并确保缺陷得以修复。
- 软件质量保障人员的主要职责是创建与执行软件开发过程并防止软件缺陷发生的标准和方法。