一、软件测试的目的
软件测试的目的是检验软件系统是否满足规定的需求或弄清预期结果与实际结果之间的差别,尽可能多地找出软件中的错误 。
也就是尽可能的发现问题并确保问题修复。
发现问题并确保修复使系统正常使用,为什么一定得进行软件测试这步呢?开发人员也可以测试,这样还能省一步沟通,测出问题直接修复就好。首先开发是非常自信的,没有开发人是认为自己的程序是有问题的。其次,测试是一个学科,它是有自己一套完整的工作体系和测试方法的。
五大目的
提高软件质量
保证软件的安全
降低软件开发的成本
降低企业风险
提升用户体验感
提高软件的质量
软件测试的首要目的就是提高软件的质量,保证软件的高质量,让用户使用时有更好的体验。
二、保证软件的安全
软件测试的第二大目的就是保证软件的安全,像银行系统的APP,会涉及到资金的支出和存入,对软件的安全性要求是特别高的。所以要尽可能多的覆盖资金相关的场景再者就是需要安全性测试(软件测试的一个技术分支)来提高产品的安全性,保证产品质量。
三、降低软件开发成本
软件测试的另外一个目的就是降低软件的开发成本,软件测试的越早介入,问题发现的越早, 软件缺陷修正时所投入的人力物力就越少 。
四、降低企业风险
除了降低开发成本,还可以降低企业风险,试想,用户在使用过程中出现各种问题,客户的体验感就极差,想要长期或再次合作就很难,对企业的信誉严重影响。
五、提升用户体验感
开发人员在开发过程中都是以顺向思维来写程序代码的,所以很少有开发人员能够站在用户角度去思考,测试是除了顺向思维还需要逆向思维来思考程序是否有存在问题,站在用户的角度进行测试。尽可能让用户使用程序更舒畅、解决他们需要程序解决的问题。
六、软件测试的原则
软件测试的原则呢?就是前辈在以往工作中总结的经验,前人栽树给我们后人乘凉的。
测试是上下文相关的
各种产品或项目包含不同的元素、特征和要求。因此,测试人员不能对不同的项目用相同的测试方法。例如,金融项目的测试,安全性就是第一位。电子商务测试,功能性则更加重要。
穷尽测试是不可能的Exhaustive testing is impossible
时间、人员、资金或设备等资源都是有限,不可能对软件产品进行完全测试,即不可能考虑到或测试到软件产品的所有执行情况或路径。现在软件的规模越来越大,复杂度越来越高,想做到完全性的测试那就更不可能。这就需要在测试阶段,测试人员需要根据风险和优先级来进行测试,从而保证软件的质量。
七、测试尽早介入
为什么测试要尽早介入呢,简单的说就是保证软件质量,降低风险和成本。研发流程中,研发活动抽象 为需求分析、开发管理、 测试管理、发布运维四个阶段。
在传统的开发模型里,测试只关注测试管理活动,而严重缺乏对需求、开发的测试。据调查,缺陷的 修复成本与其发现时间成反比,且越晚修复其修复成果会成指数级增长。
缺陷集群性(2/8 原则)-Defect clustering
有一种理论,二八原则,一般认为,百分之 80 的缺陷是由百分之 20 的模块引起的。缺陷聚类指的是 在几个模块中发现了大部分缺陷。
这一原则要求测试团队利用自己的知识和经验,确定要测试的潜在模块。 这一预测有助于节省时间和 精力,因为团队只需要关注那些 “敏感” 领域。然而,这种方法也有缺点: 一旦测试人员只专注于那些敏感领域,可能会错过其他区域的错误。
八、杀虫剂悖论
当我们反复使用相同的杀虫剂的时候,会有少量害虫产生免疫而存活下来,使得杀虫剂失去药效 。测试 也一样。如果一直使用相同的测试方法或手段,可能无法发现新的 bug。为了解决这个问题,测试用例应当定期修订和评审,增加新的或不同的测试用例帮助发现更多的缺陷。测试人员不能一直依赖于现有的测试技术,还需要不断的提升测试方法以提高测试效率。
九、测试证明软件存在缺陷
测试只能证明软件中存在缺陷,但并不能证明软件中不存在缺陷。软件测试只是为了降低存在缺陷的可能性,即便是没有找到缺陷,也不能证明软件是完美的。
十、不存在缺陷的谬论
软件测试不仅仅只是为了找出 Bug 而存在的活动,还需要确认软件是否满足用户的期望和需求,如果产品不能满足用户的需求,即使没有出现任何缺陷,这个产品也是失败的。“没有错误”并不是我们的追求,在这互联网时代,始终快速给用户创造最大的价值才是我们孜孜不倦的追求。