如何构建高质量软件:一个被忽略的课题 [译] | 宝玉的分享

标签: | 发表时间:2023-12-09 11:55 | 作者:
出处:https://baoyu.io

by Florian Bellmann

你是否曾在一个软件项目中发现缺少关键的质量保证(QA)措施?这种情况其实在很多公司和项目中都普遍存在。很多人虽然知道有质量保证这个环节,也明白我们应该去实施它,但所有的努力往往都集中在产品发布前的那一轮紧张的 QA 冲刺中。这种压力巨大的时刻,往往只能保证软件勉强能用。而且,这种混乱在下一次的发布周期中又会重演,而且毫无改善。

大学教给你的

谈到大学教育,如果你学习计算机科学,你会发现课程并没有教授如何确保软件的质量标准。大部分时间都在学习算法、计算机的工作原理、一些编程语言和概念的历史等等。至少在我的学习经历中,还包括了一个学期关于项目管理和敏捷开发的内容。这些知识固然重要,但却完全没有涉及 QA。这是非常遗憾的,因为超过 90% 的计算机专业学生毕业后都会在公司里工作,而在这些环境中,按时交付没有缺陷的软件是非常必要的。

公司如何勉强按时交付

我已经见过太多次了:在项目预算紧张的情况下,质量保证(QA)标准和措施往往是最先被牺牲的。这些措施通常被安排在项目的最后阶段,但如果开发耗时过长(这种情况很常见)或者出现需求膨胀(几乎总是会发生),那么就没有剩余的时间来进行 QA 了。结果,我们只能进行最基本的非结构化测试,然后上线一个结构脆弱的数字产品。

最大化

在一些公司或团队中,确实存在一些 QA 标准。这通常是由团队中的资深成员来强制执行。他们很可能已经深刻体会到,没有 QA 的话,后续的工作会变得极为困难。遗憾的是,即使存在这些标准,也并不足以确保质量。这些团队经常只是为了满足项目管理的指标而编写测试,而不是真正关注质量。

如何打破日复一日的工作循环

我花了好几年的时间积累经验和信心,才敢在项目中指出缺失的 QA(质量保证)措施。我与管理层争论、在产品发布的紧张时刻苦苦挣扎、处理生产系统的故障,还要四处寻找缺失的监控措施。这些经历并不愉快。对于代码库或项目的其他改进,比如重构,情况也差不多,因为这些对管理者来说并不直观。但对 QA 来说,挑战尤为巨大,因为如果我们从未实施过任何措施,我们也就无法学会正确的方法。

最大化

当你的单元测试通过了,但集成测试失败时的情景。

只有持续提出问题,反复引发讨论,我们才能找到跳出这个无尽循环的第一步。

讨论金钱的重要性

我后来意识到,我之前的论点并不够有效。向那些不直接参与代码工作的人解释软件“更稳定”或“维护更容易”这些观点,对他们来说太抽象了。我们需要谈论的是金钱。作为开发者,我们需要讨论不进行 QA 所带来的成本。这是商业和管理层更通用的语言。现在,我总是试图用类似这样的例子来说明 QA 措施的重要性:‘如果我们现在不这样做,4 个月后的开发工作(以及相关成本)将增加 15%。’或者‘我们需要为所有功能实现单元测试,否则我们的发布稳定化阶段会越来越长。这与我们构建的每个功能直接相关,因为我们需要每次手动测试所有的副作用。这将导致我们在每次发布时取得的进展越来越少。’

根据我的经验,这种观点的转变有助于更清晰地传达问题的核心。最终,你的努力将让每个人的生活变得更好,尽管目前还不是每个人都意识到这一点。

最小有效剂量

为了保持现实,重要的是不要在 QA(质量保证)措施上进行过度设计并投入过多的初期成本。我们不应该阻碍整个项目的进展,而且这种方法也不太可能获得所有利益相关方的支持。我建议始终专注于应用程序中最关键的部分。通常,会有某个特定用例、功能或其他核心内容,整个应用就是围绕它构建的。一些对于客户而言至关重要的核心功能必须正确运行。对这些功能进行测试。想出措施和方法,确保它们始终按预期运行。

我很喜欢“最小有效剂量”(MED)这个概念。它指的是能产生预期结果的最小剂量。在 QA 中,这可能意味着一个手动测试计划、流水线中的自动化测试,或者其他方式。这是一个好的起点。如果核心功能得到了保障,你可以逐步扩展到其他稳定性更高的领域。例如,对于所有新功能,都增加一个单元测试。此外,考虑一下那些你无法控制的信息来源,如外部 API 或用户输入。找到验证它们的方法,因为这些地方是软件由于误用而崩溃的潜在风险点。进行迭代和逐步改进,这也适用于 QA。

我关注的事项

每当我开始或加入一个新项目,我都会特别关注质量保证(QA)的概念。不论项目大小,我认为团队应该对此有深入的思考。

  • 我们准备发布什么产品?
  • 我们需要确保哪些功能能够正常运作?
  • 我们如何达成这个目标?
  • 我们有意放弃哪些措施,背后的原因是什么?

拥有一份关于这些内容的书面文件,以及一个测试计划,是软件发展的坚实基础。这表明我们作为一个团队已经考虑了前进的方向。再次强调,考虑到最小有效剂量的重要性。此外,我建议定期回顾所选择的方法,比如每季度进行一次。

在编写新代码时,我虽然不采用测试驱动开发(TDD),但我强烈推荐在 编写软件的同时编写测试。这是编写测试的最佳时机。如果你在实现功能的同时编写测试,你的代码就必须被结构化成可以实际测试的形式。事后为现有软件编写测试往往会发现代码过于互相依赖,或者违反了单一职责原则。通过测试,你可以证明你理解了期望的行为,并确保一切都按预期工作。如果愿意,这甚至可以被看作是一种代码文档。

项目的好处

Maximizing

当你积极发言时,周围的人会感受到你对项目的关心。提出有关质量的讨论并建议可能的解决方案,可以增强你作为开发者的影响力。这不仅对你个人有利,也有利于整个项目。它能够提升开发人员和管理人员的工作生活质量,并且这种改变是显而易见的。

只有实施了合适的 QA 措施,项目才能健康、稳定地成长。

让项目变得更好的方法

你的项目中已经开始实施 QA(质量保证)措施了吗,还是一切仍显得很脆弱?你是否渴望提升自己的开发技能,成为编写优质软件的佼佼者?

先从小事做起。思考一下你项目中的最小有效剂量(MED)。主动承担责任,成为你团队中推动积极变革的引领者。不是每个人都需要成为 QA 的倡导者,但你可以通过身体力行,教会团队成员必要的方法和技巧。激发团队内的讨论。

行动起来吧。

祝好,
Flo

相关 [质量 软件 宝玉] 推荐:

如何构建高质量软件:一个被忽略的课题 [译] | 宝玉的分享

- -
你是否曾在一个软件项目中发现缺少关键的质量保证(QA)措施. 这种情况其实在很多公司和项目中都普遍存在. 很多人虽然知道有质量保证这个环节,也明白我们应该去实施它,但所有的努力往往都集中在产品发布前的那一轮紧张的 QA 冲刺中. 这种压力巨大的时刻,往往只能保证软件勉强能用. 而且,这种混乱在下一次的发布周期中又会重演,而且毫无改善.

软件质量之道

- - CSDN博客系统运维推荐文章
        我曾与一些资历非常高但毫无实际经验的人共事过,也曾与一些只有很少或根本没有资历但才华横溢的工程师一起工作过,我也曾经不得已跟一些并不想用心做事、也对学习新东西丝毫不感兴趣的人共事过. 如果说我们这个职业是一张纸,那么这些人就好比纸上的污点. 软件开发业的低劣性不能完全怪罪于那些无知的经理、狡猾的市场营销人员以及总是急不可耐的用户,实际上很大程度上要归咎于这个行业的某些从业人员,他们应该去从事一些即使玩忽职守也不会造成像软件业里这样大的危害的行当,而不应该混迹于这个聚集着人类想象力的最复杂的创造性的行业.

提高软件质量实践―― Facebook 篇

- - 博客 - 伯乐在线
来源: Bill Liu 的博客. Facebook从04年的哈佛校园的学生项目在短短的7-8年的时间中快速增长为拥有10亿用户的世界上最大的社交网络,又一次见证了互联网创业成功的奇迹. 同时它的产品研发流程也成为了众多互联网产品公司的追逐对象. 今天我们来看一下facebook在产品质量控制方面的实践.

提高软件质量实践――Amazon篇

- - 博客 - 伯乐在线
来源: Bill Liu 的博客( @billliu_seattle). 前几天回国转了一圈,做了两家企业质量管理培训,一次上海测试沙龙,和chinatest两次演讲. 回来后发现我的软件质量实践系列文章距离上一次发表已经有很长一段时间了. 我想还是先把它写完,再写别的文章吧. 那么今天我们看看互联网公司的另外一个大哥大是如何做质量控制的――Amazon..

软件构架设计--质量属性

- - 研发管理 - ITeye博客
软件质量属性是影响软件架构设计的重要因素,常见的软件质量属性有:. 性能(Performance):指的是系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理事件的个数. 可用性(Avaliability):是系统能够正常运行的时间比例 . 可靠性(Reliability):可靠性是指软件系统在应用或错误面前,在意外或错误使用的情况下维护软件系统功能特性的基本能力.

如何开发高质量软件?及软件测试观点

- - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
也许是因为我经常在twitter上鼓吹“代码质量来自code review和单元测试”,老赵的这篇文字 http://blog.zhaojie.me/2012/01/a-case-requirement-to-practice-unit-testing-or-tdd.html 也at我一下,抱歉的是最近欠债太多,正在着手完成答应侯伯薇的那篇关于appengine的文字.

低质量软件编程成本价格表

- - ITeye资讯频道
注意:下面这个清单里描述的事情并不是你绝对不能做的,它只是用量化的方法来让你知道编程上的这些做法将会产生的负面代价. 这些费用是在代码审查时你将要付出的. 代码库中的程序编码风格一致虽然不是很重要,但值得你去遵守. 在提交代码的说明信息上偷懒. 请细读这篇 代码提交说明信息指导(英文). 大多数的局部变量都最好使用方法代替.

如何提高你的软件质量?去找一个旧电脑吧.

- 疯癫二楞子 - 译言-电脑/网络/数码科技
来源How to Improve the quality of your software: find an old computer.   你的用户将会很高兴因为你的东西在他们的烂机器上表现得很好(而那些潮用户也会很高兴.).   你的老板也会很高兴因为他收到了很少来自用户的抱怨.比如必修升级他们的硬件或者软件才能使用你的程序..

开源软件质量报告:连续两年高于行业平均值

- - 开源中国社区最新新闻
开发测试服务提供商Coverity近日发布了一份开源软件质量报告——《 2012 Coverity Scan Open Source Report》. 该项研究始于2006年,最初由Coverity公司和美国国土安全部合作进行, 旨在研究开源软件的完整性,现在由Coverity公司负责进行. Coverity的扫描报告已经成为了一个衡量开源软件质量状态的被广泛接受的标准,在过去的7年时间,Coverity已经分析了300多个开源项目的超过8.5亿行代码,这些项目包括Linux、PHP、Apache等.

Screen2EXE小巧的屏幕录制软件 保存为高压缩高质量EXE录制格式

- Richard - 爱软件