[关闭]
@Rays 2019-02-19T18:56:44.000000Z 字数 1959 阅读 1209

适合度函数:确保架构目标的达成

未分类


摘要: Paula Paul和Rosemary Wang撰写的一篇博文中介绍了适应度函数(fitness function)的基本概念、入门方法,并给出了如何验证各种架构质量的一些实例。文中提出,适合度函数驱动开发的方法可用于编写测定系统符合架构目标的测试,这类似于使用测试驱动开发(TDO)的方法验证功能是否符合所需的业务输出。

作者: Jan Stenberg

正文:

Paula PaulRosemary Wang撰写的一篇博文中介绍了适应度函数(fitness function)的基本概念、入门方法,并给出了如何验证各种架构质量的一些实例。文中提出,适合度函数驱动开发的方法可用于编写测定系统符合架构目标的测试,这类似于使用测试驱动开发(TDO)的方法验证功能是否符合所需的业务输出。

Paul和Wang均供职于Thoughtworks。文中强调指出,架构标准完全独立于功能需求,它是随着目标和限制条件的更改而持续演进的。作者们引用了《构建演进架构》(“Building Evolutionary Architecture”)一书中的说法:

从多个维度上看,演进架构的首要原则是支持受控的增量更改。

Paul和Wang认为,对于支持这样的架构演进,适合度函数有助于自动确定系统在多大程度上符合特定的架构目标和限制条件。举个例子,日志方法通常是事后诸葛亮,并缺少一些重要的信息。如果引入适合度函数功能,可确保日志具有良好的结构化,并包含足够的有用信息。

对于使用适合度函数的时机,作者们给出的建议是首先收集所有利益相关者的意见,了解在他们看来最为重要的架构功能。之后对这些功能分门别类为弹性、安全性、可操作性和稳定性等通用主题。分组中时常会暴露出一些相互冲突的目标。例如,稳定性和敏捷性这二者的目标通常是截然相反的。稳定性是通过建立对更改的控制而实现的,而敏捷性是通过减少实现更改的障碍而实现的。为了解决目标冲突的问题,必须对各项功能的动机加以评估,对组织最为重要的功能应优先处理。

在描述所有适合度函数的意图时,应使用对团队和利益相关者有意义的客观度量。度量有助于团队测定技术债务,同时也避免架构偏移。所有的适合度函数都应草拟在测试框架中,并添加到适当的交付流水线中。这样,所有新的软件都需要通过适合度函数的测试。Paul和Wang将此视为持续集成的一种自然延伸。

文中给出了一个针对代码质量的适合度函数示例。该例测定了可修改性、可管理性和适应性,以防止将质量过低的代码部署到生产环境中。

  1. describe "Code Quality" do
  2. it "has test coverage above 90%" do
  3. expect(quality.get_test_coverage()).to > .9
  4. end
  5. it "has maintainability rating of .1 or higher (B)" do
  6. expect(quality.get_maintainability_rating()).to < .1
  7. end
  8. end

文中还给出了一个针对性能的示例。Paul和Wang指出,由单独团队完成的常规做法会延迟交付时间,并且结果并非总会提供给开发人员。而将自动化性能测试实现为适合度函数并添加到构建流水线中的做法,可以尽早地运行测试,并且结果也可立即访问。

除了上述两个示例,作者们还在文中给出了针对弹性、可观测性、符合度、安全和可操作性的示例。

Paul和Wang最后强调,架构(例如业务功能)可通过适合度函数的方式表达在代码中。他们在文中提出,使用适合度函数具有三方面的优点:

一篇博文中,Ben Morris强调了使用适合度函数而非实际度量的重要性。在Morris看来,适合度函数为更具迭代性的架构提供了基础,并可引导持续演进的设计朝着理想的结果发展。

Vijini Mallawaarachchi介绍了适合度函数的一般需求,以及如何针对特定问题给出适合度函数。

Tim Sommer撰文指出,适合度函数可用于为各种架构特性添加约束条件,进而引导架构的演进方向。

查看英文原文: Fitness Functions to Ensure Architectural Goals Are Met

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注