现代软件工程基本原理:持续学习与管理复杂性

工程学科坚定地立足于科学理性主义,并采用务实的、经验主义的方法来取得进步。

大多数用于软件开发的度量标准,要么是无关紧要的,要么是有害的,如代码行数或测试覆盖率。

马丁福勒认为生产力不可度量。妮科尔福斯格伦、耶斯亨布尔、吉恩金找到高效能团队的两个度量标准:稳定性和吞吐量。

高效能团队有共同的行为,如果我们观察一个团队的活动和行为,我们就可以预测他们在这两个度量标准上的得分。如果你的团队采用自动化测试、主干开发、自动化部署以及大约十个其他实践,那么加速的模型将预测你们在实施持续交付。如果你们实施持续交付,那么你们在软件交付能力和组织表现方面是高效能的。

稳定性分解为变更失败率和服务恢复时间。吞吐量分解为变更前置时间和部署频率。

速度和质量是相关的,提高速度的途径是构建高质量的软件,提高软件质量的途径是提高反馈的速度,而提高两者的途径是伟大的软件工程。

加速的度量为我们提供了一个有用的标尺。可以借助以上度量标准改善我们的过程、组织、文化、技术。拥有有意义的度量标准,我们能够评估行动,对于采用更加基于证据的决策方法是重要的。

我们的学科应专注两个核心能力。我们应该成为学习专家,专注于掌握探索、发现和学习的技能,这是科学推理式的实际应用。我们还需要专注于提高管理复杂性的技能,我们要成为管理复杂性的专家,不论是在技术还是组织层面。

成为学习专家,我们需要采用并精通实用的、有科学依据的方法来解决问题,这是工程学科的精髓。我么解决问题的方法必须适用我们的问题。解决软件问题的方法,需要是实用的、轻量级的和普遍的。

有五个相互关联的原则:

-迭代式工作。

-运用快速、高质量的反馈。

-增量式工作。

-实验性。

-经验主义。

学习是我们所做的一切事情的核心,这些原则是所有有效的软件开发方法的基础。瀑布式开发没有展示这些特性。

软件开发的失败,可以从两个信息科学概念并发和耦合的角度来思考。

如果想要构建比玩具编程习题更复杂的系统,需要认真对待这两个概念。我们既需要管理组织信息系统的复杂性,也需要管理软信息系统的复杂性。

对这两个概念关注太少,会产生以下结果:大泥球系统、失控的技术债、严重缺陷数、害怕对自己拥有的系统进行更改。这些都是团队对他们正在开发的系统的复杂性失去控制的表现。

如果你想构建复杂的东西,你必须将问题分解,以便你可以分别考虑它的各个部分,而不会被复杂性压倒。在哪里划线取决于很多变量:你需要解决的问题的性质、你使用的技术在某种程度上甚至是你有多聪明。如果你想要解决更难的问题,你必须划这些线。

管理复杂性也有五个原则:

-模块化。

-内聚力。

-关注点分离。

-信息隐藏和抽象。

-耦合。

促进我们学习和让我们能够处理我们创造的系统复杂性的思想,才是我们行业真正的工具。这些思想能帮我们更好地选择语言、使用工具和应用框架,以这样的方式帮助我们更有效地解决软件问题。

如果想要根据证据和数据做决策,而不是根据潮流或猜测做决策,那么拥有一个度量的标尺,让我们能够评估这些思想。我们需要思考,用稳定性度量标准来度量,是否会提高构建软件的质量,用吞吐量度量标准来度量,是否能提高构建高质量软件的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值