软件分析 Vs. 架构设计
2008-02-05 07:35
519 查看
何谓软件分析(analyse)?它有没有一个成文的定义?如果你曾读过软件教科书或是著作,就会发现有多少个作者,就有多少种分析的定义。具有讽刺意味的是,我们知道软件分析是必不可缺的,但却没有其真正的定义。
一个用来区分软件分析与设计(design)的普遍方法是认为分析指“做什么” ,而设计指“怎么做”。乍听起来很有信服力,很显然,如果能在一开始就知道想要系统“做什么”,那至于系统应该“怎么做”就会更容易。实际上,过去在尝试区分“做什么”与“怎么做”上花费了大量的人力。在一间会议室里,与会人员都在不停的争论着到底他们现在做的是分析还是设计。像上述情形其实屡见不鲜。
这样的争论比比皆是的原因是,对于这样一个特定的情形来说,每一个“做什么”也是“怎么做”,而每一个“怎么做”也是“做什么”。讨论是不会有结果的,那是因为其实双方都是对的。如果用“做什么”和“怎么做”来定义分析和设计的话,那么任何一个分析的概念也是设计的概念,反之亦然。
下面来示范一下任何一个“做什么”也是“怎么做”与反之的情况,仔细考虑一下我现在所做的。
我现在在做什么呢?我在写一篇blog。
我现在在怎么做呢?我在笔记本上打字;
我现在在做什么呢?我在笔记本上打字。
我现在在怎么做呢?我在移动手指去敲击键盘,随之,这些所敲击的字母就组成了单词;
我现在在做什么呢?我在移动手指去敲击键盘,随之,这些所敲击的字母就组成了单词。
我现在在怎么做呢?我大脑中的感知部分正把一些单词组织在一起,接着指导大脑的行动部分就发送信号到了肌肉,然后就控制了手指。
我可以一直这样做下去。实际上,我可以一直做下去的意思是,“做什么”和“怎么做”是相辅相成的,它们共同引导着朝向细节的递归过程。任何一个“怎么做”都是下一个阶段递归里的“做什么”;任何一个“做什么”都是上一个阶段中的“怎么做”。递归的阶段数目非常巨大,甚至可能是无穷大。这就意味着,“做什么”与“怎么做”的区别仅仅相差一个无穷小,所以实质上是相同的。
所以,对于所有的实际情况来说,如果我们视分析为“做什么”而设计为“怎么做”的话,它们就是互不分离的同等过程。所有的分析都是设计,所有的设计也都是分析。
一个用来区分软件分析与设计(design)的普遍方法是认为分析指“做什么” ,而设计指“怎么做”。乍听起来很有信服力,很显然,如果能在一开始就知道想要系统“做什么”,那至于系统应该“怎么做”就会更容易。实际上,过去在尝试区分“做什么”与“怎么做”上花费了大量的人力。在一间会议室里,与会人员都在不停的争论着到底他们现在做的是分析还是设计。像上述情形其实屡见不鲜。
这样的争论比比皆是的原因是,对于这样一个特定的情形来说,每一个“做什么”也是“怎么做”,而每一个“怎么做”也是“做什么”。讨论是不会有结果的,那是因为其实双方都是对的。如果用“做什么”和“怎么做”来定义分析和设计的话,那么任何一个分析的概念也是设计的概念,反之亦然。
下面来示范一下任何一个“做什么”也是“怎么做”与反之的情况,仔细考虑一下我现在所做的。
我现在在做什么呢?我在写一篇blog。
我现在在怎么做呢?我在笔记本上打字;
我现在在做什么呢?我在笔记本上打字。
我现在在怎么做呢?我在移动手指去敲击键盘,随之,这些所敲击的字母就组成了单词;
我现在在做什么呢?我在移动手指去敲击键盘,随之,这些所敲击的字母就组成了单词。
我现在在怎么做呢?我大脑中的感知部分正把一些单词组织在一起,接着指导大脑的行动部分就发送信号到了肌肉,然后就控制了手指。
我可以一直这样做下去。实际上,我可以一直做下去的意思是,“做什么”和“怎么做”是相辅相成的,它们共同引导着朝向细节的递归过程。任何一个“怎么做”都是下一个阶段递归里的“做什么”;任何一个“做什么”都是上一个阶段中的“怎么做”。递归的阶段数目非常巨大,甚至可能是无穷大。这就意味着,“做什么”与“怎么做”的区别仅仅相差一个无穷小,所以实质上是相同的。
所以,对于所有的实际情况来说,如果我们视分析为“做什么”而设计为“怎么做”的话,它们就是互不分离的同等过程。所有的分析都是设计,所有的设计也都是分析。
相关文章推荐
- 软件分析 Vs. 架构设计 (原文最终修订于 2006-05-29 下午06:44:14)
- Tucany SCA软件架构设计理念分析鉴赏 (一)
- SOA对于软件架构设计的影响和价值的分析
- 软件架构设计系列总结—3—逻辑层 vs 物理层
- sap apo 软件的架构和设计分析
- SCA软件架构设计理念分析
- 一个”叫床“软件的需求分析及其软件架构设计
- SCA软件架构设计理念分析
- SCA软件架构设计理念分析
- Tucany SCA软件架构设计理念分析(一)
- 敏捷开发下, 如何将需求分析,架构(软件)设计,开发与测试,一气呵成式的结合且高效的完成 ?
- SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则
- 软件工程系列教材:软件架构设计实践教程
- 用户行为统计分析系统架构设计
- Z-Stack 软件架构分析
- C#基于事件驱动的多串口多线程串口通讯软件架构设计
- SaaS模式实现架构实例分析=数据库层的设计
- 软件设计分层模式(三层架构)
- 如何进行软件架构设计?
- 专访架构师周爱民:谈企业软件架构设计