看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!
可持续软件让你更快地将更改交付给客户,降低出现错误的可能性,降低应用程序的总体拥有成本,并增加业务敏捷性。来自看板(Kanban)、Scrum 和 eXtreme Programming 的实践可以被用于开发可持续软件。通过使用源代码的自动分析、技术工件的专家评审以及与基准数据的比较,可以验证软件的可持续性。
软件改进小组(Software Improvement Group)的 CTO 和《Building Maintainable Software》一书的作者 Joost Visser 在 2018 年于比利时举办的敏捷联盟(Agile Consortium)大会上谈到了可持续软件的敏捷开发,介绍了 Ventouris 的案例。
InfoQ 采访了 Joost Visser 和 Cegeka 的敏捷软件工厂的主任 Johan Lybaert,以及 Cegeka 的 Ventouris 开发团队负责人 Tom Dufour,就用敏捷开发和验证可持续软件进行了对话。
InfoQ:请问,什么是“可持续软件(sustainable software)”?
Joost Visser:软件具有一种有趣的性质,当你修改它时,无论是修复错误,还是增加功能,代码的结构质量通常会随着每一次的更改而下降。特别是在有时间压力时,总是会存在这样的情况,然后开发人员被迫在结构质量上让步。
但是,匆匆忙忙改变软件会弄巧成拙。因为低质量的代码更难更改。这会导致一个恶性循环:匆匆忙忙的改变降低代码质量,从而进一步增加了时间压力。显然,这种进化软件的方法是不可持续的。
因此,对于软件来说,“可持续”实际上是“可进化”的意思。软件产品质量的 ISO 标准 25020 采用术语“可维护(maintainable)”来准确表达易于改变的质量特性。
Johan Lybaert:我认为,可持续软件是指开发人员仍然愿意在该应用程序代码上工作,而不会遇到旧框架、技术债务、缺乏自动化测试、重复代码、死代码、误导性评论和要做的事等等的挫折。
Tom Dufour:在我看来,它是一种可以很快就能理解和易于编辑的软件。
InfoQ:可持续性带来的好处是什么?
Lybaert:有个好处是应用程序的总体拥有成本持续地下降。如果软件正常的平均寿命是 7 到 10 年,因为可持续性,可以再延长 10 年,这对于应用程序的拥有者来说是确实是有益处的。
Visser:降低总体拥有成本的确是一个主要好处。但是,我们不能只盯着成本。可持续性也因为业务敏捷性的提供也得到回报。那些易于适应业务需求的软件可以成为一个充满竞争的市场中的一个重要区分因素。
Dufour:可持续性的一个好处是能够更快地把更改交付给客户,有更低的错误发生可能性。
InfoQ:请问,你如何把敏捷应用于可持续软件的开发?
Dufour:凭借 Ventouris,我们提供基于网络的软件解决方案给 9 个不同的比利时社会保障基金(Belgian Social Security Fund),用于自动化管理独立的专业人士和公司。虽然它已经平稳地运行了 10 年,但是总是有新的需求出现,常常是短期的法律变动,我们需要迅速适应。
为了支持这一点,我们从看板、Scrum 和极限编程(eXtreme Programming)那里借鉴了最佳实践来满足我们的需求。比如,我们主要关注持续交付(Continuous Delivery)、测试驱动开发(Test Driven Development)和结对编程(Pair Programming)。我们的目标是始终对我们的代码保持挑剔,和我们的结对伙伴或同事讨论适当的设计,以代码真正的需要及其原因为目标。
Lybaert:为了获得可持续软件,我们通过了一个 1000 人天持续改进预算,以确保该应用程序有更长的生命,至少是 8 年。这个预算驱动了跟最新的 Java 版本、Sprint、Hibernate 以及 Wildfly 更新保持一致。
测试的所有权跟团队(开发人员和分析师)中的每个人有关,而不是一个独立的测试团队。结果就是第一次编码要正确。
InfoQ:请问,你如何验证用于 Ventouris 的软件是可持续的?
Visser:因为 Ventours 是非常重要的系统,并且承诺它未来的开发是非常重要的决定,要求我们要对它的可持续性进行全面的考察。事实上,我们被要求回答了 23 个关于可维护性和安全性的非常详细的问题,还有它的未来证明。为了回答这些问题,我们遵循一个经过验证的验证流程,在这个过程中,我们把源代码的自动分析和技术工件的专家审查结合在一起,并与基准数据进行比较。
例如,对于 Ventours,我们发现其质量水平在我们的 5 星评级系统中大约是 3 颗星,对于用来比较的系统寿命和规模的平均值来说,明显要好很多。而且,我们确定了测试代码与生产代码之间的比例,比我们在行业中观察到的平均值的两倍还要多。
因此,通过源代码分析、安全检查、架构评审和成本估计,我们在所有相关的因素上对系统进行量化和判断,从安全漏洞到水平扩展性、对第三方和外部服务的依赖性,还有非常重要的以适应未来需求的灵活性。总的说来,考虑到所有详细问题的答案,我们能够得出结论,Ventrouris 是在未来 10 年时间里,具有未来发展前景。
Dufour:我们的目标是确保在某个领域做出改变的努力不会增加或变得更容易出错。这是通过我们所有开发人员持续评估的。只要加入新功能,我们在故事上执行一个结对模型,其中一个或多个开发人员会深入代码以确定复杂性、依赖性,… …实施之前,设计一个适当的解决方案。在这里,我们还评估了在实现附加功能之前重构某些区域是否更有效。
对重构的更大主题进行了评估和确定了优先顺序,被当作史诗和故事并与功能性故事一起呈现。
Lybaet:在 Cegeka 的敏捷软件工厂(Agile Software Factory),所有团队要每两周一次进行报告,以监测我们是否仍然在商定的预算和时间框架内正确地做对的事情。他们填写进度报告(Progress report),该报告具有 PMI 风格,内容包括客户、时间、预算、范围、依赖性和质量。软件工厂的管理层和客户们都可以查看该报告。我们重视项目所有活动状态的透明度、公开性。它包括对 sprint、商定的 SLA、缺陷等等的报告。
对应用程序的监控是从不同角度永久进行的。Ventouris 团队已经实施了一个持续构建和部署环境,在该环境中,每次检查新代码都会运行自动化测试。如果代码被破坏,信息辐射体就表明它必须以最高优先级固定。由于测试覆盖率超过 100%,该团队可以避免回归。Ventouris 团队把“New Relic”用作应用程序监测工具,对每个 SLA 的每个交易类型性能都进行跟踪。
在 Ventouris,我们使用为时两周的 sprints,在结束的时候,我们部署到验收环境(Acceptance environment)。我们的客户在该环境中验证了新功能,在 ACC 发布后的一周,我们发布到生产环境(Production environment)。
多年来,我们一直保持这种稳定的步伐。我们能够每两周发布这样大型的应用程序,没有任何回归,并且在同一周内,接收 9 个客户的事实,清楚地表明了我们的软件仍然是可持续的。
InfoQ:敏捷团队能做些什么来编写可持续代码?
Lybaert:在应用所有 XP 实践中要非常守纪律、避免技术债务、保持高测试覆盖面(>90%)。确保你和你的客户拥有良好和开放透明的关系,以允许团队在持续改进行动中正确地做对的事情。结对编程是个关键,以保持团队守纪律,正确地做对的事情(TDD、重新构建、DDD 等等)。
Dufour:讨论适当的设计和建立常识:对于大型史诗,我们有适当的启动来绘制高级设计,我们有定期的代码评审来审查部分代码,并分享最佳实践,我们有定期的教学来教育团队了解 Ventouris 的复杂功能背景、即将到来的法律变更等等。它是一个迭代过程,在这个过程中,你寻找良好的实践、尝试它们、评估它们、如果需要就修改一下,并保持该过程不断地重复。对于可持续代码的追求从未结束。
Visser:编写可持续代码事实上不需要任何魔法或高深的东西。非常重要的先决条件是纪律、常识、一套供团队分享并围绕与其的清晰的指导方针。这样的指导方针可以包括一些简单的事情,像不要写超过 15 行的方法、不要重复超过 6 行的代码和将自动测试覆盖率保持在 90%。而且,团队以外的利益相关者应该接受这样的事实:今天不损害结构质量对于保持将来多年的敏捷和快节奏的开发是至关重要的。
阅读英文原文: Sustainable Software with Agile
感谢冬雨对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论