作者:不详

软件开发和使用的历史已经留给了我们很多由于软件缺陷而导致的巨大财力、物力损失的经验教训。这些经验教训迫使我们这些测试工程师们必须采取强有力的检测措施来检测未发现的隐藏的软件缺陷。

生产软件的最终目的是为了满足客户需求,我们以客户需求作为评判软件质量的标准,认为软件缺陷( Software Bug )的具体含义包括下面几个因素:

☆ 软件未达到客户需求的功能和性能;

☆ 软件超出客户需求的范围;

☆ 软件出现客户需求不能容忍的错误;

☆ 软件的使用未能符合客户的习惯和工作环境。

考虑到设计等方面的因素,我们还可以认为软件缺陷还可以包括软件设计不符合规范,未能在特定的条件(资金、范围等)达到最佳等。可惜的是,我们中的很多人更倾向于把软件缺陷看成运行时出现问题上来,认为软件测试仅限于程序提交之后。

在目前的国内环境下,我们几乎看不到完整准确的客户需求说明书,加以客户的需求时时在变,追求完美的测试变得不太可能。因此作为一个优异的测试人员,追求软件质量的完美固然是我们的宗旨,但是明确软件测试现实与理想的差距,在软件测试中学会取舍和让步,对软件测试是有百益而无一弊的。

下面是一些软件测试的常识,对这些常识的理解和运用将有助于我们在进行软件测试时能够更好的把握软件测试的尺度。

☆ 测试是不完全的(测试不完全)

很显然,由于软件需求的不完整性、软件逻辑路径的组合性、输入数据的大量性及结果多样性等因素,哪怕是一个极其简单的程序,要想穷尽所有逻辑路径,所有输入数据和验证所有结果是非常困难的一件事情。我们举一个简单的例子,比如说求两个整数的最大公约数。其输入信息为两个正整数。但是如果我们将整个正整数域的数字进行一番测试的话,从其数目的无限性我们便可证明是这样的测试在实际生活中是行不通的,即便某一天我们能够穷尽该程序,只怕我们乃至我们的子孙都早已作古了。为此作为软件测试,我们一般采用等价类和边界值分析等措施来进行实际的软件测试,寻找最小用例集合成为我们精简测试复杂性的一条必经之道。

☆ 测试具有免疫性(软件缺陷免疫性)

软件缺陷与病毒一样具有可怕的 “ 免疫性 ” ,测试人员对其采用的测试越多,其免疫能力就越强,寻找更多软件缺陷就更加困难。由数学上的概率论我们可以推出这一结论。假设一个 50000 行的程序中有 500 个软件缺陷并且这些软件错误分布时均匀的,则每 100 行可以找到一个软件缺陷。我们假设测试人员用某种方法花在查找软件缺陷的精力为 X 小时 /100 行。照此推算,软件存在 500 个缺陷时,我们查找一个软件缺陷需要 X 小时,当软件只存在 5 个错误时,我们每查找一个软件缺陷需要 100X 小时。实践证明,实际的测试过程比上面的假设更为苛刻,为此我们必须更换不同的测试方式和测试数据。该例子还说明了在软件测试中采用单一的方法不能高效和完全的针对所有软件缺陷,因此软件测试应该尽可能的多采用多种途径进行测试。

☆ 测试是 “ 泛型概念 ” (全程测试)

我一直反对软件测试仅存在于程序完成之后。如果单纯的只将程序设计阶段后的阶段称之为软件测试的话,需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。需求缺陷、设计缺陷也是软件缺陷,记住 “ 软件缺陷具有生育能力 ” 。软件测试应该跨越整个软件开发流程。需求验证(自检)和设计验证(自检)也可以算作软件测试(建议称为:需求测试和设计测试)的一种。软件测试应该是一个泛型概念,涵盖整个软件生命周期,这样才能确保周期的每个阶段禁得起考验。同时测试本身也需要有第三者进行评估(信息系统审计和软件工程监理),即测试本身也应当被测试,从而确保测试自身的可靠性和高效性。否则自身不正,难以服人。

另外还需指出的是软件测试是提高软件产品质量的必要条件而非充分条件,软件测试是提高产品质量最直接、最快捷的手段,但决不是一个根本手段。

☆ 80-20 原则

80% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。聪明的测试人员会根据这个原则很快找出较多的缺陷而愚蠢的测试人员却仍在漫无目的地到处搜寻。

80-20 原则的另外一种情况是,我们在系统分析、系统设计、系统实现阶段的复审,测试工作中能够发现和避免 80% 的软件缺陷,此后的系统测试能够帮助我们找出剩余缺陷中的 80% ,最后的 5% 的软件缺陷可能只有在系统交付使用后用户经过大范围、长时间使用后才会曝露出来。因为软件测试只能够保证尽可能多地发现软件缺陷,却无法保证能够发现所有的软件缺陷。

80-20 原则还能反映到软件测试的自动化方面上来,实践证明 80% 的软件缺陷可以借助人工测试而发现, 20% 的软件缺陷可以借助自动化测试能够得以发现。由于这二者间具有交叉的部分,因此尚有 5% 左右的软件缺陷需要通过其他方式进行发现和修正。

☆ 为效益而测试

为什么我们要实施软件测试,是为了提高项目的质量效益最终以提高项目的总体效益。为此我们不难得出我们在实施软件测试应该掌握的度。软件测试应该在软件测试成本和软件质量效益两者间找到一个平衡点。这个平衡点就是我们在实施软件测试时应该遵守的度。单方面的追求都必然损害软件测试存在的价值和意义。一般说来,在软件测试中我们应该尽量地保持软件测试简单性,切勿将软件测试过度复杂化,拿物理学家爱因斯坦的话说就是: Keep it simple but not too simple 。

☆ 缺陷的必然性

软件测试中,由于错误的关联性,并不是所有的软件缺陷都能够得以修复。某些软件缺陷虽然能够得以修复但在修复的过程中我们会难免引入新的软件缺陷。很多软件缺陷之间是相互矛盾的,一个矛盾的消失必然会引发另外一个矛盾的产生。比如我们在解决通用性的缺陷后往往会带来执行效率上的缺陷。更何况在缺陷的修复过程中,我们常常还会受时间、成本等方面的限制因此无法有效、完整地修复所有的软件缺陷。因此评估软件缺陷的重要度、影响范围,选择一个折中的方案或是从非软件的因素(比如提升硬件性能)考虑软件缺陷成为我们在面对软件缺陷时一个必须直面的事实。

☆ 软件测试必须有预期结果

没有预期结果的测试是不可理喻的。软件缺陷是经过对比而得出来的。这正如没有标准无法进行度量一样。如果我们事先不知道或是无法肯定预期的结果,我们必然无法了解测试正确性。这很容易然人感觉如盲人摸象一般,不少测试人员常常凭借自身的感觉去评判软件缺陷的发生,其结果往往是把似是而非的东西作为正确的结果来判断,因此常常出现误测的现象。

☆ 软件测试的意义 - 事后分析

软件测试的目的单单是发现缺陷这么简单吗?如果是 “ 是 ” 的话,我敢保证,类似的软件缺陷在下一次新项目的软件测试中还会发生。古语说得好, “ 不知道历史的人必然会重蹈覆辙 ” 。没有对软件测试结果进行认真的分析,我们就无法了解缺陷发生的原因和应对措施,结果是我们不得不耗费的大量的人力和物力来再次查找软件缺陷。很可惜,目前大多测试团队都没有意识到这一点,测试报告中缺乏测试结果分析这一环节。

结论:

软件测试是一个需要 “ 自觉 ” 的过程,作为一个测试人员,遇事沉着,把持尺度,从根本上应对软件测试有着正确的认识,希望本文对读者对软件测试的认识有所帮助。

软件测试理论你知道多少?相关推荐

  1. 软件测试c语言代码_软件测试理论知多少?

    有源医疗器械很多都是带有软件的,今天一起了解下软件测试理论:软件测试目的,软件测试定义,软件测试原则,软件测试分类,软件测试方法,测试基本流程. 软件测试定义:软件测试(英语:software tes ...

  2. 软件测试理论、方法、流程及规范

    软件测试理论.方法.流程及规范 一.软件测试理论 1. 软件测试的定义: 使用人工和自动化测试的手段测试某个软件存在的错误或者缺陷的,目的在于检验是否满足了需求. 2. 软件测试的目的: 是想以最少的 ...

  3. 软件测试理论与经验--阅读笔记

    第1章 测试员的角色 测试人员的角色到底是什么?能够定义的很清楚吗? 经验1-测试员是项目的前灯 测试就是要找到信息,有关项目或者产品的关键信息决策都需要根据这些信息来决定. 经验2-测试员的使命决定 ...

  4. 软件测试理论与经验-第1章(测试员的角色)-第2章(按测试员的方式思考)-阅读笔记

    Lessons Learned in Software Testing  美 Cem kaner.James Bach.Bret Pettichord著 本书的三位作者具有多年的测试经验,知道成功的测 ...

  5. 软件测试技术指南-第一章软件测试理论(此章完结)

    1.3软件测试基本概念 测试(Test)就是检测特定的目标,是否符号标准而采用专用工具或方法进行验证,并最终得出特定结构,软件测试(Software Testing)伴随着软件的诞生而产生,软件测试就 ...

  6. 软件测试理论 - 题目整理

    单选题 一般情况下,当一个软件新版本提交测试时,要有1-2名测试人员首先进行什么测试,可以帮助测试团队合理地利用有效资源? A 配置测试 B 安装测试 C 冒烟测试 D 回归测试 解析:C,冒烟测试通 ...

  7. 软件测试理论之测试用例设计六把刀

    日常设计测试用例的时候,有许多经典的测试理论.比如边界法.等价法,这些经常用到我们日常的工作中.当然也有许多的理论,比如正交分解法是使用起来非常费劲.往往转化为实际的容易理解的测试语言就非常困难. 测 ...

  8. 软件测试理论入门(二)

    1.什么是软件测试 验证软件是否满足用户的需求 2.软件测试和开发的区别是什么? (1) 软件测试和软件开发中的调试的区别 目的:软件测试的目的,测试人员根据需求去判断软件是否满足用户的需求:软件调试 ...

  9. 软件测试理论入门(一)

    软件测试 验证软件是否满足用户的需求.(不是以软件测试人员的主观意愿去判断软件的质量的,它是有标准的) 软件测试和调试的区别 目的不同 –测试的任务是发现程序中的缺陷:调试的任务是定位并且解决程序中的 ...

最新文章

  1. UStore-自定义JDF文件格式输出
  2. Webstorm出现NoGitBinary时配置Git环境变量
  3. 信息化项目甲方采购的准备与实施
  4. 看到的一个很不错的分析LCA和RMQ的文章(转载,先收着)
  5. 图像局部特征(八)--斑点检测子SIFT/SURF区别总结
  6. 拓端tecdat|R语言中Gibbs抽样的Bayesian贝叶斯简单线性回归
  7. 主板h110能装linux吗_华硕H110T +i3 8100T 组装黑苹果Mac mini安装教程
  8. 中国行政区域划分图 华北,东北,华东,中南,西南,西北
  9. mil与mm单位换算工具
  10. 构建用户画像-标签体系
  11. Faraway(枚举 去绝对值)
  12. CKEditor5系列三:创建一个功能相对完善的插件
  13. 【代码重构】拒绝继承的遗赠(Refused Bequest)--如何处理子类无需使用到父类中的某些方法和变量的情况?
  14. 大数据面试题(一):HDFS核心高频面试题
  15. 外包or外派岗,可以去?
  16. c#利用ironPython调用Python研究过程
  17. 转 javascip学习笔记
  18. 日活跃用户1亿,它凭什么一跃成为最受欢迎的社交App?
  19. Android 高德地图之自定义导航
  20. 转自 计算机硕士找offer的总结 节选

热门文章

  1. 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  2. c mysql显示多条数据_用一条mysql语句插入多条数据
  3. js变量传递给less_如何利用webpack实现一键换肤(CSS变量替换)
  4. Springboot实战:3种 Springboot 全局时间格式化方式
  5. 高并发下的redis击穿,你需要了解下布隆过滤器
  6. iOS多线程中performSelector: 和dispatch_time的不同
  7. python解压zip文件_python-29 python解压压缩包的几种方法
  8. 阿里p8呕心沥血整理出来的,APP UI自动化测试思路总结,速看
  9. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码
  10. protoc支持c_protoc 命令参数