一个简单的修改需要在多处更新

简单修改涉及多处更改也是常见的软件维护复杂度因素,而且主要影响的是我们的认知负荷:维护修改代码时需要花费大量的精力确保各处需要修改的地方都被照顾到了。

最简单的情形是代码当中有重复的“常数”,为了修改这个常数,我们需要多处修改代码。程序员也知道如何解决这一问题,例如通过定义个 constant 并处处引用避免 magic number。再例如网页的风格/色彩,每个页面相同配置都重复设置同样的色彩和风格是一种模式,而采用 css 模版则是更加易于维护的架构。这在架构原则中对应了数据归一化原则(Data normalization)。

稍微复杂一些的是类似的逻辑/或者功能被 copy-paste 多次,原因往往是不同的地方需要稍微不同的使用方式,而过去的维护者没有及时 refactor 代码提取公共逻辑(这样做往往需要更多的时间精力),而是省时间情况下选择了 copy-paste。这就是常说的 Don't repeat yourself 原则。

没有给命名足够的重视

软件中的 API、方法、变量的命名,对于理解代码的逻辑、范围非常重要,也是设计者清晰传达意图的关键。然而,在很多的项目里我们没有给命名足够的重视。

我们的代码一般会和一些项目关联,但是需要注意的是项目是抽象的,而代码是具体的。项目或者产品可以随意一些命名,如PhotoShop可以说PS,这些都没有问题。而代码中的 API、变量、方法不能这样命名。

不知道一个简单特性需要在哪些做修改,即 unknown unknowns

代码缺乏充分的测试覆盖,一些重要场景依赖维护者手工测试;代码有隐藏 / 不易被发现的行为或者边界条件,与文档和接口描述并不符合。

对于维护者来说,改动这样的代码(或者是改动影响到了这样代码 / 被这样代码影响到了)时,如果按照接口描述或者文档进行,没发现隐藏行为,同时代码又缺乏足够测试覆盖,那么就存在未知的风险 unknown unknowns。这时出现问题是很难避免的。最好的方式还是要尽量避免我们的系统质量劣化到这个程度。

上线时,我们最大的噩梦就是 unknown unknowns:这类风险,我们无法预知在哪里或者是否有问题,只能在软件上线后遇到问题才有可能发现。其他的问题 尚可通过努力来解决(认知成本),而 unknown unknowns 可以说已经超出了认知成本的范围。我们最希望避免的也是 unknown unknowns。

软件维护复杂度的因素相关推荐

  1. 影响直播流畅度的因素有哪些?

    造成直播卡顿的原因主要有设备.视频流.网络这三个方面的原因. 一.设备方面问题: 高清视频往往会给硬件带来解码压力,尤其是在高清视频的情况下,这一点造成的卡顿尤为明显.同时如果PC端Flash Pla ...

  2. 影响员工敬业度的三大因素

    敬业的员工通常业绩比较突出,对企业做的贡献很大.经理人当然希望自己的员工个个都是敬业的员工,但实际上,在中国只有8%的员工具有敬业精神,相比全球的平均水平14%还有很大的差距. 是什么因素造成员工不敬 ...

  3. 阿里研究员谷朴:警惕软件复杂度困局

    作者 | 张瓅玶(谷朴)  阿里巴巴研究员 **导读:**对于大型的软件系统如互联网分布式应用或企业级软件,为何我们常常会陷入复杂度陷阱?如何识别复杂度增长的因素?在代码开发以及演进的过程中需要遵循哪 ...

  4. 阿里研究员:警惕软件复杂度困局

    简介:对于大型的软件系统如互联网分布式应用或企业级软件,为何我们常常会陷入复杂度陷阱?如何识别复杂度增长的因素?在代码开发以及演进的过程中需要遵循哪些原则?本文将分享阿里研究员谷朴关于软件复杂度的思考 ...

  5. 如何衡量软件系统的复杂度(二)

    一.背景 上一篇重点讲述了软件复杂度的由来和现象,以及不同视角下的复杂度是怎么呈现的,本篇文章将从更细致的方面来阐述形成复杂度的一些指标数据,并按不同维度进行区分. 这么做的一个原因就是希望通过本篇文 ...

  6. 【转】阿里研究员:警惕软件复杂度困局

    阿里研究员:警惕软件复杂度困局 原创 谷朴 阿里技术 8月24日 阿里妹导读:对于大型的软件系统如互联网分布式应用或企业级软件,为何我们常常会陷入复杂度陷阱?如何识别复杂度增长的因素?在代码开发以及演 ...

  7. 《敏捷敬业度》作者访谈

    本文要点 \ <敏捷敬业度>提供了一个框架,任何商业领导可以在自己的组织中用它来改进敬业度.\ 如今,美国超过70%的职工是空闲的,导致负面商业影响和较低的盈利率.\ 员工敬业度是&quo ...

  8. 影响计算机质量度的指标,[计算机]专业版的质量度权重分析.ppt

    (一)什么是质量度? 质量度是搜索推广中的评价关键词质量的综合性指标,在账户中以三星等级的方式呈现. 质量度越高,意味着推广的质量越优秀,同等条件下赢得潜在客户(网民)的关注不认可的能力越强.,质量度 ...

  9. 安卓手机测评_鲁大师又在找事?一季度安卓系统流畅度排名出炉,小米MIUI吊车尾...

    随着2020年的第一个季度过去,各行各业都迎来了一段总结,手机行业也不例外.近日,国内知名手机评测软件鲁大师就公布了2020年第一季度安卓系统的流畅度排行榜,选取前十进行公示. 根据这份榜单,可以很明 ...

最新文章

  1. iptables详细说明
  2. 图形处理(四)基于梯度场的网格编辑-Siggraph 2004
  3. boost之内存池使用实例
  4. 力扣算法001_两数之和
  5. Lyft Level 5 Challenge 2018 - Elimination Round翻车记
  6. 迁移 Docker 到其它磁盘目录
  7. getParameter
  8. linux 彻底定制指南,8.3. Linux-2.6.11.12 《Linux 彻底定制指南》[翻译:金步国]...
  9. ABP领域层——工作单元
  10. (转)在Winform程序中设置管理员权限及为用户组添加写入权限
  11. 连接好友服务器失败 无法显示,不显示好友的网络状态
  12. GPU大百科全书 第二章 凝固生命的光栅化
  13. 如何在Mac上的Safari中启用或禁用自动更正?
  14. Dw cs6的详细下载安装教程对网页设计需要cs6的同学
  15. 老男孩python作业题_老男孩python学习第一天作业
  16. buu [QCTF2018]Xman-RSA
  17. 很多时候,你不得不被生活的种种琐事所牵绊
  18. (80)FPGA减法器设计(全减法器)
  19. 转《论兔子怎么打败狼》
  20. 今日头条是如何做推广和运营的?

热门文章

  1. 链表反转的两种实现方法,后一种击败了100%的用户
  2. 那些在一家公司呆了 10 年的程序员,最后都怎么了?
  3. 华为否认启动“塔山计划”;中金:苹果中国区下架微信概率较小;Linux Lab发布v0.5 rc3| 极客头条...
  4. 支付宝AI大幅提升细粒度图像分类识别精度,一眼看穿万物细微差异
  5. 完了!Python开挂! 90%的程序员:痛快!你怎么看? ​
  6. 春眠不觉晓,SQL 知多少?| 原力计划
  7. 如何判断一家公司靠不靠谱?
  8. 知乎热议!学完 Python 之后,我的编程能力竟然退化了!
  9. 腾讯云刘颖:与微信共建小程序开发者生态,让小程序开发更简单
  10. 如何用 Python 给女友准备甜蜜的七夕礼物?