在软件开发中,有许多量,比如开发人数、模块数、错误的数量等,这些量之间有的有一定的关系。这些关系中,有的是线性,有的是非线性的。有的在数值较小时近似为线性,当数值较大时,则表现为非线性。
这里举几个常见的非线性的例子。
![1ab4015993ae18d260fbb7966328b620.png](https://i-blog.csdnimg.cn/blog_migrate/7671a3fd3907732c77224c6967a07fde.jpeg)
复杂度-模块数量曲线
软件设计,其实就是管理复杂度。常用的方法是模块化。把复杂的软件划分为多个模块,每个模块完成独立的特定的功能,每个模块都比较简单,容易实现。将多个简单的模块连结在一起,形成复杂的软件。当模块较少时,模块的数量与软件的复杂度成线性关系。模块越多,软件复杂度越低。然而,随着模块的增加,模块和模块之间的连结的复杂度也增加。因此,模块太多时,软件复杂度反而会增加,不再是线性关系。
当软件规模较大时,需要多人才能完成。当人数增加时,每个人的工作量会便少,预计软件可以在更短的时间内完成。但是,当人数太多时,人员之间的交流变多了,人员各自的模块之间的交互也变多了,从而增加了工作量,完成软件需要的时间也会增加。人员和时间呈现出非线性的关系。
![deeb87c2bb01857a0f3f4dd73424fa8f.png](https://i-blog.csdnimg.cn/blog_migrate/10910449c1f4b6d3cdbe63a1516abe55.jpeg)
剩余错误数-时间曲线
当软件基本完成,开始进行检测错误和纠正错误。假设开始是错误列表上有十个错误需要修正。进行了三天后,修正了五个错误,于是,估计再有三天就全部修正完了。可是最终,可能再需要六天才完成。这是因为,在修正错误时,总是会先挑比较容易修正的错误,而把难的留在最后,于是,越到后面,错误越难修正,同样的错误数,花的时间也会更多。错误数和相应的修正时间呈现出一种非线性关系。如果一开始时就随机挑选列表中的错误,那么后面的时间估计就可能会更准确一点。
![7138b60c9db6e75a01959d9d417bcb07.png](https://i-blog.csdnimg.cn/blog_migrate/a798d7cfa99fab9a742d84e983733f30.jpeg)
绩效-压力曲线
在软件项目管理中,适当给项目成员适当增加压力,的确可以提高其工作绩效,使项目进展更快。但是,压力和工作绩效并不是线性关系,当加大压力,工作绩效不会无限提高。相反,压力增大到一定程度,工作绩效反而下降,即,出现崩溃的现象。
在软件项目中,当软件规模较小时,各量之间呈现出近似的线性关系,而当规模较大时,就会出现非线性关系。如果还是运用线性的思维,其效果就会出现偏差,有可能导致项目的失败。