??xml version="1.0" encoding="utf-8" standalone="yes"?>
软gq程Q?font face="Verdana">Software ProcessQ?/font>是指一套关于项目的阶段、状态、方法、技术和开发、维护Y件的人员以及(qing)相关ArtifactsQ计划、文档、模型、编码、测试、手册等Q组成。目前有三种Ҏ(gu)QUPQthe unified processQ,The OPEN ProcessQOOSP(The Object-Oriented Software Process)?
软gq程(Software Procedure)是指软g生存周期所涉及(qing)的一pd相关q程。过E是zd的集合;zd是Q务的集合QQ务要L(fng)把输入进行加工然后输出的作用。活动的执行可以是顺序的、重复的、ƈ行的、嵌套的或者是有条件地引发的?/font>
软gq程可概括ؓ(f)三类Q基本过E类、支持过E类和组l过E类。基本过E类包括获取q程、供应过E、开发过E、运作过E、维护过E和理q程。支持过E类包括文档q程、配|管理过E、质量保证过E、验证过E、确认过E、联合评审过E、审计过E以?qing)问题解册E。组l过E类包括基础设施q程、改q过E以?qing)培训过E?/font>
软gq程主要针对软g生和管理进行研I。ؓ(f)?jin)获得满_E目标的软gQ不仅涉?qing)工E开发,而且q涉?qing)工E支持和工程理。对于一个特定的目Q可以通过剪裁q程定义所需的活动和dQƈ可ɋzdq发执行。与软g有关的单位,Ҏ(gu)需要和目标Q可采用不同的过E、活动和d?/font>
2. Z么我们需要一个Y件过E?
有效的Y件过E可以提高组l的生能力Q?
■理解Y件开发的基本原则Q可以帮我们做出明智的决定;
■可以标准化你的工作Q提高Y件的可重用性和Team间的协作Q?
■我们所采用的这U机制本w是不断提高的,我们可以跟上潮流Q自己不断接收新的Q最好的软g开发经验;
有效的Y件过E可以改善我们对软g的维护:(x)
■有效地定义如何理需求变_(d)在未来的版本中恰当分配变更部分,使之qxq渡Q?
■首先在具体操作和相x持中定义如何qx地改造YӞq且q种具体操作和支持是可实施的Q不可实施的软gq程很快被束之高阁Q?
Z么要采用软gq程Q归根结蒂,形势所|
3. 实施软gq程的必要条?/strong>
CMM(Capability Maturity Modeling)作出?jin)明的定?由The Software Engineering Institute提出 http://www.sei.cmu.edu )
4. 五个成熟{
W一U:(x)初始U?
在初始Q企业一般不具备E_的Y件开发与l护的环境。常常在遇到问题的时候,放弃原定的计划而只专注于编E与试。处于这一{的企业,成功与否在很大程度上军_于有杰出的项目经理与l验丰富的开发团队。因此,能否雇请到及(qing)保有能干的员工成?jin)关键问题。项目成功与否非怸定。虽然品一般来说是可用的,但是往往有超l费与不能按期完成的问题?
W二U:(x)可重复
在这一U,建立?jin)管理Y仉目的政策以及(qing)L行这些政{而定的措施。基于过往的项目的l验来计划与理新的目。企业实行了(jin)基本的管理控制。符合实际的目承诺是基于以往目以及(qing)新项目的具体要求而作出的。项目经理不断监视成本、进度和产品功能Q及(qing)时发现及(qing)解决问题以便实现所作的各项承诺?
通过具体地实施这一U的各个关键q程领域的要求,企业实现?jin)过E的规范化、稳定化。因而,曄取得q的成功成ؓ(f)可重复达到的目标?
W三U:(x)定义U?
在这一U,有关软g工程与管理工E的一个特定的、面Ҏ(gu)个企业的软g开发与l护的过E的文g被制订出来。同Ӟq些q程是集成到一个协调的整体。这qZ业的标准软gq程?
q些标准的过E是用于帮助理人员与一般成员工作得更有效率。如果有适当的需要,也可以加以修攏V在q个把过E标准化的努力当中,企业开发出有效的Y件工E的各种实践zd?
同时Q一个在整个企业内施行的培训Ҏ(gu)确保工作h员与理人员都具备他们所需要的知识与技能?
非常重要的一Ҏ(gu)Q项目小l要Ҏ(gu)该项目的特点L~企业的标准软gq程来制订出为本目而定义的q程?
一个定义得很清楚的q程应当包括Q准备妥当的判据Q输入,完成工作的标准和步骤Q审核的Ҏ(gu)Q输出和完成的判据。因E被定义得很清楚Q因此管理层pҎ(gu)有项目的技术过E有透彻的了(jin)解?
W四U:(x)定量理U?
在这一U,企业对品与q程建立起定量的质量目标Q同时在q程中加入规定得很清楚的q箋的度量。作Z业的度量Ҏ(gu)Q要Ҏ(gu)有项目的重要的过E活动进行生产率和质量的度量。Y件品因此具有可预期的高质量?
一个企业范围的数据库被用于攉与分析来自各目的过E的数据。这些度量徏立v?jin)一个评价项目的q程与品的定量的依据。项目小l可以通过~小他们的效能表现的偏差使之处于可接受的定量界限之内Q从而达到对q程与品进行控制的目的?
因ؓ(f)q程是稳定的和经q度量,所以在有意外情况发生时Q企业能够很快L别出Ҏ(gu)的原因ƈ加以处理
W五U:(x)Q不断)(j)优化U?
在这个等U,整个企业会(x)把重Ҏ(gu)在对q程q行不断的优化。企业会(x)采取dL?gu)E的q与长处,以达到预防缺L(fng)目标。同Ӟ分析有关q程的有效性的资料Q作出对新技术的成本与收益的分析Q以?qing)提出对q程q行修改的徏议。整个企业都致力于探索最佌Y件工E实늚创新?
目组分析引v~陷的原因,对过E进行评鉴与改进Q以侉K防已发生的缺陷再度发生。同Ӟ也把从中学到的经验教训传授给其他目?
降低费与消耗也是这个等U的一个重炏V?
处于q一{的企业的软gq程能力可被归纳Z断的改进与优化。它们以两种形式q行。一U是逐渐地提升现存过E,另一U是Ҏ(gu)术与Ҏ(gu)的创新。虽然在其他的能力成熟度{之中Q这些活动也可能发生Q但是在优化U,技术与q程的改q是作ؓ(f)常规的工作一P有计划地在管理之下实行的?
5. 关键q程领域
W一U:(x)初始U(Level1: InitialQ(无关键过E区域)(j)
W二U:(x)可重复
■需求管理(Requirements ManagementQ?
需求管理的目的是徏立和l护用户和Y仉目间的关于该软g如何实现用户需求的p?
需求管理包括:(x)
a. 建立和维护分配该lY仉目的需求的基线?
b.核查该Y仉目的计划Q活动和正在开发中的品以保它们是与分配该给软g目的需求一致?
■Y仉目计划(Software Project PlanningQ?
软g计划的目的是建立合理的计划用作Y件开发与软g目控制?
软g计划包含Q?
a.选择一UY件生命周?
b.建立一个开发工作的分解构?
c.对与开发工作有关的、重要的计划参数q行估计?
d.识别软g目的风险?
e.作出必要的承诺?
f.制订软g开发工作的计划?
■Y仉目控ӞSoftware Project ControlQ?
软g目控制的目的是Y仉目的q程提供_的能见度Q从而可以在执行q程中发生对计划的严重偏L能够采取适当的更正行动?
软g目控制包括Q?
a.q踪软g目的进展与表现Q从而与所作的估计、承诺和计划作出Ҏ(gu)?
b.q踪软g目的风险?
c.在发生对计划的严重偏L采取更正行动?
■Y件获取管理(Software Acuisition ManagementQ?
软g获取理的目的是有效地管理从软g目外部来源获取软g?
软g获取理包括Q?
a.扑և软g目对取得外部Y件的需要?
b.识别和选择供应者?
c.与供应者达成协议?
d.处理与供应者之间的关系?
e.收取软g目所需的外部Y件?
f.安排Ҏ(gu)取得的外部Y件的l护与支持?
■Y件质量保证(Software Quality AssuranceQ?
软g质量保的目的是Z(jin)客观地核实Y仉目的实施行动与开发中的品遵从于对应的需求、过E描q、标准及(qing)规程?
软g质量保包括Q?
a.客观地核实Y仉目的实施行动与开发中的品遵从于对应的需求、过E描q、标准及(qing)规程?
b.扑և?qing)记录所发现的不一致的问题?
c.向项目成员与l理提供反馈?
d.保那些不符的问题得到处理?
■Y件组配管理(Software Configuration ManagementQ?
软gl构配置理(SCM)的目的是贯穿软g生命周期Q徏立和l持软g目的品完整性?
软gl构配置理包括Q?
a.定开发中的Y件品在某一特定时刻的结构配|?
b.控制l构配置的组份的变更?
c.从结构配|库中去制作开发的软g产品?
d.贯穿软g生命周期Q维持维软g产品基线的完整性?
W三U:(x)定义U?
■企业对q程的重视(Organization Process FocusQ?
企业对过E的重视的目的是建立和维护对企业的Y件过E的理解和协调企业的件工E过E的改进zd?
企业对过E的重视包括Q?
a.评估企业和项目的软gq程?
b.建立起一个计划去改进软gq程?
c.对徏立、维护、改q和使用整个企业内共有的软gq程的活动进行协调?
■企业过E定义(Organization Process DefinitionQ?
企业q程定义的目的是建立与维护一套可用的软gq程资源Lq整个企业的E过E效果及(qing)Z业的U篏性的长期收益提供一个坚实的基础?
企业q程定义所建立的Y件过E资源包括:(x)
a.一套企业的标准软g工程q程?
b.Ҏ(gu)一U经审核批准用于工程目的Y件生命周期模型的描述?
c.关于如何剪裁企业标准的Y件过E以适应具体目需要的原则和指导方针?
d.企业的Y件测量结果数据库?
e.企业的与软gq程有关的文件资料库?
■企业的培训Ҏ(gu)QOrganization Training ProgramQ?
企业的培训计划的目的是增q工作h员的技能和知识Q他们能实质地和高效地担当其Y件角艌Ӏ?
企业的培训计划包含:(x)
a.扑և什么是企业的Y件培训需要?
b.取得与提供所需的培训?
■集成化的Y件管理(Integrated Software ManagementQ?
集成软g理的目的是把Y件工E与理集成Z个连贯涵接的、详l定义了(jin)、基于企业标准Y件过E而剪裁出来的软gq程?
集成软g理包括Q?
a.使用企业的Y件过E胦(ch)富,q对之作?gu)A(ch)献?
b.Z企业标准软gq程而剪裁出详细定义?jin)的软gq程?
c.U极dC用这个定义了(jin)的Y件过E?
d.U极d地对软g的风险进行管理?
■Y件品工E(Software product EngineeringQ?
软g产品工程的目的是始终如一地执行明定义了(jin)的、集成了(jin)所有Y仉目的术活动的工程q程Q去实质地和高效率地刉正的、稳定的软g开发品?
软g产品工程包含Q?
a.按照目的Y件过E,执行工程的各Q务去规定Q设计,刉,递交Q和l护软g?
b.(g)验与证实软g产品满其品技术需求?
■项目间的协调(Project Interface CoordinationQ?
目界面协调的目的是保软g工程人员dC企业内的其他功能部门交流协调和合作,以便更好地满_L(fng)需求。这些功能部门包括技术的功能(例如Q系l测?Q支持功?例如Q记?Q和l上的功?例如Q培训和合同)?
目界面协调牉|到经埋与员工Q其内容包含Q?
a. 与项目内其他功能部门一道处理系l要求,计划Q目标,困难问题和风险?
b. 定与维持对其他涉及(qing)目的功能部门的承诺?
c. 辨明、跟t和解决目内功能间配合的行动与问题?
■交换审核(Peer ReviewsQ?
交互审核的目的是早地和有效C开发中的Y件品中除去~陷。一个重要的必然l果是对软gq程和开发中的Y件品有一个更好的理解Q从能够预防~陷产生?
交互审核是由软g写作者的同事使用既定的办法去对开发中的Y件品进行检查来扑և~陷与需要作出更改的地方?
交互审核办法的例子包括:(x)(g)查,l构化走通和U极审核?
W四U:(x)定量理U(Level4: Quatitative ManagementQ?
■企业Y件资产共通性(Organization Software Asset CommonalityQ?
企业软g资源共通性的目的是找Z业Y件品之间的共通性,以便在成本,量和生命周期{方面取得收益?
企业软g资源共通性包含:(x)
a. 与企业的其他功能部门合作d义出共同软g资源的技术要求,从而ə目与企业的战略l营目标保持一致?
b. 建立与维护一套能用于各个目的开发与产品l护的共同Y件资源?
c. 协调对企业内所有项目的共同软g资源的部|Ԍ以便取得在成本、质量和生命周期{方面的得益?
■企业过E表玎ͼOrganization Process PerformanceQ?
企业q程效能的目的是建立和维护用于重要的q程和品特性的量、数据与分折技术,L持对企业与项目的软gq程q行q用l计学方法的理?
企业q程效能包括Q?
a. 定义?gu)征企业Y件过E效能的各种量目和与之关联的q程效能模型?
b. 从各个Y仉目收集这些过E效能的量l果?
c. 使用q些量数据来表征企业的标准软gq程?
d. 使用q些量数据来ؓ(f)整个企业建立软gq程效能模型?
■统计法q程理QStatistical Process ManagementQ?
l计法的q程理的目的是使所选择到的所有次U过E稳定化?qing)透彻掌握它们的能力,从而达到统计法意义上的产品质量?qing)过E效能的目标?
l计法的q程理包括Q?
a. 建立产品质量?qing)过E效能的目标?
b. 选择目的设定过E中的一些次U过E来q行q用l计法的理?
c. 扑և、测量和分析那些Q被选中的)(j)ơ过E的关键产品和过E的属性持征?
d. 定每个ơ过E的关键的属性特征的自然界限?
e. 使得Q选中的)(j)ơ过E成为可预测的?
f. 量与分析(选中的)(j)ơ过E的q程效能?
g. 把品质量和q程效能的测量结果与所定的目标q行比对以便定相关q程的能力?
W五U:(x)Q不断)(j)优化U(Level: OptimizingQ?
■缺陷预ԌDefect PreventionQ?
~陷预防的目的是扑և~陷和其他问题生的共同原因。采取行动去预防它们再次发生Q或者采取措施去克服那些产生不及(qing)格的q程效能的原因?
~陷预防包括Q?
a. 分析q去产生的缺陷和其他的问题?
b. 采取特定的行动来预防那些cd的缺陷与问题在将来再ơ出现?
c. 采取持定的改q行动去U正那些产生不及(qing)q程格效能的共同原因?
■企业过E与技术创斎ͼOrganization Process and Technology InnovationQ?
企业q程与技术创新的目的是找出那些能够在一定程度上改进企业的Y件过E而有助于辑ֈ企业改进软gq程的目标的q程与技术上的改q?
企业q程与技术创新包括:(x)
a. 建立和维护企业的定量法的软gq程改进目标?
b. 攉与评仯Y件过E改q的?
c. 扑և与评h在的软gq程和技术的创新?
d. 选择在全企业展开攚w与创新的候选项目?
■企业改q开展(Organization Improvement DeploymentQ?
企业改进的开展的目的是通过把改q{变ؓ(f)一U系l性的行ؓ(f)方式Ll地和计量地改进企业的Y件过E?
企业改进的开展包括:(x)
a. 评h(hun)软gq程改进的候选项目?
b. 选择要进行开展的软g改进目?
c. 开展改q?
d. 量改进的效果?
从整体来说Y件能力成熟度U别从低到高的变化代表了(jin)企业的生产活动由高风险低效率到高质量、高生率的q展?
q儿要注意的一Ҏ(gu)每个能力成熟U别的关键过E区域是累加C一U去的,例如在第三时就要满x有第二与第三的关键过E领域的目标?
如果要用单的一句话来表达从一U到高一U所需要的努力的话Q我们可以有Q?
从一U到二的{化:(x)规范化过E?
从二U到三的{化:(x)标准化、稳定的q程
从三U到四的{化:(x)可预的q程
从四U到五的{化:(x)l箋不断地改q过E?
二、团队的构成要素
团队有几个重要的构成要素Qȝ? P
1Q目?Purpose)
团队应该有一个既定的目标Qؓ(f)团队成员DQ知道要向何处去Q没有目标这个团队就没有存在的h(hun)倹{?/font>
2Qh(People)
人是构成团队最核心(j)的力量??包含3?以上的h可以构成团队。目标是通过人员具体实现的,所以h员的选择是团队中非常重要的一个部分。在一个团队中可能需要有人出LQ有人定计划Q有人实施,有h协调不同的h一起去工作Q还有hȝ督团队工作的q展Q评价团队最l的贡献。不同的人通过分工来共同完成团队的目标Q在人员选择斚w要考虑人员的能力如何,技能是否互补,人员的经验如何?/font>
3Q团队的定位(Place)
团队的定位包含两层意思:(x)
?团队的定位,团队在企业中处于什么位|,p选择和决定团队的成员Q团队最l应对谁负责Q团队采取什么方式激׃?
?个体的定位,作ؓ(f)成员在团队中扮演什么角?是订计划q是具体实施或评?
4Q权?Power)
团队当中领导人的权利大小跟团队的发展阶段相关Q一般来_(d)团队成熟领D所拥有的权利相应越,在团队发展的初期阶段领导权是相对比较集中?br />团队权限关系的两个方面:(x)
(1)整个团队在组l中拥有什么样的决定权?比方说胦(ch)务决定权、h事决定权、信息决定权?br /> (2)l织的基本特征。比方说l织的规模多大,团队的数量是否够多Q组l对于团队的授权有多大,它的业务是什么类型?/font>
5.计划(Plan)
计划的两层面含义Q?br /> (1)目标最l的实现Q需要一pd具体的行动方案,可以把计划理解成目标的具体工作的E序?br /> (2)提前按计划进行可以保证团队的利q度。只有在计划的操作下团队才会(x)一步一步的贴近目标Q从而最l实现目标?br />
二、团队和体的区?/strong>
体的概念:(x)
两个以上怺作用又相互依赖的个体Qؓ(f)?jin)实现某些特定目标而结合在一赗群体成员共享信息,作出决策Q帮助每个成员更好地担负赯q责Q?/font>
团队和群体的差异
团队和群体经常容易被混ؓ(f)一谈,但它们之间有Ҏ(gu)性的区别Q汇Mؓ(f)六点Q?/font>
(1)在领导方面。作为群体应该有明确的领ghQ团队可能就不一P其团队发展到成熟阶D,成员׃n决策权?br /> (2)目标斚w。群体的目标必须跟组l保持一_(d)但团队中除了(jin)q点之外Q还可以产生自己的目标?br /> (3)协作斚w。协作性是体和团队最Ҏ(gu)的差异,体的协作性可能是中等E度的,有时成员q有些消极,有些对立Q但团队中是一U齐?j)协力的气氛?br /> (4)责Q斚w。群体的领导者要负很大责任,而团队中除了(jin)领导者要负责之外Q每一个团队的成员也要负责Q甚臌一L(fng)互作用,共同负责?br /> (5)技能方面。群体成员的技能可能是不同的,也可能是相同的,而团队成员的技能是怺补充的,把不同知识、技能和l验的hl合在一P形成角色互补Q从而达到整个团队的有效l合?br /> (6)l果斚w。群体的l效是每一个个体的l效相加之和Q团队的l果或W效是由大家共同合作完成的产品?br />
(tng) (tng) (tng) (tng) (tng) (tng)团队的类?/strong>
Ҏ(gu)团队存在的目的和拥有自主权的大小可将团队分成三种cd?/p>
(tng) (tng) (tng)◇问题解军_团队
(tng) (tng) (tng)◇自我管理型团队
(tng) (tng) (tng)◇多功能型团?
问题解决型团?br /> 问题解决型团队的核心(j)Ҏ(gu)提高生质量、提高生产效率、改善企业工作环境等。在q样的团队中成员如何改变工作程序和工作Ҏ(gu)怺交流Q提Z些徏议。成员几乎没有什么实际权利来Ҏ(gu)采取行动?br /> (tng) (tng) (tng) (tng) 自我理型团?br /> (tng) 质量圈对表现企业的质量行之有效,但团队成员在参与决策斚w的积极性显得不够,企业L希望能徏立独立自丅R自我管理的团队——自我管理型团队?br />
(tng) (tng) (tng) (tng) 多功能型团队
多功能型团队是由来自同一U等U不同领域的员工l成Q成员之间交换信息,Ȁ发新的观点,解决所面(f)的一些问题?/p>
一、六大经?/strong>
(tng) (tng) (tng) (tng) (tng) q代式开发。在软g开发的早期阶段想完全、准的捕获用户的需求几乎是不可能的。实际上Q我们经帔R到的问题是需求在整个软g开发工E中l常?x)改变。P代式开发允许在每次q代q程中需求可能有变化Q通过不断l化来加深对问题的理解。P代式开发不仅可以降低项目的风险Q而且每个q代q程以可以执行版本结束,可以鼓舞开发h员?/font>
(tng) (tng) (tng) (tng) (tng) 理需求。确定系l的需求是一个连l的q程Q开发h员在开发系l之前不可能完全详细的说明一个系l的真正需求。RUP描述?jin)如何提取、组l系l的功能和约束条件ƈ其文档化,用例和脚本的使用以被证明是捕获功能性需求的有效Ҏ(gu)?/font>
(tng) (tng) (tng) (tng) (tng) Zlg的体pȝ构。组件重用成ؓ(f)可能Q系l可以由lgl成。基于独立的、可替换的、模块化lg的体pȝ构有助于理复杂性,提高重用率。RUP描述?jin)如何设计一个有Ҏ(gu)的、能适应变化的、易于理解的、有助于重用的Y件体pȝ构?/font>
(tng) (tng) (tng) (tng) (tng) (tng) 可视化徏模。RUP往往和UML联系在一P对Y件系l徏立可视化模型帮助Z提供理软g复杂性的能力。RUP告诉我们如何可视化的对Y件系l徏模,获取有关体系l构于组件的l构和行Z息?/font>
(tng) (tng) (tng) (tng) (tng) 验证软g质量。在RUP中Y件质量评C再是事后q行或单独小l进行的分离zdQ而是内徏于过E中的所有活动,q样可以?qing)早发现软g中的~陷?/font>
(tng) (tng) (tng) (tng) (tng) 控制软g变更。P代式开发中如果没有严格的控制和协调Q整个Y件开发过E很快就陷入混ؕ之中QRUP描述?jin)如何控制、跟t、监控、修改以保成功的P代开发。RUP通过软g开发过E中的制品,隔离来自其他工作I间的变_(d)以此为每个开发h员徏立安全的工作I间?br />
二、统一软g开发过ERUP的二l开发模?/strong>
RUP软g开发生命周期是一个二l的软g开发模?/font>。横轴通过旉l织Q是q程展开的生命周期特征,体现开发过E的动态结构,用来描述它的术语主要包括周期(Cycle)、阶D?Phase)、P?Iteration)和里E碑(Milestone)Q纵轴以内容来组lؓ(f)自然的逻辑zdQ体现开发过E的?rn)态结构,用来描述它的术语主要包括zd(Activity)、?Artifact)、工作?Worker)和工作流(Workflow)?br />
三、统一软g开发过ERUP核心(j)概念
(tng) (tng) (tng) (tng) (tng) 角色Q描q某个h或者一个小l的行ؓ(f)与职责。RUP预先定义?jin)很多角艌Ӏ?br /> (tng) (tng) (tng) (tng) (tng) zdQ是一个有明确目的的独立工作单元?br /> (tng) (tng) (tng) (tng) (tng) 工gQ是zd生成、创建或修改的一D信息?br />
四、统一软g开发过ERUP裁剪
(tng) (tng) (tng) (tng) (tng) RUP是一个通用的过E模板,包含?jin)很多开发指南、制品、开发过E所涉及(qing)到的角色说明Q由于它非常庞大所以对具体的开发机构和目Q用RUP时还要做裁剪Q也是要对RUPq行配置。RUP像一个元q程Q通过对RUPq行裁剪可以得到很多不同的开发过E,q些软g开发过E可以看作RUP的具体实例。RUP裁剪可以分ؓ(f)以下几步Q?/p>
1) 定本项目需要哪些工作流。RUP?个核?j)工作流q不L需要的Q可以取舍?/p>
2) 定每个工作需要哪些制品?/p>
3) 定4个阶D之间如何演q。确定阶D间演进要以风险控制为原则,军_每个阶段要那些工作流Q每个工作流执行C么程度,制品有那些,每个制品完成C么程度?/p>
4) 定每个阶段内的q代计划。规划RUP?个阶D中每次q代开发的内容?/p>
5) 规划工作内部结构。工作流涉及(qing)角色、活动及(qing)制品Q他的复杂程度与目规模卌色多有兟뀂最后规划工作流的内部结构,通常用活动图的Ş式给出?br />
五、开发过E中的各个阶D和里程?/strong>
RUP中的软g生命周期在时间上被分解ؓ(f)四个序的阶D,分别是:(x)初始阶段(Inception)、细化阶D?Elaboration)、构造阶D?Construction)和交付阶D?Transition)。每个阶D늻束于一个主要的里程?Major Milestones)Q每个阶D|质上是两个里E碑之间的时间跨度。在每个阶段的结执行一ơ评C定q个阶段的目标是否已l满뀂如果评估结果o(h)人满意的话,可以允许目q入下一个阶Dc(din)?
1Q?初始阶段
初始阶段的目标是为系l徏立商业案例ƈ定目的边界。ؓ(f)?jin)达到该目的必须识别所有与pȝ交互的外部实体,在较高层ơ上定义交互的特性。本阶段h非常重要的意义,在这个阶D中所x的是整个目q行中的业务和需求方面的主要风险。对于徏立在原有pȝ基础上的开发项目来Ԍ初始阶段可能很短?初始阶段l束时是W一个重要的里程:(x)生命周期目标(Lifecycle Objective)里程。生命周期目标里E碑评h(hun)目基本的生存能力?/p>
2Q?l化阶段
l化阶段的目标是分析问题领域Q徏立健全的体系l构基础Q编刉目计划,淘汰目中最高风险的元素。ؓ(f)?jin)达到该目的Q必d理解整个pȝ的基上,对体pȝ构作出决{,包括其范围、主要功能和诸如性能{非功能需求。同时ؓ(f)目建立支持环境Q包括创建开发案例,创徏模板、准则ƈ准备工具?l化阶段l束时第二个重要的里E碑Q生命周期结?Lifecycle Architecture)里程。生命周期结构里E碑为系l的l构建立?jin)管理基准ƈ佉K目小l能够在构徏阶段中进行衡量。此刻,要检验详l的pȝ目标和范围、结构的选择以及(qing)主要风险的解x案?/p>
3Q?构造阶D?
在构建阶D,所有剩余的构g和应用程序功能被开发ƈ集成Z品,所有的功能被详l测试。从某种意义上说Q构建阶D|一个制造过E,光Ҏ(gu)在管理资源及(qing)控制q作以优化成本、进度和质量?构徏阶段l束时是W三个重要的里程:(x)初始功能(Initial Operational)里程。初始功能里E碑军_?jin)品是否可以在试环境中进行部|Ӏ此刻,要确定Y件、环境、用h否可以开始系l的q作。此时的产品版本也常被称为“beta”版?/p>
4Q?交付阶段
交付阶段的重Ҏ(gu)保软gҎ(gu)l用h可用的。交付阶D可以跨几ơP代,包括为发布做准备的品测试,Z用户反馈的少量的调整。在生命周期的这一点上Q用户反馈应主要集中在品调_(d)讄、安装和可用性问题,所有主要的l构问题应该已经在项目生命周期的早期阶段解决?jin)?在交付阶D늚l点是第四个里程:(x)产品发布(Product Release)里程。此Ӟ要确定目标是否实玎ͼ是否应该开始另一个开发周期。在一些情况下q个里程可能与下一个周期的初始阶段的结束重合?br />
六、统一软g开发过ERUP的核?j)工作?Core Workflows)
RUP中有9个核?j)工作流Q分?个核?j)过E工作流(Core Process Workflows)?个核?j)支持工作?Core Supporting Workflows)。尽?个核?j)过E工作流可能使h惌v传统瀑布模型中的几个阶段Q但应注意P代过E中的阶D|完全不同的,q些工作在整个生命周期中一ơ又一ơ被讉K?个核?j)工作流在项目中轮流被用,在每一ơP代中以不同的重点和强度重复?/p>
1Q?商业建模(Business Modeling)
(tng) (tng) (tng) (tng) (tng) 商业建模工作描qC(jin)如何为新的目标组l开发一个构惻Iq基于这个构惛_商业用例模型和商业对象模型中定义l织的过E,角色和责仅R?
2Q?需?Requirements)
需求工作流的目标是描述pȝ应该做什么,q开发h员和用户p一描述达成p。ؓ(f)?jin)达到该目标Q要寚w要的功能和约束进行提取、组l、文档化Q最重要的是理解pȝ所解决问题的定义和范围?/p>
3Q?分析和设?Analysis & Design)
分析和设计工作流需求{化成未来pȝ的设计,为系l开发一个健壮的l构q调整设计其与实现环境相匹配,优化其性能。分析设计的l果是一个设计模型和一个可选的分析模型。设计模型是源代码的抽象Q由设计cd一些描q组成。设计类被组l成h良好接口的设计包(Package)和设计子pȝ(Subsystem)Q而描q则体现?jin)类的对象如何协同工作实现用例的功能?设计zd以体pȝ构设计ؓ(f)中心(j)Q体pȝ构由若干l构视图来表达,l构视图是整个设计的抽象和简化,该视图中省略?jin)一些细节,佉K要的特点体现得更加清晰。体pȝ构不仅仅是良好设计模型的承蝲媒介Q而且在系l的开发中能提高被创徏模型的质量?
4Q?实现(Implementation)
实现工作的目的包括以层ơ化的子pȝ形式定义代码的组l结构;以组件的形式(源文件、二q制文g、可执行文g)实现cd对象Q将开发出的组件作为单元进行测试以?qing)集成由单个开发者(或小l)(j)所产生的结果,使其成ؓ(f)可执行的pȝ?
5Q?试(Test)
试工作要验证对象间的交互作用Q验证Y件中所有组件的正确集成Q检验所有的需求已被正的实现, 识别q确 认缺陷在软g部v之前被提出ƈ处理。RUP提出?jin)P代的Ҏ(gu)Q意味着在整个项目中q行试Q从而尽可能早地发现~陷Q从Ҏ(gu)上降低了(jin)修改~陷的成本。测试类g三维模型Q分别从可靠性、功能性和pȝ性能来进行?/p>
6Q?部v(Deployment)
部v工作的目的是成功的生成版本q将软g分发l最l用戗部|工作流描述?jin)那些与保软g产品Ҏ(gu)l用户具有可用性相关的zdQ包括:(x)软g打包、生成Y件本w以外的产品、安装Y件、ؓ(f)用户提供帮助。在有些情况下,q可能包括计划和q行beta试版、移植现有的软g和数据以?qing)正式验收?/p>
7Q?配置和变更管?Configuration & Change Management)
配置和变更管理工作流描绘?jin)如何在多个成员l成的项目中控制大量的物。配|和变更理工作提供了(jin)准则来管理演化系l中的多个变体,跟踪软g创徏q程中的版本。工作流描述?jin)如何管理ƈ行开发、分布式开发、如何自动化创徏工程。同时也阐述?jin)对产品修改原因、时间、h员保持审计记录?/p>
8Q?目理(Project Management)
软g目理q各种可能产生冲突的目标,理风险Q克服各U约束ƈ成功交付使用h意的产品。其目标包括Qؓ(f)目的管理提供框Ӟ划、h员配备、执行和监控目提供实用的准则,为管理风险提供框架等?/p>
9Q?环境(Environment)
环境工作的目的是向软g开发组l提供Y件开发环境,包括q程和工兗环境工作流集中于配|项目过E中所需要的zdQ同样也支持开发项目规范的zdQ提供了(jin)逐步的指导手册ƈ介绍?jin)如何在l织中实现过E?br />
七、RUP的P代开发模?/strong>
RUP中的每个阶段可以q一步分解ؓ(f)q代。一个P代是一个完整的开发@环,产生一个可执行的品版本,是最l品的一个子集,它增量式地发展,从一个P代过E到另一个P代过E到成ؓ(f)最l的pȝ?传统上的目l织是顺序通过每个工作,每个工作只有一ơ,也就是我们熟(zhn)的瀑布生命周期。这样做的结果是到实现末期品完成ƈ开始测试,在分析、设计和实现阶段所遗留的隐藏问题会(x)大量出现Q项目可能要停止q开始一个O长的错误修正周期?br /> (tng) (tng) (tng) (tng) 一U更灉|Q风险更的Ҏ(gu)是多ơ通过不同的开发工作流Q这样可以更好的理解需求,构造一个健壮的体系l构Qƈ最l交付一pd逐步完成的版本。这叫做一个P代生命周期。在工作中的每一ơ顺序的通过UCؓ(f)一ơP代。Y件生命周期是q代的连l,通过它,软g是增量的开发。一ơP代包括了(jin)生成一个可执行版本的开发活动,q有使用q个版本所必需的其他辅助成分,如版本描q、用h档等。因此一个开发P代在某种意义上是在所有工作流中的一ơ完整的l过Q这些工作流臛_包括Q需求工作流、分析和设计工作、实现工作流、测试工作流。其本n像一个小型的瀑布目?br /> (tng) (tng) (tng) (tng) 与传l的瀑布模型相比较,q代q程h以下优点Q?/p>
降低?jin)在一个增量上的开支风险。如果开发h员重复某个P代,那么损失只是q一个开发有误的q代的花贏V?/p>
降低?jin)品无法按照既定进度进入?jng)场的风险。通过在开发早期就定风险Q可以尽早来解决而不至于在开发后期匆匆忙忙?
加快?jin)整个开发工作的q度。因为开发h员清楚问题的焦点所在,他们的工作会(x)更有效率?/p>
׃用户的需求ƈ不能在一开始就作出完全的界定,它们通常是在后箋阶段中不断细化的。因此,q代q程q种模式佉K应需求的变化?x)更?gu)些?br />
八、统一软g开发过ERUP的十大要?/strong>
1. 开发前?
2. 达成计划
3. 标识和减风?
4. 分配和跟tQ务。?
5. (g)查商业理?
6. 设计lg构架
7. 对品进行增量式的构建和试
8. 验证和评L(fng)?
9. 理和控制变?
10. 提供用户支持
让我们逐一的审视这些要素,看一看它们什么地斚w合QԌQͼ扑և它们能够成ؓ(f)十大要素的理由?br /> (tng)
1. 开发一个前?/strong>
(tng) (tng) (tng) (tng) (tng) 有一个清晰的前景是开发一个满x众真正需求的产品的关键?前景抓住?jin)RQP需求流E的要点Q分析问题,理解涉众需求,定义pȝQ当需求变化时理需求?前景l更详细的技术需求提供了(jin)一个高层的、有时候是合同式的基础。正像这个术语隐含的那样Q它是Y仉目的一个清晰的、通常是高层的视图Q能被过E中M决策者或者实施者借用。它捕获?jin)非帔R层的需求和设计U束Q让前景的读者能理解要开发的pȝ。它q提供了(jin)目审批程的输入,因此׃商业理由密切相关。最后,׃前景构成?jin)“项目是什么?”和“ؓ(f)什么要q行q个目Q”,所以可以把前景作ؓ(f)验证来决策的方式之一?对前景的陈述应该能回{以下问题,需要的话这些问题还可以分成更小、更详细的问题:(x) ? 关键术语是什么?Q词汇表Q?? 我们试解决的问题是什么?Q问题陈qͼ(j) ? 涉众是谁Q用h谁?他们各自的需求是什么? ? 产品的特性是什么? ? 功能性需求是什么?QUse Qases)(j) ? 非功能性需求是什么? ? 设计U束是什么?
2. 达成计划
(tng) (tng) (tng) (tng) (tng) (tng) (tng) “品的质量只会(x)和品的计划一样好。?(2) 在RQP中,软g开发计划(QIQͼ(j)l合?jin)管理项目所需的各U信息,也许?x)包括一些在先启阶段开发的单独的内宏VSDP必须在整个项目中被维护和更新?QIQ定义了(jin)目旉表(包括目计划和P代计划)(j)和资源需求(资源和工P(j)Q可以根据项目进度表来跟t项目进展。同时也指导?jin)其他过E内容(原文Qprocess componentsQ的计划Q项目组l、需求管理计划、配|管理计划、问题解册划、QA计划、测试计划、评估计划以?qing)品验收计划?
(tng) (tng) (tng) (tng) (tng) 在较单的目中,对这些计划的陈述可能只有一两句话。比如,配置理计划可以单的q样陈述Q每天结束时Q项目目录的内容会(x)被压~成ZIP包,拯C个ZIP盘中,加上日期和版本标{,攑ֈ中央档案柜中?软g开发计划的格式q远没有计划zd本n以及(qing)驱动q些zd的思想重要。正如Dwight D.Eisenhower所_(d)(x)“plan什么也不是Qplanning才是一切。?“达成计划”—和列表中第3???条一起—抓住了(jin)RUP中项目管理流E的要点。项目管理流E包括以下活动:(x)构思项目、评估项目规模和风险、监与控制目、计划和评估每个q代和阶Dc(din)?
3. 标识和减风?/strong>
(tng) (tng) (tng) (tng) (tng) RUP的要点之一是在目早期标识ƈ处理最大的风险。项目组标识的每一个风险都应该有一个相应的~解或解册划。风险列表应该既作ؓ(f)目zd的计划工P又作为确定P代的基础?
4. 分配和跟tQ?/strong>
(tng) (tng) (tng) (tng) (tng) 有一点在M目中都是重要的Q即q箋的分析来源于正在q行的活动和q化的品的客观数据。在RUP中,定期的项目状态评估提供了(jin)讲述、交和解决理问题、技术问题以?qing)项目风险的机制。团队一旦发C(jin)q些障碍物(qQ,他们把所有这些问题都指定一个负责hQƈ指定解决日期。进度应该定期跟t,如有必要Q更新应该被发布。(原文Qupdates should be issued as necessary。)(j) q些目“快照”突Z(jin)需要引L(fng)理注意的问题。随着旉的变?虽然周期可能?x)变化(原文QWhile the period may vary。)(j)Q定期的评估使经理能捕获目的历Ԍq且消除M限制q度的障或瓉?
5. (g)查商业理?/strong>
(tng) (tng) (tng) (tng) (tng) 商业理由从商业的角度提供?jin)必要的信息Q以军_一个项目是否值得投资。商业理p可以帮助开发一个实现项目前景所需的经计划。它提供?jin)进行项目的理由Qƈ建立l济U束。当目l箋Ӟ分析人员用商业理由来正确的估投资回报率(ROIQ即return on investment)?商业理由应该l项目创Z个简短但是引人注目的理由Q而不是深入研I题的l节Q以使所有项目成员容易理解和C它。在关键里程处Q经理应该回֕业理由,计算实际的花贏V预计的回报Q决定项目是否l进行?
6. 设计lg构架
(tng) (tng) (tng) (tng) (tng) 在RUP中,件系l的构架是指一个系l关键部件的l织或结构,部g之间通过接口交互Q而部件是׃些更的部g和接口组成的。即主要的部分是什么?他们又是怎样l合在一L(fng)Q?RUP提供?jin)一U设计、开发、验证构架的很系l的Ҏ(gu)。在分析和设计流E中包括以下步骤Q定义候选构架、精化构架、分析行为(用例分析Q、设计组件?要陈q和讨论软g构架Q你必须先创Z个构架表C方式,以便描述构架的重要方面。在RUP中,构架表示pY件构架文档捕P它给构架提供?jin)多个视图。每个视N描述?jin)某一l涉众所兛_(j)的正在进行的pȝ的某个方面。涉众有最l用戗设计h员、经理、系l工E师、系l管理员Q等{。这个文档ɾpȝ构架师和其他目l成员能׃构架相关的重大决{进行有效的交流?
7. 对品进行增量式的构建和试
(tng) (tng) (tng) (tng) (tng) 在RUP中实现和试程的要Ҏ(gu)在整个项目生命周期中增量的编码、构建、测试系l组Ӟ在先启之后每个P代结束时生成可执行版本。在_阶段后期Q已l有?jin)一个可用于评估的构架原型;如有?要,它可以包括一个用L(fng)面原型。然后,在构建阶D늚每次q代中,lg不断的被集成到可执行、经q测试的版本中,不断地向最l品进化。动态及(qing)时的配置理和复审活动也是这个基本过E元素(原文Qessential process elementQ的关键?
8. 验证和评L(fng)?/strong>
(tng) (tng) (tng) (tng) (tng) 思义QRUP的P代评估捕获了(jin)q代的结果。评估决定了(jin)q代满评h(hun)标准的程度,q包括学到的教训和实施的q程改进?Ҏ(gu)目的规模和风险以及(qing)q代的特点,评估可以是对演示?qing)其l果的一条简单的U录Q也可能是一个完整的、正式的试复审记录?q儿的关键是既关注过E问题又x产品问题。越早发现问题,p没有问题。(原文QThe sooner you fall behind, the more time you will have to catch up.Q?
9. 理和控制变?/strong>
(tng) (tng) (tng) (tng) (tng) RUP的配|和变更理程的要Ҏ(gu)当变化发生时理和控刉目的规模Qƈ且诏I整个生命周期。其目的是考虑所有的涉众需求,可能的满Q同时仍能及(qing)时的交付合格的品?用户拿到产品的第一个原型后Q往往在这之前׃(x)要求变更Q,他们?x)要求变更。重要的是,变更的提出和理q程始终保持一致?在RUP中,变更h通常用于记录和跟t缺陷和增强功能的要求,或者对产品提出的Q何其他类型的变更h。变更请求提供了(jin)相应的手D|评估一个变更的潜在影响Q同时记录就q些变更所作出的决{。他们也帮助保所有的目l成员都能理解变更的潜在影响?
10. 提供用户支持
(tng) (tng) (tng) (tng) (tng) 在RUP中,部v程的要Ҏ(gu)包装和交付品,同时交付有助于最l用户学?fn)、用和l护产品的Q何必要的材料?目l至要l用h供一个用h南(也许是通过联机帮助的方式提供)(j)Q可能还有一个安装指南和版本发布说明?Ҏ(gu)产品的复杂度Q用户也许还需要相应的培训材料。最后,通过一个材料清单(BOM表,即Bill of MaterialsQ清楚地记录应该和品一起交付哪些材料?关于需?有h看了(jin)我的要素清单后,可能?x)非怸同意我的选择。例如,他会(x)问,需求在哪儿呢?他们不重要吗Q我?x)告诉他我?f)什么没有把它们包括q来。有Ӟ我会(x)问一个项目组Q特别是内部目的项目组Q:(x)“你们的需求是什么?”,而得到的回答却是Q“我们的没有什么需求。?刚开始我Ҏ(gu)非常惊讶Q我有军方的宇航开发背景)(j)。他们怎么?x)没有需求呢Q当我进一步询问时Q我发现Q对他们来说Q需求意味着一套外部提出的强制性的陈述Q要求他们必L么P否则目验收׃能通过。但是他们的没有得到这L(fng)陈述。尤其是当项目组陷入?jin)边研究边开发的境地Ӟ产品需求从头到N在演化?因此Q我接着问他们另外一个问题:(x)“好的,那么你们的品的前景是什么呢Q”。这时他们的眼睛亮了(jin)h。然后,我们非常利的就W一个要素(“开发一个前景”)(j)中列出的问题q行?jin)沟通,需求也自然而然的流动着Q原文:(x)and the requirements just flow naturally.Q?也许只有对于按照有明需求的合同工作的项目组Q在要素列表中加入“满需求”才是有用的。请CQ我的清单仅仅意味着q行q一步讨论的一个v炏V?
?ji)、ȝ
RUPh很多长处Q提高了(jin)团队生力,在P代的开发过E、需求管理、基于组件的体系l构、可视化软g建模、验证Y件质量及(qing)控制软g变更{方面,针对所有关键的开发活动ؓ(f)每个开发成员提供了(jin)必要的准则、模板和工具指导Qƈ保全体成员׃n相同的知识基。它建立?jin)简z和清晰的过E结构,为开发过E提供较大的通用性。但同时它也存在一些不I(x) RUP只是一个开发过E,q没有涵盖Y件过E的全部内容Q例如它~少关于软gq行和支持等斚w的内容;此外Q它没有支持多项目的开发结构,q在一定程度上降低?jin)在开发组l内大范围实现重用的可能性。可以说RUP是一个非常好的开端,但ƈ不完,在实际的应用中可以根据需要对其进行改qƈ可以用OPEN和OOSP{其他Y件过E的相关内容对RUPq行补充和完善?/p>
一、Y件生命周?SDLC)的六个阶D?/strong>
1、问题的定义?qing)规?br /> (tng) (tng) (tng) (tng) (tng) 此阶D|软g开发方与需求方共同讨论Q主要确定Y件的开发目标及(qing)其可行性?/font>
2、需求分?br /> (tng) (tng) (tng) (tng) (tng) 在确定Y件开发可行的情况下,对Y仉要实现的各个功能q行详细分析。需求分析阶D|一个很重要的阶D,q一阶段做得好,ؓ(f)整个软g开发项目的成功打下良好的基?唯一不变的是变化本n?Q同样需求也是在整个软g开发过E中不断变化和深入的Q因此我们必d定需求变更计划来应付q种变化Q以保护整个目的顺利进行?br />
3、Y件设?br /> (tng) (tng) (tng) (tng) (tng) 此阶D主要根据需求分析的l果Q对整个软gpȝq行设计Q如pȝ框架设计Q数据库设计{等。Y件设计一般分为M设计和详l设计。好的Y件设计将Y件程序编写打下良好的基础?br />
4、程序编?br /> (tng) (tng) (tng) (tng) (tng) 此阶D|Y件设计的l果转换成计机可运行的E序代码。在E序~码中必要制定l一Q符合标准的~写规范。以保证E序的可L,易维护性,提高E序的运行效率?/font>
5、Y件测?br /> (tng) (tng) (tng) (tng) (tng) 在Y件设计完成后要经q严密的试Q以发现软g在整个设计过E中存在的问题ƈ加以U正。整个测试过E分单元试、组装测试以?qing)系l测试三个阶D进行。测试的Ҏ(gu)主要有白盒测试和黑盒试两种。在试q程中需要徏立详l的试计划q严格按照测试计划进行测试,以减测试的随意性?br />
6、运行维?br /> (tng) (tng) (tng) (tng) (tng) 软gl护是Y件生命周期中持箋旉最长的阶段。在软g开发完成ƈ投入使用后,׃多方面的原因QY件不能l适应用户的要求。要延箋软g的用寿命,必d软gq行l护。Y件的l护包括U错性维护和改进性维护两个方面?/font>
二、Y件生命周期模?/strong>
M软g都是从最模糊的概念开始的Qؓ(f)某个公司设计办公的流E处理;设计一U商务信函打印系lƈ投放?jng)场。这个概忉|不清晰的Q但却是最高层的业务需求的原型。这个概念都?x)伴随着一个目的,例如在一?银行押汇pȝ" 的目的是提高工作的效率。这个目的将?x)成为系l的核心(j)思想Q系l成败的评判标准?9q政府部门上?jin)大量的OApȝQ学q一点Lotus Notes的h都发?jin)?ch)QIBM更不用说?jin)?j)Q但是更普遍的情冉|Q许多的政府部门原有的处理模式ƈ没有变化Q反而又加上?jin)自动化处理的一套流E。提高工作效率的初衷却导致了(jin)完全不同的结果。这L(fng)软gI竟是不是成功的呢?
从概忉|出的那一d始,软g产品p入了(jin)软g生命周期。在l历需求、分析、设计、实现、部|后QY件将被用ƈq入l护阶段Q直到最后由于缺维护费用而逐渐消亡。这L(fng)一个过E,UCؓ(f)"生命周期模型"QLife Cycle ModelQ?
典型的几U生命周期模型包括瀑布模型、快速原型模型、P代模型?br />
(tng) (tng) (tng) (tng) (tng) (tng)瀑布模型QWaterfall ModelQ首先由Royce提出。该模型׃酷似瀑布d。在该模型中Q首先确定需求,q接受客户和SQA组的验证。然后拟定规D明,同样通过验证后,q入计划阶段…可以看出,瀑布模型中至关重要的一Ҏ(gu)只有当一个阶D늚文档已经~制好ƈ获得SQA组的认可才可以q入下一个阶Dc(din)这P瀑布模型通过强制性的要求提供规约文档来确保每个阶D都能很好的完成d。但是实际上往往难以办到Q因为整个的模型几乎都是以文档驱动的Q这对于非专业的用户来说是难以阅d理解的。想象一下,你去买衣服的时候,售货员给你出C的是一本厚厚的服装规格说明Q你?x)有什么样的感触。虽然瀑布模型有很多很好的思想可以借鉴Q但是在q程能力上有天生的缺陗?br />
(tng) (tng) (tng) (tng) (tng) (tng)q代式模型是RUP推荐的周期模型,也是我们在这个系列文章讨论的基础。在RUP中,q代被定义ؓ(f)QP代包括生品发布(E_、可执行的品版本)(j)的全部开发活动和要用该发布必需的所有其他外围元素。所以,在某U程度上Q开发P代是一ơ完整地l过所有工作流E的q程Q(臛_包括Q需求工作流E、分析设计工作流E、实施工作流E和试工作程。实质上Q它cM型的瀑布式项目。RUP认ؓ(f)Q所有的阶段Q需求及(qing)其它Q都可以l分P代。每一ơ的q代都会(x)产生一个可以发布的产品Q这个品是最l品的一个子?br />
(tng) (tng) (tng) (tng) (tng) (tng)q代和瀑布的最大的差别在于风险的暴露旉上?M目都会(x)涉及(qing)C定的风险。如果能在生命周期中早保避免?jin)风险,那么?zhn)的计划自然?x)更精。有许多风险直到已准备集成系l时才被发现。不开发团队经验如何,都绝不可能预知所有的风险
(tng) (tng) (tng) (tng) (tng) (tng)׃瀑布模型的特点(文档是主体)(j)Q很多的问题在最后才?x)暴露出来,Z(jin)解决q些问题的风险是巨大的?在P代式生命周期中,(zhn)需要根据主要风险列表选择要在q代中开发的新的增量内容。每ơP代完成时都会(x)生成一个经q测试的可执行文Ӟq样可以核实是否已l降低了(jin)目标风险?
快速原型(Rapid PrototypeQ模型是我喜Ƣ采用的另一U模型。快速原型模型在功能上等价于产品的一个子集。注意,q里说的是功能上。瀑布模型的缺点就在于不够直观Q快速原型法p决了(jin)q个问题。一般来_(d)Ҏ(gu)客户的需要在很短的时间内解决用户最q切需要,完成一个可以演C的产品。这个品只是实现部分的功能Q最重要的)(j)。它最重要的目的是Z(jin)定用户的真正需求。在我的l验中,q种Ҏ(gu)非常的有效,原先对计机没有丝毫概念的用户在你的原型面前往往口若(zhn)河Q有些观点让你都觉得非常的吃惊。在得到用户的需求之后,原型被抛弃。因为原型开发的速度很快Q设计方面是几乎没有考虑的,如果保留原型的话Q在随后的开发中?x)?f)此付出极大的代h(hun)。至于保留原型方面,也是有一U叫做增量模型是q么做的Q但q种模型q不为大家所接受Q不在我们的讨论之内?
上述的模型中都有自己独特的思想Q其实现在的软gl织中很说标准的采用那一U模型的。模型和实用q是有很大的区别的?
软g生命周期模型的发展实际上是体C(jin)软g工程理论的发展。在最早的时候,软g的生命周期处于无序、q情况。一些hZ(jin)能够控制软g的开发过E,把软g开发严格的区分为多个不同的阶段Qƈ在阶D间加上严格的审查。这是瀑布模型产生的v因。瀑布模型体现?jin)h们对软gq程的一个希望:(x)严格控制、确保质量。可惜的是,现实往往是残L(fng)。瀑布模型Ҏ(gu)达不到这个过高的要求Q因Y件的q程往往难于预测。反而导致了(jin)其它的负面媄(jing)响,例如大量的文档、繁琐的审批。因此h们就开始尝试着用其它的Ҏ(gu)来改q或替代瀑布Ҏ(gu)。例如把q程l分来增加过E的可预性?br />
(tng) (tng) (tng) (tng) (tng) XP实际上是一U经历过很多实践考验的一UY件开发的Ҏ(gu)Q它诞生?jin)大概? q_(d)它已l被成功的应用在许多大型的公司,如:(x)Bayeris che LandesbankQCredit Swis s LifeQDaimlerChryslerQFirst Union National Bank Ford Motor Company and UBS.XP 的成功得益于它对客户满意度的特别QXP 是以开发符合客户需要的软g为目标而生的一U方法论QXP 使开发者能够更有效的响应客L(fng)需求变化,哪怕在软g生命周期的后期?/font>
同时QXP 也很团队合作。团队包括:(x)目l理Q客P开发者。他们团l在一h保证高质量的软g。XP 其实是一U保证成功的团队开发的单而有效的Ҏ(gu)?
XP 四种价|(x)交流Q简易,回馈Q勇气。XP E序员之间紧密的怺交流QXP E序员也和客L(fng)密的交流。他们L保持他们的设计简单明?jin)。项目一开始,XP 强调通过对Y件的不断试来获得反馈,E序员尽可能早的把Y件交l客Pq实现客户对软g需求提出的变化Q有?jin)这些基QXP E序员就可以自信的面寚w求和软g技术的变化?/font>
XP 是与众不同的Q它有点象快步的舞蹈。XP 开发过E包括许多的卡片,独立的看Q这些小卡片没有什么意义,但是当它们组合在一P一q完整的丽的图片就可以看见QXPҎ(gu)有别于传lY件开发,它是软g开发的一U新的重要的发展。它改变?jin)我们开发程序的传统思维方式。下面我们将介绍它带l我们那些改变?br /> (tng)
XP属于轻量开发方法中较有影响的一U方法。轻量开发方法是相对于传l的重量开发方法而言。简单地理解Q“量”的轻重是指用于软gq程理和控制的、除E序量以外的“文档量”的多少。XP{轻量开发方法认识到Q在当前很多情况下,按传l观念徏立的大量文档Q一斚w需要消耗大量开发资源,同时却已失去帮助“预见、管理、决{和控制的依据”的作用。因此必重新审视开发环节,去除臃肿累赘Q轻装上c(din)?/font>
一、XP的核?j)思想
(tng) (tng) (tng) (tng) (tng) 从长q看Q早期发现错误以?qing)降低复杂度可以节约成本。极限编E强调我们将d/pȝl分为可以在较短周期解决的一个个子Q?模块Qƈ且强调测试、代码质量和?qing)早发现问题。通常Q通过一个个短小的P代周期,我们可以获得一个个阶段性的q展Qƈ且可以及(qing)时Ş成一个版本供用户参考,以便?qing)时对用户可能的需求变更作出响应?/font>
二、XP的十二种Ҏ(gu)
(tng) (tng) (tng) (tng) (tng) 规划{略(The Planning Game)Q?br /> (tng) (tng) (tng) (tng) (tng) l对~程(Pair programming)
(tng) (tng) (tng) (tng) (tng) 试(Testing)
(tng) (tng) (tng) (tng) (tng) 重构(Refractoring)
(tng) (tng) (tng) (tng) (tng) 单设?Simple Design)
(tng) (tng) (tng) (tng) (tng) 代码集体所有权(Collective Code Ownership)
(tng) (tng) (tng) (tng) (tng) 持箋集成(Continuous Integration)
(tng) (tng) (tng) (tng) (tng) 现场客户(On-site Customer)
(tng) (tng) (tng) (tng) (tng) 型发布QSmall ReleaseQ?br /> (tng) (tng) (tng) (tng) (tng) 每周40时工作Ӟ40-hour WeekQ?br /> (tng) (tng) (tng) (tng) (tng) ~码规范QCode StandardsQ?br /> (tng) (tng) (tng) (tng) (tng) pȝ隐喻QSystem MetaphorQ?
三、XP的四个核?j)h(hun)?/strong>
(tng) (tng) (tng) (tng) (tng) 极限~程中有四个核心(j)价值是我们在开发中必须注意的:(x)沟通(CommunicationQ、简单(SimplicityQ、反馈(F(tun)eedbackQ和勇气QCourageQ?
XP用“沟通、简单、反馈和勇气”来减轻开发压力和包袱Q无论是术语命名、专著叙q内容和方式、过E要求,都可以从中感受到L愉快和主动奋发的态度和气氛。这是一U帮助理解和更容易激发h的潜力的手段。XP用自q实践Q在一定范围内成功地打破了(jin)软g工程“必重量”才能成功的传统观念?/font>
XP_可以启发我们如何学习(fn)和对待快速变化、多L(fng)开发技术。成功学?fn)XP的关键,是用“沟通、简单、反馈和勇气”的态度来对待XPQ轻松愉快地来感受XP的实跉|想Q自p真实践后Q通过对真实反馈的分析Q来军_XP对自q价|有勇气接受它Q或改进它?/font>
四、XP 带给我们的变?/strong>
通过软g工程设计的简单而优的软gq不比那些设计复杂而难以维护的软g有h(hun)倹{这是真的吗QXP认ؓ(f)事实q如此?/font>
一个典型的目花在人力上的金钱是花在硬件上的时间的20 倍,q意味着一个项目每q要?00 万美元在E序员n上,而仅仅花10 万美元在?sh)脑讑֤上。很多聪明的E序员说Q“我们如此聪明,发现一U方法可以节?0%的硬件开销”,然后他们使得源程序大而且难懂和难以维护,他们?x)说Q“但是我们节省了(jin)20%或? 万美元每q_(d)很大的节省”。反之,如果我们写我们的E序单而且Ҏ(gu)扩展Q我们将臛_节省10%的h力开销Q一W更大的节省Q这是你客户一定会(x)注意到的一些事情?/font>
另外一个对客户来说很重要的问题是E序的BUGS 。XP 不只是强调测试,而且要求正确的测试。测试必L能自动进行的Q以便ؓ(f)E序和客h供一个安全的环境。在~码的所有阶D,我们不断增加试用例。当扑ֈbug Ӟ我们添加新的测试,一个紧密的安全|就q样产生?jin)。同一个BUG 不出Cơ,q些一定会(x)引v用户的注意。你的客户必L意的另外一件事情:(x)XP 开发者拥抱需求变化。XP 使我们能够接受需求的变化?/font>
一般情况下Q客户只有在pȝ被开发完成以后能真正M?x)它。XP 却不一P它通过加强客户的反馈来~短开发的周期Q同时获得够的旉来改变功能和获得用户的认同。在XP 中,你的客户应该明确的知道这一炏V?/font>
XP开发过E的大多的革命是在Y件开发的Ҏ(gu)上,代码质量的重要程度超Zh们一般所认ؓ(f)的。仅仅因为我们的客户不能明白我们的源代码q不意味着我们可以不努力去理代码的质量?/font>
五、我们什么时候用XP
XPҎ(gu)的生是因ؓ(f)难以理的需求变化,从一开始你的客户ƈ不是很完全的知道他们要的pȝ是怎么L(fng)Q你可能面对的系l的功能一个月变化多次。在大多数Y件开发环境中不断变化的需求是唯一的不变,q个时候应用XP 可以取得别的方法不可能取得的成功。XP Ҏ(gu)的徏立同时也是ؓ(f)?jin)解册Y件开发项目中的风险问题。假如你的客户在特定的时间内Q需要一个相当难开发的pȝQ而且对于你的目l来_(d)q个pȝ是一个新的挑战(从来没有做过Q,那风险就更大?jin),如果q个pȝ对于整个软g行业来说都是新的挑战Q那么它的风险就更大?jin),采用XP 可以减风险,增加成功的可能?/font>
XPҎ(gu)是ؓ(f)团体开发徏立的Q在2-10 个h之间。假如你的团体恰好合适,你就不需要用其他的Y件工E方法了(jin)Q就用XP Q但是要注意你不能将XP Ҏ(gu)应用于大团体的开发项目中。我们应该注意,在需求一惯呈动态变化或者高h高风险的目中,你就?x)发现XP Ҏ(gu)在小团体的开发中的作用要q远高于在大团体的开发?/font>
XPҎ(gu)需要一个扩展的开发团体,XP 团体不仅仅包括开发者,l理、客户也是其中的一员,所有的工作一环扣一环,问问题,商讨Ҏ(gu)和日E,增加功能试Q这些问题的解决不仅仅涉?qing)到软g的开发者?/font>
另一个需要是可测试性,你必能增加自动的单元测试和功能试Q然而在你进行这个需求的时候,你会(x)发现有许多的问题很难试Q这需要充分发挥你的测试的l验和智慧,而且你有时还要改变你的设计以便它可以更容易的q行试。记住:(x)那儿有需求,那儿应该有试的方法?
在XPҎ(gu)的好处的清单上,最后一条是生力。在同样的合作环境下QXP 目都一致的表现出比使用其他Ҏ(gu)高的多的生力。但q从来不是XP Ҏ(gu)学的真正目标。XP 真实q求的目标是Q在规定的时间生产出满客户需要的软g。假如对于你的开发来_(d)q是很重要的斚wQ你可以选择XP ?jin)?/font>
六、极限编E的有效实践
1、完整团?
(tng) (tng) (tng) (tng) (tng) XP目的所有参与者(开发h员、客戗测试h员等Q一起工作在一个开攄场所中,他们是同一个团队的成员。这个场所的墙壁上随意(zhn)挂着大幅的、显著的图表以及(qing)其他一些显CZ们进度的东西?
2、计划游?
(tng) (tng) (tng) (tng) (tng) 计划是持l的、@序渐q的。每2周,开发h员就Z2周估候选特性的成本Q而客户则Ҏ(gu)成本和商务h(hun)值来选择要实现的Ҏ(gu)?
3、客h?
(tng) (tng) (tng) (tng) (tng) 作ؓ(f)选择每个所期望的特性的一部分Q客户可以根据脚本语a来定义出自动验收试来表明该Ҏ(gu)可以工作?
4、简单设?
(tng) (tng) (tng) (tng) (tng) 团队保持设计恰好和当前的pȝ功能相匹配。它通过?jin)所有的试Q不包含M重复Q表辑և?jin)编写者想表达的所有东西,q且包含可能少的代码?
5、结对编E?
(tng) (tng) (tng) (tng) (tng) 所有的产品软g都是׃个程序员、ƈ排坐在一起在同一台机器上构徏的?
6、测试驱动开?
(tng) (tng) (tng) (tng) (tng) ~写单元试是一个验证行为,更是一个设计行为。同P它更是一U编写文档的行ؓ(f)。编写单元测试避免了(jin)相当数量的反馈@环,其是功功能能验证方面的反馈循环。程序员以非常短的@环周期工作,他们先增加一个失败的试Q然后之通过?
7、改q设?
(tng) (tng) (tng) (tng) (tng) 随时利用重构Ҏ(gu)改进已经腐化的代码,保持代码可能的q净、具有表辑֊?
8、持l集?
(tng) (tng) (tng) (tng) (tng) 团队L使系l完整地被集成。一个h拆入QCheck inQ后Q其它所有h责Q代码集成?
9、集体代码所有权
(tng) (tng) (tng) (tng) (tng) Ml对的程序员都可以在M时候改qQ何代码。没有程序员对Q何一个特定的模块或技术单独负责,每个人都可以参与M其它斚w的开发?
10、编码标?
(tng) (tng) (tng) (tng) (tng) pȝ中所有的代码看v来就好像是被单独一人编写的?
11、隐?
(tng) (tng) (tng) (tng) (tng) 整个系l联pd一L(fng)全局视图Q它是系l的未来影像Q是它得所有单独模块的位置和外观变得明昄观。如果模块的外观与整个隐MW,那么你就知道该模块是错误的?
12、可持箋的速度
(tng) (tng) (tng) (tng) (tng) 团队只有持久才有莯的希望。他们以能够长期l持的速度努力工作Q他们保存精力,他们把项目看作是马拉N跑,而不是全速短跑?/font>
技术预研过E域?/span> SPP 模型的重要组成部分。本规范阐述?jin)技术预研的规程Q该规程的“目标”、“角色与职责”、“启动准则”、“输入”、“主要步骤”、“输出”、“完成准则”和“度量”均已定义?/span>
本规范适用于国?span lang="EN-US">IT企业的Y件研发项目。徏议用h据自w情况(如商业目标、研发实力等Q适当CҎ(gu)规范Q然后推q用?/span>
(tng) (tng) (tng) (tng) (tng) (tng) 在品开发过E中Q技术问题可能会(x)层出不穷。如果一Ҏ(gu)术障都没有遇到Q要么是开发h员的技术水q_在太高了(jin)Q要么是目的技术含量实在太低了(jin)Q这cL冉|较少见?/span>
一般说来,在设计或实现阶段遇到?jin)技术障,才去d问题Q其代h(hun)通常比较高。因为其他h的工作可能会(x)被阻塞,已经投入的不资源将被闲|。最p糕的是Q如果此技术障无法攻克,不得已要改变技术方案、重新设计系l,那么不仅费?jin)h力、胦(ch)力、时_(d)处理不好q会(x)使开发队伍陷入q态?/span>
(tng) (tng) (tng) (tng) (tng) (tng) 所以开展技术预研工作至有两大好处Q?/span>
̔ (tng) (tng) (tng) (tng) (tng) (tng) (tng) 帮助开发h员更好地q行需求开发、系l设计和E序设计?/span>
̔ (tng) (tng) (tng) (tng) (tng) (tng) (tng) 防止开发进E被技术障打断,D大量的相兛_作被d?/span>
技术预研的程如下?/span> 所C?/span>
制定计划Q-开展技术预研-Q?span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">撰写预研报告Q-工作成果介绍技术评?/span>?/font>
?/span> (tng)技术预研流E?/span>
2 技术预研规E?/font>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 提前发现q解军_发过E中会(x)遇到的技术障?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 目l理或技术负责h识别目中的技术难题,指定技术预研h员攻克该问题?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 目中的技术难题已l识别?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 技术预研h员已l指定?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 一些用户需求文档和技术方案文?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 技术预研h员制定《技术预研计划》,主要内容包括Q?/span>
(tng) (tng) (tng)̔ (tng) (tng) (tng) (tng) (tng) (tng) (tng) 定技术预研的内容和目标?/span>
(tng) (tng) (tng)̔ (tng) (tng) (tng) (tng) (tng) (tng) (tng) 定应递交的工作成果?/span>
(tng) (tng) (tng)̔ (tng) (tng) (tng) (tng) (tng) (tng) (tng) 分配dQ制定进度表?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 目l理或技术负责h审批该计划,如果该计划被批准Q则转向 [Step2] ?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 技术预研h员按照计划开展技术预研工作?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 在预研Q务结束时Q技术预研h员撰写《技术预研报告》?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 技术预研h员向相关人员介绍工作成果?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 目l理或技术负责h视具体情况决定是否对该预研成果进行技术评审?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 《技术预研报告?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 指定的预研Q务已l完成,《技术预研报告》已l生?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 技术预研h员统计工作量和工作成果的规模Q汇报给目l理?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 技术预研不同于真正地开发品,投入人员与时间相Ҏ(gu)较少。一个项目可以有多次技术预研,由项目经理或技术负责h视具体情况而定?/span>
(tng) (tng) (tng)l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) Ҏ(gu)术预研过E中产生的所有有价值的文档q行配置理?/span>