本文要点
- 不论软件产品应用的领域是什么,质量都是所有软件产品最为关键的方面
- 技术工艺(Craftsmanship)是交付高质量软件的关键
- 为软件质量建立一个业务用例是可能的
- 软件质量涉及到的不仅仅是如何编写代码,它与开发产品的过程密切相关
- 要知道产品质量是否合格,最简单的方法就是询问用户和利益相关者。
InfoQ 的定期撰稿人、培训师、教练、顾问和软件质量专家 Ben Linders 最近出版了一本新书,名为《What Drives Quality》。本书介绍了改进软件产品内部质量以及客户可见部分软件质量方面的技术和工具。
InfoQ 读者能够点击这里下载本书的样章,并且可以点击这里进行购买。
Linders 和 InfoQ 谈了谈他的新书。
InfoQ:您为什么写这本书呢?您想解决什么问题呢?
Ben Linders:《What Drives Quality》是一本实践类型的书,其中有许多技巧和想法能帮助你提高交付于用户的软件产品的质量。
在这本书中,我探讨了软件质量是如何在所有的软件开发活动中扮演重要角色的。在这本书中,我通过分析从客户请求到向用户交付产品的完整开发链,提供了一种精益的质量评估方法。
书中提供了一些实践和建议,以提高您交付给用户的产品的质量。这些实践和建议能够应用于瀑布模型或者迭代模型的项目中,例如 Prince-2 和 RUP,也能够应用于使用 Scrum、Kanban 或者 XP 的敏捷团队中,还可以应用于进行大规模敏捷软件开发的组织中,例如 Scaled Agile Framework (SAFe)、Large Scale Scrum(LeSS)、Disciplined Agile Delivery (DAD)、Nexus 或者 Agility Path。
这本书的前身是我的博客系列文章——What Drives Quality ,它基于我对软件工程研究所 (SEI) 的研究,以及基于我在大型组织中担任软件质量和软件过程经理时的工作经验。这本书的第一个版本是一个最小可行产品(Minimum Viable Product),用于试探人们是否真的对软件质量感兴趣。在这之后,我发现这本书的读者中有很大一部分觉得软件质量很重要。
软件质量对每一个软件都很重要。对于飞机、汽车或医疗设备中的软件来说,软件质量至关重要,因为它关乎人们的生命。金融软件中的软件错误可能非常昂贵(一些公司因为一个微小的软件错误而损失了数百万美元)。为了防止飞机被停飞,机场的飞行控制系统必须保证可靠。这样的例子数不胜数。
移动端软件同样也需要过硬的软件质量。我们正在进入一个移动世界,在这个世界里,许多人每天都在使用各种各样的应用程序。他们希望软件能够正常运行,并按照他们所期望的那样运行。如果你的软件不能满足用户的需求,他们就会卸载这个软件,这也就意味着你失去了一个客户。软件应该易于使用,响应快速和足够可靠,因此软件质量很重要。 在线商店也是如此。 如果订购产品花费太长时间,或者不断弹出错误消息,那么人们就会在另一家在线商店购买产品。
InfoQ:这本书的受众群体是哪些呢?
Linders:我将这本书的受众定位为软件开发人员和测试人员、架构师、产品所有者和经理、敏捷教练、Scrum 管理者、项目经理,以及那些认为软件质量很重要的高层经理。
话虽如此,我知道这是一个广泛的受众群体,每个人会有不同的需求。为了解决这个问题,我把这本书分成了两部分:软件质量因素模型和敏捷团队的高质量软件。
在软件质量因素模型部分,我着重描写了开发软件产品的技术活动以及支持软件开发的管理活动。每一节都深入地解释了驱动质量的因素,并针对该如何改进这些影响因素提供了相应的建议。例如,书中在需求、编码、测试、项目管理和高级管理等方面有一些章节,这些章节的内容提供了各种敏捷方法的对应的实践。读者可以决定只阅读适合自己角色的章节,或者阅读所有部分 (强烈推荐!),以获得关于软件质量的完整观点,并且通读全书还可以了解其他角色所应承担的责任。
敏捷团队的高质量软件这一部分包含了一些例子,其中展示了如何应用敏捷原则和敏捷实践来交付高质量的软件,其中还有我与团队以及经理一起工作的经历和案例研究,来帮助他们认识、面对和解决软件质量问题,并帮助他们持续以及持久地提高他们的业绩。
为了让大家能清楚的看到这是怎么一回事,这里有一些书中的例子:
- 技术是交付高质量软件的关键。开发人员和测试人员应该熟悉的一些技术包括:代码异味(code smell)、静态代码分析、重构、结对编程、代码审查和检验。
- 现代的领导方式使得敏捷团队能够实现自我组织。领导者,包括 Scrum 管理者,产品所有者和 CxO 们,都可以使用基于意图的的领导模式、无差异自治、重构组织以及全民政治的领导方法。
- 为软件质量构建一个业务用例是可能的。您可以使用已经发布的关于敏捷方法的数据,从而为敏捷转型筹集资金,使您的组织能够更高效地交付更好的产品。
- 研究软件质量问题并提出预防措施的一些主要技术源于对敏捷的回顾、根源分析和预先模拟(serious games)。这本书提供了一些特殊的技巧,可以应用于这些场景中,以提高软件质量。
InfoQ:软件质量是一个被广泛使用的词,并且经常被它的反例所定义。(“当我使用的时候,我知道什么样的产品是低质量的”),但是在软件产品中,软件质量的定义是什么呢?
Linders:软件产品或系统的质量主要取决于它如何满足用户、客户和利益相关者的需求,并如何为他们提供价值。这个对于质量的定义涉及到了有关旁观者:用户、客户和利益相关者,由他们决定软件产品或服务质量是否合格。
如果一个软件产品的质量不合格,用户就不会使用它。如果客户或利益相关者没有从产品中获得足够的价值,那么他们就不会购买它或支持它。满足所有的用户需求对于软件产品(或其他任何产品)来说都是至关重要的。
要了解质量是否合格,最简单的方法就是询问用户和利益相关者。敏捷团队使用产品评审或者产品示例来向用户进行演示;这是一个获得反馈的好机会,当然前提是你能以一种合适的方式进行推进。
只有开发团队认同软件质量是由用户、客户和利益相关者的需求来驱动的,他们才能交付高质量的产品。但是如何才能确保你能够开发出满足这些需求的产品呢?这时候对于软件质量的内部视图就能够帮助我们解决这个问题了。内部视图查看的是软件的架构和设计。它着眼于用于软件交付的过程和实践。它关注的是公司的文化、领导能力、目标和奖励系统,这些都能够驱动正确的行为。所有这些因素都能提高质量,但这取决于你的公司在做什么,以及公司的背景,对于不同的公司,其中一些因素可能比其他的更重要。
举例来说,书中提供的建议之一就是抛弃陈旧的软件代码。抛弃那些花费您大量时间和金钱来维护的软件模块,您应该删掉它们,以正确的方式重写那些软件模块的代码。您还可以使用抽样方法或静态代码分析来衡量软件质量,这样您就会知道哪些内容可以保留,哪些内容需要删掉。好吧,也许您不能简单地把整个模块扔掉;这样的话,重构可能是一种消除坏代码的解决方案,使用更好的代码替换它。我的建议是尽快处理不好的代码,不要在它上面浪费时间和金钱。
InfoQ:你谈论了各种各样的因素,这些因素对产品质量有很大影响,而不仅仅是开发人员的技术会对产品质量产生影响。这些因素都是什么呢?为什么它们会对产品质量产生影响呢?
Linders:当您从工程、管理和社会的角度来看待软件质量时,许多因素都会影响质量。基于我的研究和经验,我把他们分为技术活动和管理活动。
一些驱动产品质量的因素有:
- 团队用来与用户与利益相关者沟通的用户故事(user story)的质量。改进的建议包括投资、验收标准和对就绪(Ready)的定义。
- DevOps 实践。例如,自动化测试、持续集成和持续部署。这些实践可以帮助您建立一个开发流水线,使您能够顺利地进行产品交付和及时地处理客户反馈。
- 管理者可以普及一种软件质量文化。第一步是要认识到现有的架构和软件过程是如何阻碍软件质量的。书中提供的建议是消除壁垒和障碍,打破阻碍合作的壁垒,采用现代的领导方式,并给予专业人士空间以合理的方式来完成他们的工作。
端到端协作对于交付高质量产品至关重要。在软件开发的不同领域中,有许多优秀的书籍都涉及到软件质量。这些书中涉及如何定义客户需求、用户故事、软件工艺、质量保证(QA,Quality Assurance)、持续交付以及如何管理敏捷团队和组织。但直到现在,还没有一本书能把这些联系在一起。
在我的书中,我探讨了一个集成的端到端软件质量框架在不同领域中的各种实践。这本书使得在不同领域工作的专家们建立了对于软件质量的共同观点,并使他们有效地协同工作以交付高质量的产品。
InfoQ:书中有一章的名字叫做“质量是免费的”,构建更高质量的产品难道不是要花费的更多吗?
Linders:我们知道,构建产品只占投资的一小部分。更多的钱都花费在维护或增强软件上。在使用瀑布模型的时候,这是毋庸置疑的,对于敏捷来说亦是如此。软件的内在质量对软件整个生命周期的成本有着巨大的影响。从一开始就建立高质量产品比之后偿还技术债务要便宜得多。
1980 年的时候,Philip Crosby 写了一本书叫做《Quality is Free》。在这本书中,他解释说,花时间和精力在打造质量上乘的产品上,会节省金钱和时间,也会让你的产品比竞争对手的更便宜、更快。
敏捷团队知道软件质量有多重要。调试程序以及解决软件缺陷的代价十分高昂。使用良好的工程实践编写软件没有那么贵。而且从长远来看,它实际上更便宜。
钱总是被浪费在给团队施加压力、期望他们走捷径上。我的书为软件团队提供了“弹药”,用于说服他们的经理和其他利益相关者花费更多的时间和空间去关注软件质量,并以一种正确的方式完成他们的工作。得到了更好、更便宜、更快的软件,你还能再要求什么呢?
InfoQ:有哪些可以用于改进软件产品质量的方式呢?
Linders:高质量的软件是由人来构建的。为了改进现有产品的质量,相关人员需要提高额外的技能,包括技术能力和社交能力。将技术研讨会以及工作训练中的内容结合到实际工作中会有很好的效果。
这本书提供了许多有助于交付高质量产品的技巧。你不必把它们全都学会,就像是你被狼追的时候并不需要跑得比狼快,你需要做的只是比其他人跑得快就可以了。关键的是,你要知道在给定的情况下哪种技巧最有效,并且你需要比你的竞争对手更好地运用它们——那么他们将会被狼会杀死,而不是你。
为了找出哪种技巧适合你,我建议你应用解决问题的方法,例如根本原因分析、敏捷自我评估和敏捷回顾。每个 Scrum 管理者、技术主管和经理都应该学会如何做到这一点。
这本书在我的第一本书 《Getting Value out of Agile Retrospectives》中所描述的关于敏捷回顾练习的基础上,提供了新的练习。敏捷回顾的组织者应该知道这些练习,还要具备能力来帮助团队找出软件质量差的原因,并采取有效的行动。
关于作者
Ben Linders 是一位专注于敏捷、精益、质量和持续改进的独立咨询师,他定居于荷兰。他还是《Getting Value out of Agile Retrospectives》、《Waardevolle Agile Retrospectives》、《What Drives Quality》和《Continuous Improvement》等书籍的作者。同时,他还是敏捷自我评估游戏的发明者。作为一名顾问、教练和培训师,他帮助公司或组织落地高效软件开发和管理实践。他专注于持续改进、协作与交流以及职业发展,帮助客户交付业务价值。 Linders 在敏捷、精益和软件质量相关的社交媒体上非常活跃,经常发表演讲,也常常发表文章。他会在其双语(荷兰语和英语)博客上分享自己的经验,他还是 InfoQ 敏捷专题的编辑。你可以在 Twitter 上关注他: @BenLinders 。
评论