影响软件开发效率的罪魁祸首
发布时间:2020-06-30

为什么随着时间的推移,系统开发难度越来越大、开发效率越来越低、bug却越来越容易出现?为什么系统刚重构完开发起来很顺畅,但过段时间又变得难以开发、效率降低,每隔一年就要进行一次大的重构?

相信大家都思考过这些问题,斯坦福大学的JOHN OUSTERHOUT教授给出了一个他的答案,复杂度是软件系统中很重要的一个因素,在开发过程中,复杂度会不断变高,如果不能进行有效控制,就会呈现指数型增长,导致开发效率越来越低,难度增大,同时bug越来越容易出现。

首先,我们来定义一下什么是软件系统的复杂度,所谓复杂度是指针对软件系统进行维护和拓展需要花费的成本大小。如果进行一个小的修改,需要耗费很大的成本,说明这个系统的复杂度高。如果只需要不大的成本就能完成新功能的开发或现有功能的完善,则说明这个系统的复杂度是可控的,比较低的。

接下来,我们讲一下复杂度在系统会有哪些表现:

牵一发而动全身,一个变动需要修改多处地方。这种一般发生在有重复代码的部分,比如某个属性的id为100,在多处用到的地方直接硬编码100,过了一段时间这个id换成了200,则需要修改多个地方才能实现变更。针对一个变动需要修改多个地方,很容易发生遗漏,显著提高了系统的复杂度。晦涩难懂,难以修改。导致修改难度大的原因会很多,命名不规范,接口定义不够通用,代码逻辑晦涩等都会导致修改难度变大。这些都会增加系统的复杂度。未知的问题,各种大坑。在使用新数据或第三方库的时候,通常会各种未知的坑让人防不胜防。有些接口会有一些反人类的设计,并且没有任何文档提示。比如某列表查询接口超过n(n=30,40或50)会自动截断,测试环境数据量少验证稳如 ,发布到生产环境第二天客户就来反映问题。这些按照常识难以预料的问题,会增加系统的复杂度,导致各种bug的产生。包括一些开源的项目也常常会有各种未知的问题,说不定哪天就来个坑,所以对于新的技术、第三方服务或者库都要充分验证,熟悉各种坑后才能大规模线上使用。大家可以看一下自己的项目,难以维护的项目是不是复杂度都很高呢?既然导致系统难以维护的原因找到了,那怎么能有效控制系统的复杂度呢?在接下来的几篇专栏中会进行详细介绍,敬请期待。

编辑  润扬网络策划服务有限公司