自然、人类、机器
Home › Forums › 《冒号课堂》讨论区 › 需求与设计的关系
Tagged: abstraction, design
最近在学习TDD的过程中,我对需求与设计的关系进行了一些思考,我发现:系统A的需求决定了A的外部特征,这是系统A不变的部分;系统A的设计是如何将A划分为有关联的若干子系统a1,a2…an,这就是系统A的可变部分;系统A的设计又转化为对其子系统a1,a2,…an的需求。如果把视野扩宽,系统A的需求也必然产生于更大的系统中的设计。所以,软件需求是来源于更高层次的设计的。对于软件来说产品设计处于最高层,产品设计来源于对用户需求的理解(可能并不明确,需要自己探索)。
关于软件开发的过程(暂不考虑软件测试和维护)一般的说法(以waterfall模型为代表)是:分析用户需求 => 提炼出合乎需求的规范 => 根据规范进行设计 => 编写代码实现设计。这种描述过于粗线条了,实际的开发过程往往是上层需求产生下层设计,在实现该设计的过程中又产生更下层的需求…正是你上面所描述的情形。不出意外地,在这里我们又看问题的关键仍然是:如何将复杂的问题合理地进行抽象分层。
SICP上提到:与任何复杂系统一样,分层(Hierarchy)是一种应对软件复杂性的组织方式。