⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_58540.htm

📁 vc
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<blockquote><p>
回复者:JustinLee 回复日期:2003-11-01 19:36:36
<br>内容:北京时间2002年1月23日(星期三)上午9:30-11:30 <BR>&nbsp;&nbsp;&nbsp;&nbsp;嘉宾:Martin Fowler。Martin Fowler在面向对象分析设计、UML、模式、软件开发方法学、XP、重构...方面,都是世界顶级的专家,现为ThoughtWorks首席科学家。Martin Fowler著有4本经典书籍:<BR>&nbsp;&nbsp;&nbsp;&nbsp;Analysis Patterns : Reusable Object Models<BR>&nbsp;&nbsp;&nbsp;&nbsp;UML Distilled: Applying the Standard Object Modeling Language<BR>&nbsp;&nbsp;&nbsp;&nbsp;Refactoring: Improving the Design of Existing Code<BR>&nbsp;&nbsp;&nbsp;&nbsp;Planning Extreme Programming<BR>&nbsp;&nbsp;&nbsp;&nbsp;交流重点:面向对象分析设计、UML、模式、软件开发方法学、XP、重构...<BR>&nbsp;&nbsp;&nbsp;&nbsp;主持人:gigix<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;关于测试框架<BR>&nbsp;&nbsp;&nbsp;&nbsp;(主持人Gigix对C++的测试框架很感兴趣,所以他先向Fowler先生询问这方面的问题。)<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:Fowler先生,您知道什么C++的自动化测试框架吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我的一个同事Bill Caputo在我的网站上放了一篇关于自动化测试框架的文章。文章的地址是http://martinfowler.com/articles/ciWithCom.html。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:用C++和用Java写一个测试框架,哪个更困难一些?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我发现,对于任何编程任务,用Java都比用C++要容易。现在我已经很少用C++了。当你把JUnit移植到别的语言中的时候,最重要的是遵循你自己语言的习惯用法,而不只是照搬Java中的设计。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:我刚才看到Source Forge有一个叫“CppUnit”的项目,您知道吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:CppUnit已经有一段时间了。我没法做什么评价,因为我已经好久不用C++了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于重构<BR>&nbsp;&nbsp;&nbsp;&nbsp;(重构是Martin Fowler最擅长的领域之一,他著名的《Refactoring》就是关于重构的。网友们也向他请教了很多重构方面的问题。)<BR>&nbsp;&nbsp;&nbsp;&nbsp;tensile:请问“重构”精确的含义是什么?<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:重构是一个改变软件系统的过程,它不会改变代码的外部行为,但是改善其内部结构。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:对,这就是重构的定义。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:您做了多少年程序员之后才意识到重构的重要性呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我从八十年代早期就开始编程了,而第一次接触重构是在1995年前后。<BR>&nbsp;&nbsp;&nbsp;&nbsp;tomsmart和simoncn:您好,Fowler先生。请问我们在什么时候应该重构一个程序呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:如果你想添加新特性或者修补bug,而你的软件让你感觉有点难以下手,那么你就应该重构了。重构的关键是每天做一点。如果你使用的语言有相应的重构工具,那会对你有很大的帮助。每个程序员都应该经常重构。最重要的是要去掉重复代码。代码中的“坏味道”驱使你去重构,而不是你刻意去做哪些重构。每当我手上的代码开始散发出不好的味道时,我就开始重构。此外,代码复审中的重构会起到很好的作用。我在书中曾经说过:代码复审是重构的一个好时机。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine和yhufo:“不好的味道”是指什么?我应该怎么发现源代码中不好的味道?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:在《Refactoring》这本书里,我谈到了代码的坏味道。重复代码就是坏味道的典型。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:“Bad Smell”是指不好的代码形式,在《Refactoring》里面列出了21种,首当其冲的就是大类、长方法、重复代码。“Bad Smell”标志这这部分代码需要重构。<BR>&nbsp;&nbsp;&nbsp;&nbsp;Charity_Zhou:您是说,大类也是一种坏味道?但是在某些系统中,确实需要用许多小类来组成一个大类。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我没有把组合类看作大类——它是由许多小类组合在一起工作的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:“大类”是指代码量过大的类,而不是规模大的类。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:我的一个朋友在重构的时候不使用测试框架,您认为这样做行吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:只做重构不做测试是非常不明智的。重构而不测试,就好象走钢丝而没有安全网。<BR>&nbsp;&nbsp;&nbsp;&nbsp;unimap:那么怎样测试呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:用JUnit之类的测试框架。<BR>&nbsp;&nbsp;&nbsp;&nbsp;viery:现在,重构的理论还不完整,所以它还需要更多人的经验。您是否能给我们一些指导?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:别去等重构的理论了,现在就开始尝试着用吧。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:我觉得重构很困难!不过我支持重构!<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:编程就很困难!重构只是任务的一部分,它能让你的程序变得更好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:结构上的重构是最重要的,是这样吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:你说的“结构上的”是指什么?<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:请原谅,我的意思是说系统的结构(包括类体系及其关联)。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:为什么数据库应用程序的重构那么困难呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:因为数据库通常没有封装,而且集成过程通常也不好。在重构的过程中你可能要搬运所有的数据,如果数据量很大的话,这也是很耗时间的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:在XP里,我们用重构来改善代码。那么为什么不一开始就做好设计,从一开始就编写良好的代码呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:完全预先做完整的设计实在太困难了,特别是在需求会发生变化的情况下。所以,你既需要预先设计,也需要重构。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:但是重构会造成更多的函数和子程序,从而使系统变慢。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:大量的小类不会使系统变慢。通常,在现代虚拟机上,更多的小类会得到更好的性能。如果你的profiler告诉你需要把小类组合在一起,你就放心地这样去做。但是只有当profiler显示这样做有好处的时候,你才应该这样做。<BR>&nbsp;&nbsp;&nbsp;&nbsp;wchenwu:我喜欢重构的方法,但是对于我来说,它太难实践了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:找个学得比较好的人来教你。在重构的时候,首先关注代码的坏味道——特别是重复代码。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:请问您知道什么VB的重构工具吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我还不知道有什么VB的重构工具。如果我看到了,我会贴在refactoring.com上的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:那么Delphi呢?有什么Delphi的重构工具吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:也不知道。如果知道了,我也会贴在refactoring.com上面的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;shenborui:您能推荐一些Java的重构工具吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:在www.refactoring.com上面,我开出了一张重构工具的列表,里面有好几种优秀的Java重构工具。目前我使用的是IntelliJ(www.intellij.com),这是一个非常好的IDE。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于模式<BR>&nbsp;&nbsp;&nbsp;&nbsp;timwap_cn:您好,Fowler先生。请问在应用程序开发中使用模式很重要吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:了解模式是很重要的,但是也并不是随时都要使用的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;timwap_cn:请问在模式和软件体系结构之间有什么关系?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:模式是一种描述体系结构的方式。<BR>&nbsp;&nbsp;&nbsp;&nbsp;timwap_cn:那么您能推荐一些有用的软件体系结构方面的网络资源吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我没有找到太多的软件体系结构方面的网站,当然我的网站上有一些东西——但是都是关于信息系统的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:Fowler先生,您是否认为设计模式仍然有价值?它们是否鼓励过分设计?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:毫无疑问,设计模式是好东西。你可能会过分使用它们,但是当你学会了使用的正确方法以后,你就能更好地利用它们。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:关于设计模式,有什么好的网上资源吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:http://hillside.net/<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:请问重构是模式的一部分吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:重构与模式有关系。模式经常是重构的目标。<BR>&nbsp;&nbsp;&nbsp;&nbsp;heey:请问在设计或编程的时候使用模式很重要吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:对模式有一定的了解是很重要的。你不必随时使用模式,但是你应该知道。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:请问设计模式和分析模式之间有什么关系?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:分析模式是用于系统领域建模的模式。它们会告诉你如何对某种常见的应用领域问题建模。设计模式则是关于如何保持设计的灵活性的。它们在软件的每个角落都有应用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:是不是说分析模式是关于业务逻辑的,而设计模式是关于软件编程逻辑的?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:这是一种不错的想法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:Fowler先生,windy.j非常喜欢您的《分析模式》。她也是第一个开始翻译这本书的人。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:windy,谢谢你的翻译。<BR>&nbsp;&nbsp;&nbsp;&nbsp;windy.j:很高兴在这里与您交流。我觉得您给我们的模式都很经典,可是有点难以把握。J<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:所以我现在开始研究一些ISA的模式。也许我以后还会继续回来研究分析模式的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:如果我们遇到了新的应用领域问题,我们应该如何使用分析模式来解决新问题呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:看看是否有现成的分析模式与你的问题相关。如果有,就尽量使用现有的模式。<BR>&nbsp;&nbsp;&nbsp;&nbsp;windy.j:请问,从业务的经验中获取模式,这是正确的方法吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我从别人的实践中获取模式。ISA模式就来自于对ThoughtWorks公司的项目的观察。ISA模式可以在我的网站上看到:www.martinfowler.com。<BR>&nbsp;&nbsp;&nbsp;&nbsp;windy.j:新的模式给旧的模式增加了更多的内容,而且代码也是用C++写的,真好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:新增加的这些模式更能反映我现在对分析模式的观点(但是代码实际上是用Java写的J)。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于XP<BR>&nbsp;&nbsp;&nbsp;&nbsp;simoncn:Fowler先生您好,我发现在实际工作中很难实施成对编程。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:你需要先找到愿意认真尝试这种方法的人。我没有觉得成对编程的开销是个多大的问题,只要人们认识到编程中最难的部分并不是敲键盘,他们就能接受这种方式。不过,人们往往需要先尝试一下成对编程,看它是否能给自己带来实际的利益。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:您是否认为,在成对编程中,程序员的组合是至关重要的?包括程序员的经验、领域知识等等。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:不同的组合都能生效。你应该根据任务的需要来选择组合形式。比如说,将两个新手组合在一起就会给他们带来困难。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:我听说,如果真的要使用XP,你就必须采用它建议的所有实践。这是真的吗,Fowler先生?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:如果要得到XP的效果,最好是采用所有的实践,至少一开始是这样。但是对于“持续集成”和“测试第一”,单独的实践也可以给你带来利益。<BR>&nbsp;&nbsp;&nbsp;&nbsp;poirot:与某些重型过程相比,XP是不是在美国更加流行?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:XP还是新事物,还很不成熟,但是它在不断成长。<BR>&nbsp;&nbsp;&nbsp;&nbsp;wwabc:请问“XP”是什么意思?谢谢。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:“XP”是“极限编程(eXtreme Programming)的缩写,请看xProgramming.com。<BR>&nbsp;&nbsp;&nbsp;&nbsp;poirot:在XP中,需求是不稳定的,软件总在变化。这是否意味着XP中必须有某种特别的机制来跟踪所有的变化?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:简单的机制就是最好的,不然人们就必须花时间来学习它。<BR>&nbsp;&nbsp;&nbsp;&nbsp;j2ee:在什么时候应该使用XP之外的其他方法,例如RUP、TSP?为什么?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我使用团队自己选择的方法。是团队选择了XP,而不是你强加给他们的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;lzhihua:请问RUP和XP之间最大的区别在哪里?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:RUP是一个非常全面而复杂的过程框架。而XP更简单,并且是为某些类型的项目特别设计的。XP非常强调纪律性,所以也更容易学习。<BR>&nbsp;&nbsp;&nbsp;&nbsp;lzhihua:您能用一句话描述XP吗?就象对RUP的描述那样。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我不认为你真的能用一句话描述RUP!我只能说:XP是一种快速过程,它强烈关注技术性的实践。<BR>&nbsp;&nbsp;&nbsp;&nbsp;lzhihua:RUP这样说:体系结构第一、用例驱动、迭代开发。对吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:没错。XP也是以体系结构为中心的,但是它鼓励不断进化发展的体系结构。XP的迭代性也强于RUP,至少在实践中是这样。<BR>&nbsp;&nbsp;&nbsp;&nbsp;lzhihua:您说XP是一个技术性的过程,那么XP中的管理过程又是怎样的呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:XP既有技术性过程,也有管理性过程,但是更多的细节偏向于技术。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:是不是在大型项目中应该使用RUP,在小型项目中使用XP?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:不要在超过20人的任何项目中贸然使用XP,除非你先在比较小的项目中得到了实际的经验。<BR>&nbsp;&nbsp;&nbsp;&nbsp;j2ee:在美国,XP方法得到软件公司的普遍认可了吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:XP还很新,还没有很多的认同者。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于设计(?)<BR>&nbsp;&nbsp;&nbsp;&nbsp;tomsmart:当我们接到一个大项目的时候,我们是否应该更关注设计而不是编程?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我认为设计和编程是同一件事。<BR>&nbsp;&nbsp;&nbsp;&nbsp;tomsmart:当然了,当我们把设计转换成程序的时候,我们会说它们都属于这整个项目。可是为什么您告诉我们它们都是同一件事呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:在编程的时候,你总是要作出设计决策。在考虑设计思路的时候,你需要尝试用程序把设计表达出来。<BR>&nbsp;&nbsp;&nbsp;&nbsp;timwap_cn:我在开始编程之间已经制定了计划。应该怎样跟踪它的变化呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:不用跟踪,不值得。代码应该能够清楚的表达自己,根本不应该再保留额外的文档。只有值得写的文档才应该存在。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:我认为,在大型项目中,文档还是很重要的,它是交流的载体。请问您怎么看?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:绝对不要忘记:代码是你最重要的文档,其他的文档都只是代码之上的扩展,代码才是基础。可是很多人写的代码不够清楚。这样你有再多的文档也没用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:可是,问题是并非每个人都会去看代码。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:任何搞技术的人都应该去看代码。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:在某些项目中阅读代码是可行的。但是在我现在的项目中,有2000多个用例、5000多个类,通过阅读代码来理解就不太可行,而且也太浪费时间。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:在这种情况下,就应该用图和文档来表现代码。但是细节问题仍然要通过代码本身来表现。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:当然。但是XP的某些部分很容易被误解,甚至引起错误的做法。确定何时写文档、何时不写,这是关键,但也是非常灵活的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:XP并不是反对文档,而是只有当文档可以增加价值的时候才记录文档。只有XP的批评者才会说“XP里没有文档”。<BR>&nbsp;&nbsp;&nbsp;&nbsp;timwap_cn:在项目开始的时候,我总是想得到一个好的设计结构,这没什么错吧?但是有时候,我不知道应该怎么去完成。在项目开始之后,我发现项目的过程完全一团糟。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:你应该在开始编程之前先草拟一个设计,但是随着你对系统了解的加深,不要害怕修改它。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:Fowler先生,您是否有过这样的体验:您认为自己有一个很好的计划,但最后却陷入了混乱?请问应该如何避免这种情况?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:最重要的就是要经常对计划作出评价,并且随时更新你的计划。计划绝对不应该是定死不变的东西。计划最好是一个理解变化的结果的平台。<BR>&nbsp;&nbsp;&nbsp;&nbsp;j2ee:有两种编写代码的风格:“先编码、再复审”;“编写一点、测试一点”。请问您怎么选择?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我当然选择“编写一点、测试一点”。实际上,我最喜欢的是“测试一点、编写一点”J并且随时做设计。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:首先编写测试,测试不能通过,然后再写代码,让测试通过。这是Fowler先生比较喜欢的开发过程<BR>&nbsp;&nbsp;&nbsp;&nbsp;j2ee:但是有人告诉我:复审比测试更好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:复审也很好。但是小步的、渐进式的测试可以极大地改善代码的质量。很多人把复审称为“大量编码,然后测试”。小型的编码/测试循环就完全不同了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;tensile:如何改进代码的质量?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:要改进质量,很简单的方法就是发现并去除重复代码。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:您用于测试的时间和编码的时间是个什么比例?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:基本相等。<BR>&nbsp;&nbsp;&nbsp;&nbsp;kenxia:您不认为设计比测试更重要吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:“测试第一的设计”也是一种设计技术。它让你认真考虑自己的接口,并且鼓励你对代码中的坏味道进行重构。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于CMM<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:我听说很多印度公司通过了CMM 4级认证,我想知道这是否有意义。请问您怎么看,Fowler先生?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:CMM可以帮助你确定某些东西,但是别把它当成某种“级别”来看。<BR>&nbsp;&nbsp;&nbsp;&nbsp;poirot:Fowler先生,您认为XP是一个反CMM的过程吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:敏捷社群的许多人都把CMM看作与XP这样的敏捷方法完全不同的东西。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:您刚才说的“敏捷社群”是指的什么人?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:“敏捷社群”是指那些对XP、Scrum、FDD之类的敏捷方法感兴趣的人。<BR>&nbsp;&nbsp;&nbsp;&nbsp;tensile:如何用XP来提高效率?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:哪方面的效率?<BR>&nbsp;&nbsp;&nbsp;&nbsp;tensile:公司和员工的效率。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我们发现XP的实践大大提高了我们的效率。<BR>&nbsp;&nbsp;&nbsp;&nbsp;tensile:在我们公司里员工的效率比较低,所以我们公司想实施CMM或其他方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:如果情况的确很糟,CMM也是有帮助的。不过公司应该集中精力去改进过程,而不是想着达到哪个级别。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:但是CMM似乎太复杂了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:CMM并非一定要变得复杂的,这取决于你怎么实施它。通常是实施的方法让它变得复杂的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:但是70%的中国软件公司都只有不到50个人。对于他们来说,CMM是正确的选择吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我绝对不会从CMM入手。但是对于一个已经很糟糕的公司来说,实施CMM总比什么都不干要好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;lzhihua:我希望为我们公司引入XP,但是看起来它对开发者的要求太高了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:XP需要开发者要求应用它,并且有热情去学习它。<BR>&nbsp;&nbsp;&nbsp;&nbsp;poirot:您是否认为XP能帮助软件公司达到较高的CMM级别?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:请看http://www.xpuniverse.com/XPandCMM.pdf。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于著作<BR>&nbsp;&nbsp;&nbsp;&nbsp;tomsmart:您读过《Code Complete》这本书吗?我最近读到了。尽管是1993年出版的,但是我还是觉得它对我非常有帮助。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:那的确是一本精彩的书。<BR>&nbsp;&nbsp;&nbsp;&nbsp;rantaiqi:Fowler先生,请问您能在中国出版您的《UML Distilled》吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我相信《UML Distilled》已经有中译本了,至少我听说是这样。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:您能为中国的开发者推荐一篇您的文章吗?我将很高兴为您翻译。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:最适合翻译成中文的也许就是《持续集成》。地址是http://martinfowler.com/articles/continuousIntegration.html。我的很多文章都被翻译成了日文。日文和中文很接近吗?还是有很大的差异?<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:有非常非常大的差异。99%的中国人都看不懂日文。<BR>&nbsp;&nbsp;&nbsp;&nbsp;simoncn:就象英语和西班牙语的差异。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:谢谢你们让我知道这一点。gigix要翻译,没问题,我只要你保留我的版权声明和到原文的连接。<BR>&nbsp;&nbsp;&nbsp;&nbsp;yhufo:在中国我没有找到您的《Refactoring》,但是我真的很想看。您能给我一份电子书吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:很遗憾,我也没有电子书。不过我相信你在中国也能找到这本书。这里的一部分人很明显是看过这本书的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:Fowler先生,您能告诉我们一些您写那本著名的《Refactoring》过程中的事情吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我发现那些比我更渊博的人都忙着干别的事去了,所以只好决定自己来写这本书了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于UML<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:那么,您通常用什么UML工具呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我绝大多数的UML图都是用Visio画的,使用Hruby的模板。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:为什么您不用Rose呢?那可是UML工具中公认的No. 1呀。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:Rose太贵了,而且也不太符合我的习惯。所以我很少用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:那么,在美国最流行的UML工具是什么?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我不知道最流行的UML工具是什么,而且我对这个答案也不感兴趣 ;-)<BR>&nbsp;&nbsp;&nbsp;&nbsp;choupixiong:您好,Fowler先生。我在学习UML,但是没有机会应用,请问我应该怎么办?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:尽量尝试在你自己的问题里面画UML图,看看它是否能帮你观察自己的软件。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:您怎么看待UML?我觉得UML不是自包含的,所以象您这样的前辈应该再对他做些修改,不是吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我觉得UML已经够紧密的了,而且我也没有兴趣再去修改它。现在,我更喜欢研究模式的问题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;wwabc:Fowler先生,如果UML推出新版本,那么会有什么新内容呢?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:UML最近不会出什么新版本(至少我不知道)。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;关于过程和方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:您怎么看待RUP?它太复杂了吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我想RUP的确太复杂了。它最大的问题就是它什么都想管。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fl_xyg:请问在设计模型和用例之间有什么关联?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:不必过分操心模型的问题。对于有些编程任务,用例就可以形成程序的结构。用例可以用不同的方法实现,类图、交互图、CRC卡……只要对你的团队有利,就去用。在为期一个月的迭代周期里面,两到三天的时间画图通常就够了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fl_xyg:对不起,您刚才说“为期一个月的迭代周期里面,两到三天的时间画图通常就够了”,您能详细说明一下吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:如果你这样做,那么对于一个月的迭代周期,大概两天的时间画图就很合适。你可以在整个迭代过程中逐步进行设计。XP就推荐这样逐步设计。<BR>&nbsp;&nbsp;&nbsp;&nbsp;timwap_cn:在软件设计和项目开发中有许多概念,请问应该怎样为团队选择正确的方法?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:敏捷方法是我的首选,犯一些轻量级的错误总比犯一个巨大的错误要好。记住:软件开发的目标是要给用户提供有价值的软件。随时都要记住这一点。在开发过程中,要随时确保软件的高质量,这样你就能以适当的节奏发布可用的软件。<BR>&nbsp;&nbsp;&nbsp;&nbsp;wwabc:在项目中创建业务用例和用例是必须的吗?请问它们之间有什么关系?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:用例很有用,但是通常没有必要同时使用这两类用例。如果你想要更完整(也更好)的答案,我推荐Cockburn的书。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Charity_Zhou:我在把对象映射到关系数据库管理系统时遇到了一些困难。一个类对应一个表,完全面向对象,但是性能却又成了一个问题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:关于对象到数据库的映射,请看http://martinfowler.com/isa/index.html。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:您怎么看待XML数据库?它与OODB很相似,而且我也看到了一些真正的XML数据库。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:XML数据库是一个非常有趣的想法。对于很多问题,它们也许真是不错的解决方案。我们应该关注。<BR>&nbsp;&nbsp;&nbsp;&nbsp;simoncn:从对象世界的设计到RDBMS的映射(以及反向映射),请问您的意见?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我喜欢先得到一个概念模型,然后从它派生出对象和数据库。如果问题领域逻辑比较复杂,就应该由对象模型来驱动。如果应用程序非常简单,你也可以不要对象模型。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;serenaday:您认为哪种团队模式是最好的?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:你说的“团队模式”是指什么?<BR>&nbsp;&nbsp;&nbsp;&nbsp;serenaday:我是说团队的创建。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:团队创建可是个很大的话题了,没有什么绝对的答案。我喜欢让团队找到自己的方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;cyberp2p:我们大家都知道软件工程的重要性,但是一到了实际工作中,许多团队都陷入了混乱。我们要怎么解决这个问题?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:你必须尽量提高团队的纪律性,慢慢来。<BR>&nbsp;&nbsp;&nbsp;&nbsp;serenaday:我们的团队比较小,只有4个人。您能给我们一些建议吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:你想要什么建议?四个人的团队非常合适。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:请问您现在还编码吗,Fowler先生?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:最近我已经不太写代码了,而且写的代码也大半都是用在书中的例子。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:请问您对全局方法怎么看?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:很少需要全局方法。但是与其他东西一样,有时候它们也是正确的选择。一本好的C++书应该会谈到这个问题,可惜我已经不用C++了。在Java或C#中没有那种“自由的函数”。<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypine:但是Java中有static关键字,那不就是全局吗?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:Java中的static和C++的static是一样的——那是一个类方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:通过static方法,我们在Java中也可以得到“全局”的函数,就象在C++中一样。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:这也是一种常见的组织方式,完全取决于你怎么使用它们。但是,static方法总是属于某一个类的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;deborah.d:请问我怎么跟踪业务用例模型和用例模型之间的关联?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:不用去做详细的跟踪,不值得。我建议你看看Cockburn的《Use Cases》。<BR>&nbsp;&nbsp;&nbsp;&nbsp;serenaday:您认为哪种版本控制工具更好用一些?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我对版本控制工具没有什么特别的看法。不过Subversion看上去很不错。<BR>&nbsp;&nbsp;&nbsp;&nbsp;simoncn:您怎么看待CRC卡?我觉得它有时候引导我向过程设计的方向去思考,而且也没有什么好的工具支持。<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:CRC卡是揭示对象之间交互的好技术。<BR>&nbsp;&nbsp;&nbsp;&nbsp; xuxu1976:Fowler先生,您怎样看待组件?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:组件很有用,但是很难设计得好,特别是对于那些商业软件。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;trybird:请问分析类图和设计类图之间有什么差异?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:很遗憾,不同的人对这些词的用法也不同,所以对于你的问题,我很难给出一个唯一的答案。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;serenaday:您怎么看待微软的.NET?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:.NET是很好的技术。它和Java将是未来的主流。但是很多开放源代码的脚本工具也很好(例如Python和Ruby)。<BR>&nbsp;&nbsp;&nbsp;&nbsp;zhangxf:您怎么看待Web Service以及工作流与Web Service的集成?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:现在我们已经针对Web Service做了许多有意义的工作,我希望能写一本关于这个主题的书。<BR>&nbsp;&nbsp;&nbsp;&nbsp;simoncn:请问您对来自OMG的MDA有什么看法?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:MDA是另一种编程语言,同时还包括图表。要让一种编程语言获得成功是很困难的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:您知道敏捷建模吗?您认为UML在敏捷过程中有什么样的地位?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:我一直都在关注Scott Ambler的研究。我觉得敏捷建模是个很好的想法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:Fowler先生,请问您对“软件体系结构”这个词有什么想法?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:体系结构通常是指大尺度的设计问题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;poirot:Fowler先生,您推荐在编码之前先编写测试用例,这是不是UML没有涉及到的一种针对功能的语意规范?<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:没错,这是一种很好的想法。这也是“按照合同设计”的好例子。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;fowler:非常感谢各位,今天聊得很开心。希望以后能在中国见到各位。<BR>&nbsp;&nbsp;&nbsp;&nbsp;tensile:谢谢。<BR>&nbsp;&nbsp;&nbsp;&nbsp;extreme:谢谢Fowler先生。<BR>&nbsp;&nbsp;&nbsp;&nbsp;umlchina:谢谢Fowler先生。<BR>&nbsp;&nbsp;&nbsp;&nbsp;gigix:迟些时候我会给您去mail,晚安。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:xiaoke26 回复日期:2003-11-02 16:36:48
<br>内容:当附件寄太大了,我也不知道该怎么给你发过去了,对不起<BR>2003-11-2 16:42:47

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -