QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

  • 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:304130
用户头像

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

关注

评论

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

BFS/DFS/DP 算法案例 LeetCode题目:传递信息

OpenHacker

LeetCode 动态规划 深度优先搜索 算法解析 广度优先搜素

创建公司内部文档的入门指南

小炮

工作效率 企业管理 企业管理软件

【BBC learningenglish】with Tango

IT蜗壳-Tango

IT蜗壳教学 3月月更 Tango English

组件简介 - 大屏云极简使用手册

shulinwu

数据可视化 大屏可视化 智慧大屏可视化 大屏

阿里云智能编码插件,更Cosy的开发体验

阿里云云效

Java 阿里云 程序员 开发 研发

赋能金融领域,国密改造让安全合规更加牢固

电子信息发烧客

安全

活动预告 | DataOps + MLOps Meetup

第四范式开发者社区

人工智能 机器学习 开源 DevOps MLOps

星环科技ArgoDB 3.2正式发布,全面升级易用性、性能和安全

星环科技

数据库

Web 键盘输入法应用开发指南 (2) —— 键盘事件

天择

JavaScript 键盘 输入法 3月月更

实践GoF的23种设计模式:SOLID原则(上)

华为云开发者联盟

设计模式 GoF SOLID SOLID原则 分布式应用系统

墨天轮国产数据库沙龙 | 许力:阿里云原生Lindorm TSDB数据库,驱动工业IT&OT超融合数字化系统升级

墨天轮

数据库 阿里云 tsdb

易观分析对《关于银行业保险业数字化转型的指导意见》的解读

易观分析

银行 数字化

低代码平台设计探索,如何更好赋能开发者

雯雯写代码

低代码 开发平台 开发者,

【C语言】数据类型存储、原码,反码,补码

謓泽

C语言 补码 原码 反码 3月月更

一文带你看懂HarmonyOS应用上架

HarmonyOS开发者

HarmonyOS 应用开发

布局说明 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

教你如何使用flask实现ajax数据入库

华为云开发者联盟

Python 数据库 flask 文件上传 ajax数据

2021 “科创中国”开源创新榜单公布,优麒麟荣登两榜!

优麒麟

Linux 开源 开源社区 优麒麟

白话大数据 | 从买菜这件小事来聊聊数据仓库

星环科技

融合通信常见问题2月刊 | 云信小课堂

网易云信

音视频 融合通信

数据可视化大屏 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇

梦想橡皮擦

Python 3月月更

虎符研究院关于 Manta Network平行链解决方案的分享

区块链前沿News

虎符交易所 币圈后浪

HertzBeat赫兹跳动v1.0.beta.4 发布, 易用友好的高性能监控告警系统

TanCloud探云

开源 APM 监控 监控系统 监控告警

开讲了!龙蜥社区走进北大课堂

OpenAnolis小助手

开源 操作系统 龙蜥社区 北京大学 走进高校

Nebula Graph 的 KV 存储分离原理和性能测评

NebulaGraph

图数据库 分布式图数据库

【案例】基于星环科技数据云平台TDC为富国基金建设万能的数据湖

星环科技

数据库

应用数仓ODBC前,这些问题你需要先了解一下

华为云开发者联盟

数据库 GaussDB(DWS) 驱动 ODBC 驱动管理器

新思科技最新报告显示97%的应用存在漏洞

InfoQ_434670063458

新思科技 应用安全

ironSource 新功能发布,开发者可在同一会话中实时调整广告策略

极客天地

前端架构三大巨头之一Angular | 深度讲解

云智慧AIOps社区

开源 前端 Web angular 数据源

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