如何开发高质量的软件 - 通过测试集中型的软件开发方法来提高软件质量

2023-10-27

“构建技术系统所要做的工作是非常繁重的,同时还需要专业知识:语言和协议,编码与调试,测试与重构。”——James Garrett


概述
每年各个企业都在努力实现企业的主要目标。通常,这都是通过实现基于度量指标的性能目标(可能包括质量目标)以及利用最佳惯例规范商业流程来实现的。最后,要通过一些测试和报告形式来评估这些目标对企业的影响。在接受评估之前,机智的员工都会要一个评估单——但是在开发新的软件产品,确定测试目标时,他们常常会忽略这一点。

企业在设计实体产品时,会花很多时间设计产品的生成流程,以及对完成的产品进行自动化测试。大家都不希望设计出一款无法高效地进行生产和测试的产品。产品在完成设计之前,先要解决生产和测试的问题。如果所设计的产品成本太高,或者无法持续地投入生产,那么该设计就没有任何意义。

如果软件开发也使用相同的做法会怎么样?假设,我们在设计软件系统时就想了很多方法来尽量提高软件的“生产”和“测试”效率。那么,我们不仅能保证软件产品的质量,还能提供一个很好的流程来确保软件在整个产品生命周期中都有高质量的水准。

构建可测试的软件
所设计的软件产品必须具备“可测性”,这样的观念可能需要企业转变一下思维模式。最初在进行设计和原型制作时,基本注重的都是功能和性能问题。虽然这些方面也很重要,但是如果生产出来的应用程序质量很差,存在很多难以维护的bug,那么产品功能和性能也就无从谈起了。

有一些“简单的”方法可以用来构建 “可测性”较高的软件产品,如:确保需求的完整性和正确性,在设计应用程序时要把软件测试放在心上,采用易于理解的编码方式,“真正”执行代码评审程序。

细读软件需求
确保软件需求的完整性可以防止很多缺陷的出现。我们可以考虑一下怎么为“平方根”函数写一个说明。实际上,这是深藏在数学函数库中的一个简单的函数,但是如果条件写得不够完善,可能也会把“简单的函数”执行得很糟糕。

看看这个说明:
square_root( )函数可以返回输入的所有有效值的平方根。

更好的说明是这样的:
square_root( )函数可以返回输入的所有有效值的平方根,如果输入的是无效值,就会返回0。有效输入包括正的32位浮点数,0,正无穷。无效输入是指:负数,负无穷,非数值。

根据这个说明,设计师可以轻松地构建一套低层级的需求和用于验证该函数能否正确执行的的测试用例。


分离控制和数据需求
在设计系统时,如果能将控制和数据处理清楚地分离开,可以简化设计,从而帮助提高测试效率。下图展示了如何它们是如何分离开的:
图1:将控制和数据处理清楚地分离开可以帮助提高测试效率

清楚地将二者分开,让设计师和测试人员能够专注于输入的特定类型,运行情况和结果。此外,精简的设计能够提高软件的重复使用率,降低维护成本。


注意编码风格和架构
要提高“可测性”,首先要做的是确保代码易于理解,灵活性高。在软件开发的早期,如果开发工程师开发的软件“体积小,运行快”,那么他会非常受器重。因为软件系统的内存和CPU容量是很有限的,工程师一直要努力在每个应用程序中添加更多的功能。而且,以前的应用程序的代码库比现在的小很多,当语言和硬件设备发生改变时,工程师常常会将代码全部重写一遍。

如今,情况和以前大不相同了。虽然现在应用程序的组件在大小和时间方面还是有限制,但是总的来说,应用程序的大小和生命周期都大大地扩大和延长了。所以,现在构建代码时,如果代码易于理解和维护,那将是一个很大的优势。幸好,使代码易于理解可以大大提高“可测性”。

咨询公司Virtual Solutions的Bob Gary有一句经典言论“用C或C++编写代码就像是在没有任何防护措施的情况下使用电锯”(引用自Byte (1998) Vol. 23, Nr 1-4 p.40)。下面有一些在编码风格方面有助于提高“可测性”的“安全防护措施”。

图2:利用这些窍门写出易于测试的代码


执行有重要意义的代码评审流程
如果我们问开发工程师什么样的代码算是设计良好的代码,可能每个人的回答都会不一样。执行具有重要意义的代码评审流程是一个很好的方法,可以判定代码对于其他人而言是否易懂。另外,团队会有很多自己的“团队知识”,在代码评审过程中可以运用这些知识。

提高软件质量的最佳做法
创造高品质文化的最佳方法就是为每个团队成员确立一个工作流程和度量标准,来解决每个部分的质量问题。比如,如果开发工程师可以在没有任何限制的情况对代码库进行修改,那么我们的代码很快就会漏洞百出。但是,如果开发工程师受到的限制太多,那么就很难发布出一个新版本。

所以我们需要一个可操作、可重复的流程。比如,开发工程师在配置管理器中对代码进行修改之前,要遵循以下规范:


图3: 备选的软件变更流程


如果说我们的企业不了解这些流程,或者说我们的代码库已经超过20年了,却没有一个完整的测试架构,那么我们就需要创建一个适用于这种环境的流程了。没有人会建议创建测试用例使已部署的应用程序的覆盖率达到100%,但是,可能会要求所有的“新”代码必须执行正确性和完整性测试。有一件事情很清楚:如果持有“我们的代码库太复杂,我们没有办法改善”这样的态度是无法提高软件质量的。

在我们向质量文化转型的时候,可能会受到来自开发工程师的阻力,他们认为这样做会有很多新“门槛”,耗费很多时间,而且会增加很多“额外的工作”。我们可以通过对工程师进行指导和培训来实现平稳转型。组织一群资深的团队成员来领导这场转型,以及通过供应商咨询人员帮助制定最佳做法,这两种做法成本比较低,也可以加快该转型的接受速度。当开发工程师看到他们能够更快地通过QA环节,并能够更快地为客户部署自己的软件时,他们才会对这一转型真正买账。

让团队看到切实的结果是非常重要的,所以在整个开发流程中的各个阶段发现并修复bug之后,发布度量标准将加强内部提高质量的觉悟。经过一段时间之后,在开发阶段找到的bug就会增多。如下面的示例所示,经过一段时间后,Bug的数量会越来越集中在“左”侧条形柱上。

图4:在产品交付前修复bug是交付高质量应用程序的最有效的方法


QA工程师发现的bug越少,开发工程师就有越多的时间研究新功能,QA工程师也会有更多的时间来进行深入测试——这样客户会遇到的bug就大大减少了。


执行自动化测试
要通过软件测试来提高应用程序的质量就必须保证测试的全面性。同时要求必须能够轻松、快速地完成软件测试,以保证所有的开发人员在任何时候都可以对各个版本的代码执行测试。

虽然每个企业都开发了软件构建系统,以便进行自动化的增量式应用程序构建。但是这些系统大多数都没有采用可重复使用的的增量式测试架构。通常都需要手动操作来定期执行测试,而不能够完全自动化地持续进行增量构建。

在很多团队里,所有开发工程师都采用他们自己的测试方法,而没有一个统一的组织平台来执行自动化测试。因而,从引进bug到发现bug中间要经过很长时间。中间的这段时间越长,就越难发现引发该bug的原因。理想情况下,每次在对软件做了修改之后,都将该修改可能影响到的测试执行一遍,然后再执行该修改。

所以,我们该怎样判断在代码发生了改变之后,需要执行哪些测试呢?基于变更的测试架构可以自动确定每次代码变更所影响到的测试子集,我们只需要执行这些测试就可以了。能够实现上述这一步的关键在于可以快速、自动化地实现以下步骤:
1.    确定代码更改所影响到的测试子集
2.    在代码发生修改之后执行这些测试
3.    报告执行失败的测试并更新代码覆盖率

采用这种方法只需要花几分钟就能完成编码和测试,而不需要花几天的时间。

图5:采用一个可持续的测试流程能够加快产品投放市场的速度并确保所交付的应用程序的质量


开发所需要的工具
如果我们想要创造质量文化,必须用到以下软件工具:

  • 静态分析工具:找出源代码中经常产生bug的代码模式
  • 动态测试工具:通过黑盒测试和白盒测试,保证应用程序的正确性
  • 覆盖率分析工具:评估所有测试活动的完整性
  • 自动化测试工具:让团队所有的成员都能够在代码发生改变时对其执行测试

商业优势
提高软件质量和测试的完整性是企业的两大主要目标,但是在如今这个竞争激烈的经济环境下,肯定要有充分的商业理由,企业才会做出改变。下面是几大显而易见的理由:

提高软件的可测性:
降低开发成本
     -- 可以让低成本的初级开发工程师来设计和执行测试
     -- 可以减少每次代码变更所影响到的测试量
降低生命周期成本
     -- 提高了软件的重复使用率
     -- 降低了维护成本

提高软件质量:

  • 集成时代码存在的bug减少了,因而缩短了集成所需的时间
  • 集成所需的时间缩短意味着产品的发布周期也缩短了
  •  客户遇到的bug减少了,提高了客户的满意度
  • 客户满意了就会提高客户对品牌的忠诚度,从而增加公司的收入

总结
开发高质量的软件是一项艰巨的任务。如果设计时就考虑到每个开发阶段的测试问题,将有助于团队加快应用程序的交付速度,并且能够确保产品的质量。测试工作进行得越早越有利于保证产品的质量。保持谦逊的态度也十分重要——实际上,虽然编码很重要,但是并没有开发人员想象的那么重要。最后,建立测试集中型的流程,并在好用的软件测试工具上进行投资能够帮助企业解决软件的质量问题。









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何开发高质量的软件 - 通过测试集中型的软件开发方法来提高软件质量 的相关文章

  • 【性能测试入门】:压力测试概念!

    压力测试可以验证软件应用程序的稳定性和可靠性 压力测试的目标是评估软件在极端负载条件下的鲁棒性和错误处理能力 并确保软件在紧急情况下不会崩溃 它甚至可以进行超出软件正常工作条件的测试 并评估软件在极端条件下的工作方式 在软件工程中 压力测试
  • JMeter 批量接口测试

    一 背景 最近在进行某中台的接口测试准备 发现接口数量非常多 有6 70个 而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值 想了几种方案后 决定尝试使用JMeter的csv读取来实现批量的接口测试 二 脚
  • Python接口自动化测试处理不同接口间参数依赖

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试/测试开发/全日制/测试管理丨Redis内存数据库

    Redis是一种开源 内存中的数据结构存储系统 它提供了高性能 灵活性和丰富的数据结构 以下是Redis内存数据库的基本介绍 键值存储 Redis基于键值对的存储模型 其中每个键都与一个特定的值相关联 这种简单的数据模型使其易于使用和理解
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • APP端网络测试与弱网模拟

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 步骤详图 教你在linux搭建容器环境

    警告 切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker 1 准备工作 系统要求 要安装Docker CE 社区版 操作系统的最低要求是CentOS7 7以下版本都不被支持 卸载旧版本 Docker改版
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐