关于银弹,如果我们能够找到那确实是太好太好啦,从此我们软件开发之路就真正踏上了Royal Road。可惜根据Brooks的想法,他认为银弹是不可能存在的,那么也就意味着我们不存在一种利器去射杀软件开发过程中的人狼啦。
很显然,既然没有银弹去消灭怪兽,那我们也就没有办法去主动进攻,但是我们可以退而求其次,在怪兽还没有爬出洞穴之前,来找到一些行之有效的方式去抵御在软件开发过程中可能出现的意外,防患于未然。这就是主动防御。理想的情况是没有怪兽,也就不需用银弹射杀。不战而降,这才是上上之策啊。当然这也过于理想,所以还是让我们想想有什么好方法,能够积极防御比较好。
首先,我们要明白软件开发过程中的风险在哪里?这些风险可能时间进度、需求变更、设计失误等等。每一种都可能是导致软件开发失败的致命伤害。
既然不能主动进攻,那我们也就只能在软件开发过程中积极防御。在真正开始项目之前,归列任何风险并找出其应对措施。虽然在开发过程中,有很多未知因素不可能在项目开始之前就能预见。但是,普遍存在的问题确实可以在开发之前想出相应的对策的。
举例而言,对于进度安排,领导同志不应该高高在上的安排时间精度,而应该责任到人,将任务细分到个人,由具体承担人构想其所需时间,然后反馈到上级,做出统一的时间进度安排。为抵御不可知的因素,还有必要在各个阶段安排必要的缓冲时间。这里就提出两条措施去抵御时间风险。
对于软件质量风险,例如软件设计失误,只有通过测试来说明你编写的代码倒是质量如何,是否满足需求。套用老话“实践是检验真理的唯一标准”,可以说测试是检验软件质量的唯一标准。所以,为了规避风险,应该做到及早测试,重要关键的Item因该优先设计、优先测试。这大概也就是为什么对需求也要列出优先级的原因所在吧。
时间风险、质量风险是任何软件开发过程中不可回避的问题。在任何软件开发过程中,这两个怪兽一定会来的,所以请提前做好准备。
附:
将人放在软件开发过程中考察,人在此环境下的属性可以,分列为专业属性、附加属性。专业属性是与工作内容密切相关,做图像处理的与做网络协议的显然专业属性大不相同。附加属性是为完成工作内容所必须具备的技能,例如熟悉编程语言、利用开发环境等。