也来谈谈软件复杂度

最近一直在做框架开发,很多软件设计理论也有了尝试的机会,渐渐的也有些自己的思考。我一直在想一个问题:之前我所学习到的软件设计方式,几乎都是最佳实践类型的指引:你该如何去做。比如:SOLID 原则 告诉了我们遵从这 5 个原则就可以设计出优秀的软件。

那么什么是差的软件呢?是主观上的 bad smell 吗?读完《A Philosophy of software design》之后,我觉的软件的好坏可以由两个维度的 复杂度(complexity) 来描述:

  • 机器维度:空间和时间复杂度,时间和空间复杂度代表了执行同样任务的资源消耗
  • 人类维度:软件复杂度,人去理解、维护软件需要消耗的资源(包括时间,沟通,试错等各种成本)

对于软件复杂度 John Ousterhout 给的定义是:Complexity is anything related to the structure of a software system that makes it hard to understand and modify the system. 学习过程中发现其他几篇博客也对软件复杂度有很精彩的观点:

在衡量软件复杂度的方面,Ousterhout 教授的定义方式是基于时间:

C=\sum_{p}{c_pt_p}

The overall complexity of a system (C) is determined by the complexity of each part p (cp) weighted by the fraction of time developers spend working on that part (tp).

这篇中还介绍了两种基于代码的衡量方式:cyclomatic complexiteyNPath, 我认为这两种在工程中有实践的意义。

复杂度是软件的固有属性之一,只有理解了什么是复杂度和衡量标准才能更好的处理软件中的复杂度。具体如何处理软件复杂度,Ousterhout 教授在他的书中有很多精彩的案例,强烈推荐阅读。

标签: none
返回文章列表 文章二维码
本页链接的二维码
打赏二维码