uyhyygyug1234
2019-03-16 10:31:45 +08:00
那你是没看过丰田的
软件设计的基本要求是模块尽量简单化,因为这样可以一来更易于阅读二来更易于维护。但丰田的工程师显然没有遵循这原则。Barr 使用一种工具自动根据代码的可能分支数量评估函数的复杂度,结果是丰田的软件中至少有 67 条函数复杂度超过 50,意味着运行这个函数可能出现超过 50 种不同的执行结果,属于“非可测”级别。因为为了测试这 50 个不同的结果,必须准备至少 50 条不同的测试用例以及相应的文档,在生产环境中一般是不现实的。作为比较,Barr 表示他自己的公司严格执行的其中一条规定就是任何代码复杂度不能超过 30,否则不合格。而在这 67 条函数中还有 12 条复杂度超过 100,达到“非可维护”级别,意味着一旦发现缺陷( Bug )也无法修复,因为实在太复杂,修复缺陷的过程中会产生新的缺陷。其中最复杂的一条函数有超过 1300 行代码,146 个可能执行路径——正好用于根据各传感器数值计算节气门开关角度
还有一些别的匪夷所思的发现。比如丰田的软件包含了超过一万一千个全局变量。如果你不知道什么是全局变量,那么只需要知道软件设计的一般原则是要尽量少使用全局变量,因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”,绝对不会是一万一千个。