<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="0" Name="header"/> <w:LsdException Locked="false" Priority="0" Name="footer"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="0" Name="page number"/> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="0" Name="Body Text"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} </style> <![endif]-->
1. 引言
我是 2001 年开始全面接触 Uml 的,随后当时的公司在这个方向上做了一些培训,我自己也买了一些书来看,同时在一个项目中开始了应用。当时,我是边学边用,感觉起来理解的很快,不了解的东西在和同事的讨论和实际的摸索中逐渐得到验证和最后的确认。
后来,我开始主动在一些工程项目中采用 Uml 来取代传统文档模式进行需求和分析设计等工作。
经过了几个项目的实践后,根据项目的实践,我总结了一些经验和教训,完成了《软件工程之全程建模实现》。
这也是因为,在这个时候,我发现一个人的实践和摸索已经远远不能达到我所要求达到的程度,我希望能有更多的人参加到这个实践中来。大家一同实践,不断体验,并将经验总结起来,汇集众人的力量来推动中国软件业分析设计技术的革命。
于是 2003 年底,我应邀到北航给他们的研究生讲授 Uml 方面的知识。其间,我刻意地将一些全程建模的知识和理念灌输给了他们,虽然我知道这对他们来说接受起来很困难,但是,结果还是让我感到很欣慰的,因为他们都非常努力,这也使得我有了更强的信心来推动这个方向的发展。
2. 全程建模
本文的标题就提到了全程建模,那,到底什么是全程建模?为什么要采用全程建模?她有什么好处?如果要用,又如何应用?如何开始?
2.1 什么是全程建模
在软件工程的全部实施过程中都采用模型的方式 / 手段而非文字的表达方式来进行描述 / 展现,这样的实现过程就称之为全程建模。
特点:这些模型相互之间是有关联的,模型成为软件工程过程各阶段展现的主体而不是文字描述作为主体存在。
2.2 全程建模的好处
通过建模的方式将原来纯文字加图形描述的各种文档模型化,使得从需求到代码能够统一起来,实现需求的变动直接影响到代码的变化。
提高代码对需求的有效性联系,同时,降低过去经常出现的:编码一启动,文档就失效的“怪圈”。
2.3 全程建模的应用环境
2.3.1 项目类型
目前而言,我建议的项目应该具有以下特征:
第一、在开发时间较为充足的项目中应用。
第二、产品将来会不断地被要求提供升级服务。
例如做产品开发时,一般时间和资金都较为充足,而且,公司方面也会要求将来对该产品做持续不断的升级,这时候,建议你采用全程建模的方法来实施你的项目。
2.3.2 管理方式
管理方式上建议尽可能的正规化,至少也应该提供如下管理措施:
第一、项目开发计划和过程管理;
第二、配置管理的应用;
只要做了这两条,就基本上可以应用全程建模的方法来实施项目了。
2.4 如何开始全程建模实践
首先,开发人员必须有相应的基础知识;
其次,公司在管理上应当适当的正规化;
第三,初次应用的时候,开发过程中需要有经验的人来做指导和审核,以便于实施能够顺利进行。
3. 常用工具
3.1 常用建模工具
我经常使用的建模工具就是 Rational 的 Rose , 2001 年曾经用过 together ,但是感觉不是很好。
Together 被 Borland 收购后,应该会有一些好的变化。
3.2 常用辅助工具
除了 Rose 之外,还需要配备的工具如下:
文档编辑工具——用于用例阐述和交互建模
绘图工具——用于界面设计
编码工具—— IDE 开发环境
测试工具——对代码进行测试
配置管理工具——对代码和模型进行统一的管理
具体采用那种工具(例如:文档编辑工具是使用 Word 还是 wps )就要看各个公司的情况。
4. 图书资料介绍
4.1 《 Uml 参考手册》
4.1.1 介绍
作者: James Rumbaugh Ivar Jacobson Grady Booch
译者:姚淑珍 唐发根
出版社:机械工业出版社
原出版社: Addison Wesley/Pearson
ISBN 书号: 7-111-08220-6
出版日期: 2001 年 1 月
页数: 440
附注:这本书的英文版已经由科学出版社引进影印成书,英文比较好的朋友可以去看看。
4.1.2 评论
这是一本非常好的概念性书籍。
有些朋友对我说,看了这本书以后,什么都看不懂。书中的句子大都是对着原文一句一句翻译出来的,非常晦涩难懂。
我给他的回答是,没关系,这很正常。如果你没有这个反应,那才是真正的不正常。我第一遍读这本书的时候也有同样的感觉,当时,我也是硬着头皮将它读完的。
看完这本书以后,你就应该尝试着去做一些项目,至少是练练手。然后,看看下面这本书《 Uml 设计核心技术》,看的方法见我的评论 4.2.2 。同时配合着看看 RUP 的内容或者参考《软件工程之全程建模实现》中所介绍的对应阶段的操作方法。
等一个项目做完以后,再把本书重新读一遍,这时候,你一定会有非常不同的感受的。其实,你在做这第一个项目的过程中也会不断的翻阅这本书来查找一些概念上的解释。
4.2 《 UML 设计核心技术》
4.2.1 介绍
作者:蒋慧 吴礼发 陈卫卫
出版社:北京希望电子出版社
ISBN 书号: 7-900056-45-9
出版日期: 2001 年 4 月
页数: 306
4.2.2 评论
这本书也是一本还算不错的 Uml 方面的入门性书籍,大家不要被它的名字给吓坏了,以为真的是核心技术而不敢看它。
对于这本书的读法是:
详细地看完前七章,也就是它的第一部分 UML 入门。
第二部分,可以完全忽略掉,或者大概的翻一翻即可。
然后就可以开始做你的第一个项目了,做项目的时候配合着 RUP 中的过程,或者参考《软件工程之全程建模实现》中所介绍的对应阶段的操作方法。
4.3 RUP
4.3.1 介绍
下面是 RUPC2000 的标志图。
下面是 RUP2003 的标志图。
4.3.2 评论
关于 RUP 网上已经有了太多的内容,我不想多做介绍,这里就直接些我是如何用它的。
RUP 本身是个重型软件工程方法,所谓的重是由于其内部详细缜密的软件工程实现方法和逻辑理念。在实际的软件开发过程中,我们很难应用完整的 RUP 来实现项目。这与中国国内的工程性项目居多有着非常密切的关系。
在这里我们操作的过程中可以参考 RUP 所提供的方法,却不一定每个都要用到,对他做一定的裁减,根据项目需要和公司能力来定制所需的开发过程。
对于 RUP ,不需要每一个内容都仔细看,使用的方式是用到了就找找,看看。用不到,就先放到资料库里。
4.4 J2EE 核心模式
4.4.1 介绍
出版社:机械工业出版社出版,( Sun 公司核心技术丛书)
作者:(美) Deepak Alur John Crupi Dan Malks
译者:牛志奇 丁天 田蕴哲
出版社:机械工业出版社
原出版社: PH PTR
ISBN 书号: 7-111-09511-1
出版日期: 2002 年 1 月
页数: 300
它的英文原版封面是:
附注:这本书的英文版已经由科学出版社引进影印成书,英文比较好的朋友可以去看看。
4.4.2 评论
由于本人主要是从是 Java 方面的软件开发,所以,对这本书较为推崇。
书中主要介绍了 J2EE 关键技术的模式、最佳实践、设计策略和经过验证的解决方案。涉及 J2EE 包括的 15 个模式的分类和大量的策略。
这里面的模式主要是在架构体系层面的模式,和大家平时所说的设计模式是出于两个不同层面的。
在《软件工程之全程建模实现》一书中引用了这本书中的一个模式,对于 Java 语言开发者,我建议您能看看这本书,这是一定会对你有所帮助的。
4.5 软件工程之全程建模实现
4.5.1 介绍
作者:青润
出版社:电子工业出版社
ISBN 书号: 7-5053-9825-3
出版日期: 2004 年 4 月
开本:短 16 开
页数: 291
4.5.2 评论
我在这本书的介绍中写道:
本书主要介绍的是采用 UML 建模实现软件工程的主要过程,包括需求、分析、设计、代码导出、设计模型维护等,对协作开发等团队开发所要求的必备知识也进行了详细的描述。本书采用了国内实际软件工程中的大量截图,通过图形和示例描述工程实际中的问题和过程。
本书适合于对 UML 基础知识有一定的了解,同时参加过一些实际工程项目开发而又对全程建模过程实现感兴趣的人员阅读。
另外,这本书中所介绍的是在软件开发的需求、分析、设计、编码、维护这几个阶段的具体操作方法和注意事项。它与软件的开发过程无关、与开发工具也没有关系。无论您是采用 Rose 还是 Together ,或者是采用 Jude 等工具,都可以实现。不过,大部分工具还不能提供完整得到代码导出和维护的功能,这一点需要大家注意。
使用 .net 等非 Java 开发语言的朋友,本书中的内容主要是以 Java 语言为基础来介绍整个过程的,但是,与语言相关的主要在设计、编码和维护这三个阶段,在设计之前的内容是于语言无关的,你们也可以直接使用。而后续阶段,只要甄别出 Java 与您所使用的语言的差异,我个人认为在用的时候,也同样没有太大的问题。
提醒:看过了 4.1-4.4 中的这四本书后,你就可以较为全面的来了解全程建模的过程和操作方式了。这时候,您再看我的这本书,相信您一定会有较大的收获。
4.6 关于书的结束语
除了上面的几本书以外,还有很多不错的书,可能因为笔者的精力有限,因此没能一一阅读,给各位推荐。
不过,这里还是以一句老话来结尾:书上能记录下来的都是过去的东西。
能够成书就已经说明这个东西经过了很多次的考验,已经相对而言比较成熟了。而不能成书的,或者说来不及成书的才是真正及时的崭新的知识。但是,新的知识和经验必然也带着新的风险,那就是没有经过多次考验而具有可能不稳定不够确实的问题。