《需求设计:构建用户想要和需要的产品》——3.8 测试与检验

简介:

本节书摘来自华章计算机《需求设计:构建用户想要和需要的产品》一书中的第3章,第3.8节,作者: [英] 克里斯·布里顿(Chris Britton) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.8 测试与检验

大型项目的测试会分成很多层。我们经常能看见那种包含单元测试、功能测试、回归测试、组件测试、性能测试、系统测试及验收测试的项目。无论测试能找到多少bug,它都要耗费大量的资源与时间。在Software Estimating Rules of Thumb这篇文章[19]中,Capers Jones提出了他所总结的“软件开发成本动因定律”(Law of Software Development Cost Drivers),该定律宣称,“对于所有的软件来说,查找及修复bug都是成本最高的活动。”顺便再说一下,对于BDUF项目来说,还有几个成本比较高的活动排在该因素的后面,它们分别是:写文档、写代码、开会和管理。在军事项目中,写文档会升至第一位。在敏捷项目中,第二位和第四位互换。
测试有一个令人失望的特点,那就是它非常低效。其原因有很多:

  • 测试通常致力于证明程序已经实现了它所应该达成的功能,而很少会致力于查找错误。如果我们发现了bug,那就会修复该bug并撰写一项测试,以证明程序现在可以正常运作,然后,这项测试会反复地运行,于是,我们自然就会发现它每次都能够运行通过。简单来说,我们所测试的路径,只不过是程序最有可能走到的那些路径而已。
  • 测试,是由那些熟悉应用程序工作原理的人所编写的。而使用该应用程序的人,并不知道它的工作原理,因此可能会采用一些与测试者不同的方式,来操作该应用程序。早在1989年,Miller等就有一项惊人的发现,他们把一些胡乱生成的内容输入给各种UNIX实用程序[20],然后看到其中有25%~33%的程序无法通过测试。
  • 构建测试所需的工作量很大,因此我们不会构建太多的测试。
  • 测试本身通常也含有一些错误。
  • 有一些错误很难通过测试来检查,例如,时机错误、因数据库中缺失数据所引发的错误,以及由于网络入侵而造成的安全问题等。
  • 大部分的测试,都是在测试应用程序上面运行的,然而还有一些错误,则与版本不符或配置不当有关,这些错误发生在我们把应用程序移动到生产系统中的时候。

公司应该让最优秀的人去实现一套良好的系统测试机制。我们也可以换一种说法:编程本领最强的人,不一定是最能把测试写好的人。最适合写测试的,应该是那种颇具创意,而且特别喜欢把应用程序搞坏的人。
有一次笔者听到这样一种说法:专业的古典音乐家与业余的古典音乐家不同,后者只要能把某段乐谱准确地弹完一遍,就不再继续练习了,而前者则会反复练习,直到毫不出错。这是两种不同的境界,业余人士只满足于我能弹好一遍就行,而专家追求的则是每次都能弹好。测试也与之类似。测试并不是只保证应用程序能达到业余水平,而是要按照专业的水平来要求它。为了暴露程序的故障点,笔者建议你采用以下做法:

  • 试着令应用程序承担大量的负载,尤其是要使应用程序感觉到,这些负载好像是多位用户同时造成的。
  • 试着在程序里面引发故障,而且还要试着在错误恢复的过程之中引发故障。
  • 在接缝处寻找故障,也就是要检查部件之间的每一条依赖关系并对其进行测试。

如果应用程序已经发行,而且数据库里也已经有了真实的数据,那么就试着编写一些采用真实数据来运作的测试,同时可能还需要对这些数据做匿名处理。有许多测试都在反复地使用同一份数据,这些测试的编写者尤其需要注意:如果数据库发生了变化,那么相应的数据可能也会有所改变。
想要制作一款高质量的程序,单靠测试是不够的。还应该采取下列措施:

  • 使用静态分析器去分析代码,以便找出其中从来没有执行过的代码及变量、还没有初始化就直接使用的变量、有可能无法终止的循环,以及潜在的性能及安全问题。
  • 使用代码检查机制。笔者建议执行两个层面的代码检查,第一个层面是由团队内的其他程序员来检查,第二个层面是由系统测试组来检查。前者应该帮助我们消除那些简单的错误以及对系统配置方式的误解,而后者则应该指出安全隐患等更为微妙的问题。

有统计数据表明,上面这些做法和测试一样有效,它也能够检查出bug,而且这些bug还和那些经由测试所检查出来的bug有所不同。
如果我们能够很好地计算出bug的数量,那么可能就会注意到,其中某一部分代码会频繁地出现bug,这部分代码就好像烛光,而这些bug(程序错误/虫子),则像是扑火的飞蛾。这一部分代码需要更为详细地检视,而且有可能需要重写。

相关文章
|
3月前
|
安全 Linux 虚拟化
|
3月前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
71 1
|
3月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
1月前
|
分布式计算 Shell MaxCompute
odps测试表及大量数据构建测试
odps测试表及大量数据构建测试
|
4月前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
73 3
|
4月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
1月前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
91 35
|
5月前
|
人工智能 自然语言处理 测试技术
用图灵测试检验AI尤其是大语言模型,真的科学吗?
【9月更文挑战第25天】《Does GPT-4 Pass the Turing Test?》一文评估了先进AI模型GPT-4的图灵测试表现。尽管GPT-4在某些对话中成功迷惑了参与者,但其整体成功率仅为41%,低于人类的63%。图灵测试作为评估AI语言能力的工具依然有效,但存在局限性,如无法评估AI的认知机制且受主观判断影响。此外,测试还引发了关于AI智能及伦理的讨论。
295 6
|
1月前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
44 16
|
5月前
|
人工智能 数据可视化 API
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
172 2

热门文章

最新文章

  • 1
    小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
  • 2
    3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密
  • 3
    Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
  • 4
    基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 7
    「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
  • 8
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
  • 9
    AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
  • 10
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描