软件开发的复杂性与效能提升

一、问题

每当我们被安排维护或者升级一个已有的软件时,恰当地理解原有的系统成为关键。毫无疑问,我们没有足够的时间完全理解它,但是我们一定要找到那个见鬼的合适地方以加入我们的修改。那么是什么阻碍了我们快速理解一个软件呢?

二、软件的复杂性

复杂性就是任何使得软件难于理解和修改的因素,而复杂性是由两个因素引起的:模糊性与依赖性。模糊性产生了最直接的复杂度,让我们很难读懂代码真正想表达的含义,无法读懂这些代码,也就意味着我们更难去改变它;而依赖性又导致了复杂性不断传递,不断外溢的复杂性最终导致系统的无限腐化,一旦代码变成意大利面条,几乎不可能修复,成本将成指数倍增长

三、复杂的症状

3.1 变化的放大

一个看似简单的变化却需要在不同的地方修改。比如给某个网站内的子页面颜色修改成风格一致。

3.2 认知负荷

开发人员需要多少知识才能完成一项任务,比如一个专长于系统开发的资深工程师对于一个游戏引擎也是一筹莫展。

3.3 未知的未知数

不清楚必须修改哪些代码才能完成任务,开发人员必须获得哪些信息才能成功地执行任务。

四、解决之道

1、编写合适的软件文档,在系统的早期就尽可能的降低问题复杂度,使系统逐渐明朗。

2、在每次迭代中,尽量设计通用性的接口,花一定的时间修改或调整系统设计,让后期迭代更加顺畅。

3、模块设计与系统分层,合理使用设计模式。

3、各开发人员都要保持统一的风格,包括变量命名,注释,接口设计。

参考:

造成软件复杂性的原因_导致软件复杂性的主要原因有哪些?_旭波的博客-CSDN博客

百度安全验证

A Philosophy of Software Design 软件设计哲学 - 知乎