我知道这是一个古老的问题,如果3个人阅读此答案,我会很幸运,但这是一个有趣的故事,所以到底是什么。
我进入了一个项目(嵌入式系统,对安全性至关重要的固件,风险很高),我对发现的结果感到震惊。人们错误地使用C(尤其是指针),没有静态分析,没有代码审查,没有进行测试,只是“将其集成,运行,使用它,看看会发生什么”。
我在那里的第一周写了一封很长的电子邮件(作为顾问)。之所以如此,是因为我基本上是在说管理不善,开发人员无所适从,没有遵循任何流程等。它应该交给公司副总裁,但是我却把它交给了聘用的开发经理我。他对此并不完全防御,事实上,他承认了许多缺点,并告诉我我不是第一个指出这些缺点的人(不要开玩笑,对吗?)
为了回答原始问题的症结所在:我愿意花1个星期的人工时间,在平台上配置并运行Gimpel的Lint(PC-Lint / Flexelint)静态分析工具,并对发现的所有内容进行完整报告。我告诉他们,我绝对可以确定我们会因此发现一些潜伏的“定时炸弹”。
他们计算了我的小时费率,再乘以40,然后确定“这样做太贵了”。长话短说,我在60天内离开了那里。大约3年后,我得知产品召回,成本接近9个数字(1亿美元),更不用说损害公司声誉了。
我不会提及公司,产品或行业,但是我仍然与那里的一位工程师保持联系,当他向我解释是什么原因导致召回时,我的视线一直在滚动-这将是一个问题甚至被基本的静态分析工具所捕获(无法访问数组)。公平地说,我不能确定地说问题出在我在那里的时候,但是我敢肯定,如果他们把钱花在某种静态分析工具上,那么这个错误就不会幸免。
因此,他们通过不购买PC-Lint节省了295美元(好吧,他们最多也节省了一周的付款时间)-但我的能力不足以使我每周支付1亿美元。
这就是我所说的非常可观的金钱浪费。
让我想起了一个很多人可能已经听过的笑话:
有没有听说过大型船舶发动机发生故障的故事?该船的船东接连地尝试了一位专家,但他们只知道如何修理发动机。然后他们引进了一位自小就一直在修船的老人。他随身携带了一大袋工具,到达时便立即上班。他从上到下非常仔细地检查了引擎。
船的两个主人在那里,看着这个人,希望他知道该怎么做。看完东西后,老人伸进他的包里,掏出一把小锤子。他轻轻地拍了一下。瞬间,引擎陷入了生命。他小心地把锤子移开。引擎是固定的!一周后,房主从老人那里收到了一张10,000美元的账单。
“什么?!” 业主惊呼。“他几乎什么也没做!”
因此,他们给老人写了一封便条,说:“请寄给我们逐项帐单。”
该男子发出了一条账单,上面写着:
Tapping with a hammer ........ $ 2.00
Knowing where to tap ......... $ 9998.00
努力固然重要,但是知道自己在做什么会有所不同。