发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

想要确保架构目标达成?适合度函数了解一下

  • 2019-02-21
  • 本文字数:1659 字

    阅读完需:约 5 分钟

想要确保架构目标达成?适合度函数了解一下

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


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


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


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


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


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


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


describe "Code Quality" do    it "has test coverage above 90%" do        expect(quality.get_test_coverage()).to > .9    end    it "has maintainability rating of .1 or higher (B)" do        expect(quality.get_maintainability_rating()).to < .1    endend

复制代码


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


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


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


  • 适应度函数客观地衡量了技术债务,并提高了代码的质量。一旦由于新的安全性或操作标准等原因而发生更改时,适应度函数还可提供实时反馈。

  • 适应度函数可提供编码选择的信息,包括与下游进程相关的接口、事件和 API 的选择。在应用“绞杀者模式”(strangler pattern)时,适应度函数可用于验证业务逻辑解耦过程是否满足要求。

  • 适应度函数支持以代码形式表达架构标准,从而有助于开发人员交付更加符合架构的功能。使用同一方式,用户可以请求更改功能,架构师可以请求更改某些架构问题,这些都可以在构建过程中加以验证。


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


Vijini Mallawaarachchi 介绍了适应度函数的一般需求(https://towardsdatascience.com/how-to-define-a-fitness-function-in-a-genetic-algorithm-be572b9ea3b4),以及如何针对特定问题给出适应度函数。


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


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


2019-02-21 07:303698
用户头像

发布了 391 篇内容, 共 126.0 次阅读, 收获喜欢 255 次。

关注

评论

发布
暂无评论
发现更多内容

手把手教你学Dapr - 7. Actors

MASA技术团队

C# .net 微软 微服务 dapr

使用轻量应用服务器部署Docsify在线文档平台

阿里云弹性计算

阿里云 轻量应用 征文投稿

PK体系“配齐”!亚信科技数据库与麒麟软件OS、飞腾CPU完成产品适配

亚信AntDB数据库

AntDB 亚信科技

详细图解Netty Reactor启动全流程

bin的技术小屋

微服务 网络编程 中间件 Java IO netty

项目动态|Apache Pulsar 2.7.4 版本发布

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

JavaScript 使用 Markdown 制作 PPT

devpoint

markdown 1月月更 slidev

『内存中的操作系统』内存虚拟化又是什么

soolaugust

操作系统 内存

手把手教你学Dapr - 9. 可观测性

MASA技术团队

C# .net 微软 微服务 dapr

阿里云弹性计算年度关键词:强劲、突破、开放

阿里云弹性计算

阿里云 弹性计算 计算巢 神龙架构 无影

C#8.0 可空引用类型

MASA技术团队

C# .net 微软 微服务 项目

SpringBoot:如何优雅地进行参数传递、响应数据封装、异常处理?

CRMEB

中国AIOps们,你们究竟是在骗谁?

Geek_f56666

云计算 AIOPS 云服务

中国AIOps们,你们究竟是在骗谁?

Geek_2749b8

云计算 AIOPS 云服务

从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践

字节跳动数据平台

数据库 字节跳动 Clickhouse 实时数据分析 bytehouse

【渗透技术】一个渗透测试工具人是怎样操作的

H

网络安全 渗透测试

手把手教你学Dapr - 8. 绑定

MASA技术团队

C# .net 微软 微服务 dapr

普通开发者,如何成为Apache项目的commiter ?| 人物专访

云智慧AIOps社区

开源 程序员 算法 运维 时序数据

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

MASA技术团队

C# .net 微软 微服务 dapr

Blazor是春天还是寒风里的挣扎

MASA技术团队

C# .net 微软 微服务 blazor

盘点 2021 征文大赛获奖名单公布!

InfoQ写作社区官方

盘点2021 热门活动

手把手教你学Dapr - 5. 状态管理

MASA技术团队

C# .net 微软 微服务 dapr

详解 HDFS 底层交互原理

五分钟学大数据

hdfs 1月月更

全国社保基金理事会副理事长陈文辉一行莅临青藤调研

青藤云安全

技术分享| 探索视频感知编码

anyRTC开发者

音视频 WebRTC 视频编码 视频压缩 视频感知编码

MS Office 冷门却实用的技巧及软件安装包分享(文末有福利)

淋雨

Office office365

淘宝小部件 Canvas 渲染流程与原理全解析

阿里巴巴终端技术

小程序 淘宝 渲染

手把手教你学Dapr - 6. 发布订阅

MASA技术团队

C# .net 微软 微服务 dapr

如何定位并修复 HttpCore5 中的 HTTP2 流量控制问题

阿里巴巴云原生

阿里云 云原生 性能测试 PTS

中国AIOps们,你们究竟是在骗谁?

观测观测

AIOPS

深入解析 Apache Pulsar 系列(一):客户端消息确认

Apache Pulsar

开源 架构 云原生 Apache Pulsar 消息中间件

如何提高你的写作技巧

坚果

1月月更

想要确保架构目标达成?适合度函数了解一下_架构_Jan Stenberg_InfoQ精选文章