讨论一下研发策略
原题:
某公司研发了一种机器,市场效果很好,用户也比较满意。这个公司又要
研发第二代产品。第二代产品是在第一代产品的基础上做了一些改进。例
如,综合放大器是这种机器的硬件模块。第二代产品的综合放大器保留了
第一代的部分功能,修改了另一部分功能。
综合放大器有个软件控制模块,叫做A。
在开始研发第二代产品的时候,有人提议将第一代综合放大器控制模块A分
成两个模块A1和B。其中B控制第一代第二代综合放大器中共同的部分功能。
再研发A2控制第二代综合放大器中修改了的部分功能。这样A1和B控制第一
代综合放大器,A2和B控制第二代综合放大器。理由是在研发第二代产品的
过程中,如果改正了B的错误,也同时改正了第一代产品的错误。
也有人持反对意见,如果这样做,耗费资源。如果改正了B的错误,既要在
第二代机器上测试,也要在第一代机器上测试。公司正在酝酿第三代产品,
第三代产品离第二代产品近离第一代产品远,划分模块很困难。还是A控制
第一代综合放大器,再做A2’(等同A2和B的功能)控制第二代综合放大器为
好。
双方都没有列出他们的全部理由。你作为一个研发策略决策人,你的观点
是什么?理由?
讨论:
其实这些策略都来源于历史上的Divide-Conquer思想。也就是问题很大或
很复杂的时候,把大的问题或复杂的问题划分成很多小问题或简单问题,再
一个个地解决这些小问题或简单问题。这样总问题就会得到解决。我们之所
以这么做是因为人们不善于在段时间内精确地处理大量的信息。Divide-
Conquer思想就解决了这个问题。在把大问题划分成小问题时,没有处理大量
的信息。在解决一个小问题时也没有处理大量的信息。这就要求每个小问题
相对独立,在我集中力量解决这个问题时,可以暂时不考虑和少考虑其他问题。
所以要把大问题划分成子问题时,要注意子问题的相对独立性。
今天的模块研发思想就是Divide-Conquer思想的延伸。在把大系统划分成小
模块时,没有处理大量的信息。在研发一个小模块时也没有处理大量的信息,
只专注于这模块的设计,对其他模块只了解接口信息就够了。模块的划分也要
求每个模块的相对独立性。也就是对系统的功能做小的改动时,只修改一个或
几个模块,而不是牵一发动全身。
现在看看放大器问题。第一代放大器控制模块是A。如果把A分成A1和B,让B控
制第一代第二代放大器中共同的部分功能,让A2和B控制第二代放大器,我们来
讨论一下利弊。如果B非常独立,问题不大。假设B就是一个积分算法。B在第二
代改得越正确,对第一代也越正确,几乎不需要在第一代上测试。可是如果B是
主要控制硬件的,那么第二代修改了B,不能保证对第一代是正确的,要在第一
代机器上测试。这就有点牵一发动全身的味道。
把A改成(A1,B),把A2改成(A2,B),类似代数中的提取共因式。如果共因式B
非常独立,可以。如果共因式B不很独立,提取共因式就违背了Divide-Conquer
思想。
|