标题：软件过程
简介
软件过程（Software Process）是指一套关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关Artifacts（计划、文档、模型、编码、测试、手册等）组成。目前有三种方法：UP（the unified process），The OPEN Process，OOSP(The Object-Oriented Software Process)。 软件过程(Software Procedure)是指软件生存周期所涉及的一系列相关过程。过程是活动的集合；活动是任务的集合；任务要起着把输入进行加工然后输出的作用。活动的执行可以是顺序的、重复的、并行的、嵌套的或者是有条件地引发的。
软件过程可概括为三类：基本过程类、支持过程类和组织过程类。基本过程类包括获取过程、供应过程、开发过程、运作过程、维护过程和管理过程。支持过程类包括文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程以及问题解决过程。组织过程类包括基础设施过程、改进过程以及培训过程。
软件过程主要针对软件生产和管理进行研究。为了获得满足工程目标的软件，不仅涉及工程开发，而且还涉及工程支持和工程管理。对于一个特定的项目，可以通过剪裁过程定义所需的活动和任务，并可使活动并发执行。与软件有关的单位，根据需要和目标，可采用不同的过程、活动和任务。
软件过程是指软件整个生命周期，从需求获取，需求分析，设计，实现，测试，发布和维护一个过程模型。一个软件过程定义了软件开发中采用的方法，但软件工程还包含该过程中应用的技术——技术方法和自动化工具。过程定义一个框架，为有效交付软件工程技术，这个框架必须创建。软件过程构成了软件项目管理控制的基础，并且创建了一个环境以便于技术方法的采用、工作产品（模型、文档、报告、表格等）的产生、里程碑的创建、质量的保证、正常变更的正确管理。[1]
作用
有效的软件过程可以提高组织的生产能力： 
■理解软件开发的基本原则，可以帮我们做出明智的决定； 
■可以标准化你的工作，提高软件的可重用性和Team间的协作； 
■我们所采用的这种机制本身是不断提高的，我们可以跟上潮流，使自己不断接收新的、最好的软件开发经验； 
有效的软件过程可以改善我们对软件的维护： 
■有效地定义如何管理需求变更，在未来的版本中恰当分配变更部分，使之平滑过渡； 
■首先在具体操作和相关支持中定义如何平滑地改造软件，并且这种具体操作和支持是可实施的；不可实施的软件过程将很快被束之高阁； 
为什么要采用软件过程？归根结蒂，形势所逼！
实施软件过程的必要条件
CMM(Capability Maturity Modeling)作出了明确的定义(由The Software Engineering Institute提出 ，国内我就知道用友在实施中)
五个成熟等级
第一级初始级在初始级，企业一般不具备稳定的软件开发与维护的环境。常常在遇到问题的时候，就放弃原定的计划而只专注于编程与测试。处于这一等级的企业，成功与否在很大程度上决定于有杰出的项目经理与经验丰富的开发团队。因此，能否雇请到及保有能干的员工成了关键问题。项目成功与否非常不确定。虽然产品一般来说是可用的，但是往往有超经费与不能按期完成的问题。第二级可重复级在这一级，建立了管理软件项目的政策以及为贯彻执行这些政策而定的措施。基于过往的项目的经验来计划与管理新的项目。企业实行了基本的管理控制。符合实际的项目承诺是基于以往项目以及新项目的具体要求而作出的。项目经理不断监视成本、进度和产品功能，及时发现及解决问题以便实现所作的各项承诺。 
通过具体地实施这一级的各个关键过程领域的要求，企业实现了过程的规范化、稳定化。因而，曾经取得过的成功成为可重复达到的目标。第三级定义级在这一级，有关软件工程与管理工程的一个特定的、面对整个企业的软件开发与维护的过程的文件将被制订出来。同时，这些过程是集成到一个协调的整体。这就称为企业的标准软件过程。 
这些标准的过程是用于帮助管理人员与一般成员工作得更有效率。如果有适当的需要，也可以加以修改。在这个把过程标准化的努力当中，企业开发出有效的软件工程的各种实践活动。 
同时，一个在整个企业内施行的培训方案将确保工作人员与管理人员都具备他们所需要的知识与技能。 
非常重要的一点是，项目小组要根据该项目的特点去改编企业的标准软件过程来制订出为本项目而定义的过程。 
一个定义得很清楚的过程应当包括：准备妥当的判据，输入，完成工作的标准和步骤，审核的方法，输出和完成的判据。因为过程被定义得很清楚，因此管理层就能对所有项目的技术过程有透彻的了解。第四级定量管理级在这一级，企业对产品与过程建立起定量的质量目标，同时在过程中加入规定得很清楚的连续的度量。作为企业的度量方案，要对所有项目的重要的过程活动进行生产率和质量>　一个企业范围的数据库被用于收集与分析来自各项目的过程的数据。这些度量建立起了一个评价项目的过程与产品的定量的依据。项目小组可以通过缩小他们的效能表现的偏差使之处于可接受的定量界限之内，从而达到对过程与产品进行控制的目的。 
因为过程是稳定的和经过度量，所以在有意外情况发生时，企业能够很快辨别出特殊的原因并加以处理第五级（不断）优化级在这个等级，整个企业将会把重点放在对过程进行不断的优化。企业会采取主动去找出过程的弱点与长处，以达到预防缺陷的目标。同时，分析有关过程的有效性的资料，作出对新技术的成本与收益的分析，以及提出对过程进行修改的建议。整个企业都致力于探索最佳软件工程实践的创新。 
项目小组分析引起缺陷的原因，对过程进行评鉴与改进，以便预防已发生的缺陷再度发生。同时，也把从中学到的经验教训传授给其他项目。 
降低浪费与消耗也是这个等级的一个重点。 
处于这一等级的企业的软件过程能力可被归纳为不断的改进与优化。它们以两种形式进行。一种是逐渐地提升现存过程，另一种是对技术与方法的创新。虽然在其他的能力成熟度等级之中，这些活动也可能发生，但是在优化级，技术与过程的改进是作为常规的工作一样，有计划地在管理之下实行的。
关键过程领域
第一级：初始级（Level1: Initial）（无关键过程区域）第二级：可重复级■需求管理（Requirements Management） 
需求管理的目的是建立和维护用户和软件项目间的关于该软件如何实现用户需求的共识。 
需求管理包括： 
a. 建立和维护分配该给软件项目的需求的基线。 
b.核查该软件项目的计划，活动和正在开发中的产品以确保它们是与分配该给软件项目的需求一致。 
■软件项目计划（Software Project Planning） 
软件计划的目的是建立合理的计划用作软件开发与软件项目控制。 
软件计划包含： 
a.选择一种软件生命周期
b.建立一个开发工作的分解构造 
c.对与开发工作有关的、重要的计划参数进行估计。 
d.识别软件项目的风险。 
e.作出必要的承诺。 
f.制订软件开发工作的计划。 
■软件项目控制（Software Project Control） 
软件项目控制的目的是为软件项目的过程提供足够的能见度，从而可以在执行过程中发生对计划的严重偏离时能够采取适当的更正行动。 
软件项目控制包括： 
a.追踪软件项目的进展与表现，从而与所作的估计、承诺和计划作出对比。 
b.追踪软件项目的风险。 
c.在发生对计划的严重偏离时采取更正行动。 
■软件获取管理（Software Acuisition Management） 
软件获取管理的目的是有效地管理从软件项目外部来源获取软件。 
软件获取管理包括： 
a.找出软件项目对取得外部软件的需要。 
b.识别和选择供应者。 
c.与供应者达成协议。 
d.处理与供应者之间的关系。 
e.收取软件项目所需的外部软件。 
f.安排对所取得的外部软件的维护与支持。 
■软件质量保证（Software Quality Assurance） 
软件质量确保的目的是为了客观地核实软件项目的实施行动与开发中的产品遵从于对应的需求、过程描述、标准及规程。 
软件质量确保包括： 
a.客观地核实软件项目的实施行动与开发中的产品遵从于对应的需求、过程描述、标准及规程。 
b.找出及记录所发现的不一致的问题。 
c.向项目成员与经理提供反馈。 
d.确保那些不符的问题得到处理。 
■软件组配管理（Software Configuration Management） 
软件结构配置管理(SCM)的目的是贯穿软件生命周期，建立和维持软件项目的产品完整性。 
软件结构配置管理包括： 
a.确定开发中的软件产品在某一特定时刻的结构配置。 
b.控制结构配置的组份的变更。 
c.从结构配置库中去制作开发的软件产品。 
d.贯穿软件生命周期，维持维软件产品基线的完整性。第三级：定义级■企业对过程的重视（Organization Process Focus） 
企业对过程的重视的目的是建立和维护对企业的软件过程的理解和协调企业的件工程过程的改进活动。 
企业对过程的重视包括： 
a.评估企业和项目的软件过程。 
b.建立起一个计划去改进软件过程。 
c.对建立、维护、改进和使用整个企业内共有的软件过程的活动进行协调。 
■企业过程定义（Organization Process Definition） 
企业过程定义的目的是建立与维护一套可用的软件过程资源去改进整个企业的程过程效果及为企业的积累性的长期收益提供一个坚实的基础。 
企业过程定义所建立的软件过程资源包括： 
a.一套企业的标准软件工程过程。 
b.对每一种经审核批准用于工程项目的软件生命周期模型的描述。 
c.关于如何剪裁企业标准的软件过程以适应具体项目需要的原则和指导方针。 
d.企业的软件测量结果数据库。 
e.企业的与软件过程有关的文件资料库。 
■企业的培训方案（Organization Training Program） 
企业的培训计划的目的是增进工作人员的技能和知识，使他们能实质地和高效地担当其软件角色。 
企业的培训计划包含： 
a.找出什么是企业的软件培训需要。 
b.取得与提供所需的培训。 
■集成化的软件管理（Integrated Software Management） 
集成软件管理的目的是把软件工程与管理集成为一个连贯涵接的、详细定义了、基于企业标准软件过程而剪裁出来的软件过程。 
集成软件管理包括： 
a.使用企业的软件过程财富，并对之作出贡献。 
b.基于企业标准软件过程而剪裁出详细定义了的软件过程。 
c.积极主动地使用这个定义了的软件过程。 
d.积极主动地对软件的风险进行管理。 
■软件产品工程（Software product Engineering） 
软件产品工程的目的是始终如一地执行明确定义了的、集成了所有软件项目的术活动的工程过程，去实质地和高效率地制造正确的、稳定的软件开发产品。 
软件产品工程包含： 
a.按照项目的软件过程，执行工程的各项任务去规定，设计，制品满足其产品技术需求。 
■项目间的协调（Project Interface Coordination） 
项目界面协调的目的是确保软件工程人员主动地与企业内的其他功能部门交流协调和合作，以便更好地满足客户的需求。这些功能部门包括技术的功能(例如，系统测试)，支持功能(例如，记录)，和组上的功能(例如，培训和合同)。 
项目界面协调牵涉到经埋与员工，其内容包含： 
a. 与项目内其他功能部门一道处理系统要求，计划，目标，困难问题和风险。 
b. 确定与维持对其他涉及项目的功能部门的承诺。 
c. 辨明、跟踪和解决项目内功能间配合的行动与问题。 
■交换审核（Peer Reviews） 
交互审核的目的是尽早地和有效地从开发中的软件产品中除去缺陷。一个重要的必然结果是对软件过程和开发中的软件产品有一个更好的理解，从能够预防缺陷产生。 
交互审核是由软件写作者的同事使用既定的办法去对开发中的软件产品进行检查来找出缺陷与需要作出更改的地方。 
交互审核办法的例子包括：检查，结构化走通和积极审核。第四级：定量管理级（Level4: Quatitative Management） 
■企业软件资产共通性（Organization Software Asset Commonality） 
企业软件资源共通性的目的是找出企业软件产品之间的共通性，以便在成本，量和生命周期等方面取得收益。 
企业软件资源共通性包含： 
a. 与企业的其他功能部门合作去定义出共同软件资源的技术要求，从而使项目与企业的战略经营目标保持一致。 
b. 建立与维护一套能用于各个项目的开发与产品维护的共同软件资源。 
c. 协调对企业内所有项目的共同软件资源的部署，以便取得在成本、质量和生命周期等方面的得益。 
■企业过程表现（Organization Process Performance） 
企业过程效能的目的是建立和维护用于重要的过程和产品特性的测量、数据与分折技术，去支持对企业与项目的软件过程进行运用统计学方法的管理。 
企业过程效能包括： 
a. 定义出表征企业软件过程效能的各种测量项目和与之关联的过程效能模型。 
b. 从各个软件项目收集这些过程效能的测量结果。 
c. 使用这些测量数据来表征企业的标准软件过程。 
d. 使用这些测量数据来为整个企业建立软件过程效能模型。 
■统计法过程管理（Statistical Process Management） 
统计法的过程管理的目的是使所选择到的所有次级过程稳定化及透彻掌握它们的能力，从而达到统计法意义上的产品质量及过程效能的目标。 
统计法的过程管理包括： 
a. 建立产品质量及过程效能的目标。 
b. 选择项目的设定过程中的一些次级过程来进行运用统计法的管理。 
c. 找出、测量和分析那些（被选中的）次过程的关键产品和过程的属性持征。 
d. 确定每个次过程的关键的属性特征的自然界限。 
e. 使得（选中的）次过程成为可预测的。 
f. 测量与分析（选中的）次过程的过程效能。 
g. 把产品质量和过程效能的测量结果与所定的目标进行比对以便确定相关过程的能力。第五级：（不断）优化级（Level: Optimizing） 
■缺陷预防（Defect Prevention） 
缺陷预防的目的是找出缺陷和其他问题产生的共同原因。采取行动去预防它们再次发生，或者采取措施去克服那些产生不及格的过程效能的原因。 
缺陷预防包括： 
a. 分析过去产生的缺陷和其他的问题。 
b. 采取特定的行动来预防那些类型的缺陷与问题在将来再次出现。 
c. 采取持定的改进行动去纠正那些产生不及迅程格效能的共同原因。 
■企业过程与技术创新（Organization Process and Technology Innovation） 
企业过程与技术创新的目的是找出那些能够在一定程度上改进企业的软件过程而有助于达到企业改进软件过程的目标的过程与技术上的改进。 
企业过程与技术创新包括： 
a. 建立和维护企业的定量法的软件过程改进目标。 
b. 收集与评价软件过程改进的建议。 
c. 找出与评价潜在的软件过程和技术的创新。 
d. 选择在全企业展开改革与创新的候选项目。 
■企业改进开展（Organization Improvement Deployment） 
企业改进的开展的目的是通过把改进转变为一种系统性的行为方式去持续地和计量地改进企业的软件过程。 
企业改进的开展包括： 
a. 评价软件过程改进的候选项目。 
b. 选择要进行开展的软件改进项目。 
c. 开展改进。 
d. 测量改进的效果。 
从整体来说软件能力成熟度级别从低到高的变化代表了企业的生产活动由高风险低效率到高质量、高生产率的进展。 
这儿要注意的一点是每个能力成熟级别的关键过程区域是累加到上一级去的，例如在第三级时就要满足所有第二级与第三级的关键过程领域的目标。 
如果要用简单的一句话来表达从一级到高一级所需要的努力的话，我们可以有： 
从一级到二级的转化：规范化过程 
从二级到三级的转化：标准化、稳定的过程 
从三级到四级的转化：可预测的过程 
从四级到五级的转化：继续不断地改进过程
软件过程的配置管理
软件过程的配置管理[2]包括以下管理行为：对某个配置项的功能和物理特性进行识别和编档；对这些特征的变动进行控制；对变动和事实进行记录、汇报；验证需求计划的实现。 
偏差（Deviation）： 
针对开发中的计划、标准、规划等的明显偏离和变动。 
同业复审（Peer Review）： 
软件项目开发成员的同行遵循某一规则对项目产品所作的检查，用于发现缺陷所在。 
风险管理（Risk Management）： 
运用风险概率方法分析评估项目开发中设计的各类风险，包括风险识别，风险分析，风险等级排序和风险控制。 
软件工程过程组（Software Engineering Process Group）： 
协助开发机构对所采纳的软件过程进行制定、分析、监控和改进的专家组。它应直接想机构的最高领导层负责。 
软件生命周期（Software Life Cycle）： 
指软件开发所涉及的全过程，包括从产品设计到产品终结的整个周期，一般分为概念阶段，需求阶段，设计阶段，实施阶段，测试阶段，安装调试阶段，运行维护阶段，终止阶段。 
软件需求（Software Requirement）： 
用户为实现某种目标或解决某种问题要求软件给予满足的条