软件分析 Vs. 架构设计 (原文最终修订于 2006-05-29 下午06:44:14)

何谓软件分析(analyse)?它有没有一个成文的定义?如果你曾读过软件教科书或是著作,就会发现有多少个作者,就有多少种分析的定义。具有讽刺意味的是,我们知道软件分析是必不可缺的,但却没有其真正的定义。

一个用来区分软件分析与设计(design)的普遍方法是认为分析指“做什么” ,而设计指“怎么做”。乍听起来很有信服力,很显然,如果能在一开始就知道想要系统“做什么”,那至于系统应该“怎么做”就会更容易。实际上,过去在尝试区分“做什么”与“怎么做”上花费了大量的人力。在一间会议室里,与会人员都在不停的争论着到底他们现在做的是分析还是设计。像上述情形其实屡见不鲜。

这样的争论比比皆是的原因是,对于这样一个特定的情形来说,每一个“做什么”也是“怎么做”,而每一个“怎么做”也是“做什么”。讨论是不会有结果的,那是因为其实双方都是对的。如果用“做什么”和“怎么做”来定义分析和设计的话,那么任何一个分析的概念也是设计的概念,反之亦然。

下面来示范一下任何一个“做什么”也是“怎么做”与反之的情况,仔细考虑一下我现在所做的。

我现在在做什么呢?我在写一篇blog。

我现在在怎么做呢?我在笔记本上打字;

我现在在做什么呢?我在笔记本上打字。

我现在在怎么做呢?我在移动手指去敲击键盘,随之,这些所敲击的字母就组成了单词;

我现在在做什么呢?我在移动手指去敲击键盘,随之,这些所敲击的字母就组成了单词。

我现在在怎么做呢?我大脑中的感知部分正把一些单词组织在一起,接着指导大脑的行动部分就发送信号到了肌肉,然后就控制了手指。

我可以一直这样做下去。实际上,我可以一直做下去的意思是,“做什么”和“怎么做”是相辅相成的,它们共同引导着朝向细节的递归过程。任何一个“怎么做”都是下一个阶段递归里的“做什么”;任何一个“做什么”都是上一个阶段中的“怎么做”。递归的阶段数目非常巨大,甚至可能是无穷大。这就意味着,“做什么”与“怎么做”的区别仅仅相差一个无穷小,所以实质上是相同的。

所以,对于所有的实际情况来说,如果我们视分析为“做什么”而设计为“怎么做”的话,它们就是互不分离的同等过程。所有的分析都是设计,所有的设计也都是分析。

 

 (原文链接网址:http://www.butunclebob.com/ArticleS.UncleBob.AnalysisVsDesign; Robert C. Martin的英文blog网址: http://www.butunclebob.com/ArticleS.UncleBob 

作者简介:Robert C. MartinObject Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt获奖图书《敏捷软件开发:原则、模式与实践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method的作者。MartinPattern Languages of Program Design 3More C++ Gems的主编,并与James Newkirk合著了XP in Practice。他是国际程序员大会上著名的发言人,并在C++ Report杂志担任过4年的编辑。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值