软件工程之项目管理

软件项目开发是一项系统而复杂的工作,它需要一个团队互相配合、分工协作;项目管理是在一定的约束条件下,以高效率地实现项目的目标为目的,按照项目内在的逻辑规律进行有效的计划、组织、协调、控制的系统管理活动。软件项目管理是软件工程和项目管理的交叉学科,是项目管理的原理和方法,在软件工程领域的应用。

1.过程控制

质量管理是指一个组织在全员参与的基础上,为满足所受益者的质量要求而形成的一系列质量方针、目标和体系。软件质量管理是对软件的开发和生产过程的管理,包括软件项目策划、对软件过程的跟踪监控、软件配置管理以及软件质量保证等,软件质量管理的一个侧重点就是软件质量控制,而鉴于过程控制对软件质量管理的影响,对软件质量的控制就应该注重软件开发的过程控制,并以此来进行软件质量管理。

1.1质量保证

国际标准组织ISO9000对质量的定义就是:质量是产品或服务用于满足人们潜在或明示的需求的所有特征和性能的总和。软件质量管理是对软件的开发和生产过程的管理。质量保证是为了提供信用,证明项目将会达到有关质量标准,而质量体系中开展的有计划、有组织的工作活动。它贯穿子整个项目的始终。

质量保证通常由质量保证部门或有类似名称的组织单位提供。质量保证过程(SQA)是指确定客观地保证软件产品和过程符合规定的要求以及建立的计划所需的活动。它由方针、标准、过程和活动组成,包括:

1)质量保证过程建立:

包括建立质量目标,包括验证、确认、测试、审计和质量测量。

2)活动:

a.执行质量保证活动的质量标准、方法、步骤和工具。

b.合同规定的评审和协调的步骤。

c.标识、收集、编写文档、维护和处置质量记录的步骤。

d.执行质量保证活动的资源、时间表和责任。产品保证。

e.保证把合同所要求的全部计划写成文档并执行。

f.保证软件和有关的文档符合合同,遵守计划。

g.保证交付的产品和服务完全满足合同要求。

3)过程保证:

a.保证为此项目采用的软件生存期过程符合合同,遵守计划。

b.保证内部软件工程实践、开发环境、测试环境是恰当的,并符合合同。

c.保证产品主合同的要求已交给子合同执行人,后者的产品和服务符合主。

4)合同的要求:

a.保证需方和其他各方按照合同、谈判和计划得到了所要求的支持与协作。

b.保证依照己建立的标准和步骤圆满地完成产品和过程调试。

c.保证培训提供了满足项目需求所需要的技术和知识。

5)质量改进:

a.保证项目有关人员了解质量保证过程的需求,执行并维护这些需求。

b.收集和分析历史数据、技术数据和评价数据。这些分析作为反馈以实现改进。

c.收集、维护和使用质量成本数据。这些数据应当说明预定成本及改正产。

d.品或服务中的缺点或不符合之处的成本。

e.质量保证工作是以质量管理计划作为执行的标准,开展相应的配置管理、文档管理及质量评审和测试工作。

1.2配置管理

为了控制系统开发过程的往复,不至于产生重大过失和往复的泛滥,完成软件开发的配置管理。配置管理的目的在于控制软件开发过程中的“变化”,这种变化可能是外部引起的,如需求的变化。也可能是来自内部的变化,如早期设计的某个部件不够完备,,需要修改等。为了控制这些变化,把变化引起的波动尽可能的控制在有限的范围内。在许多软件开发项目中,项目范围管理涉及三个方面:业务需求、技术结构、投产服务。编写哪些程序模块,实现哪些功能,部署到哪些地点,这其实都是项目范围管理所要关注的内容,在配置管理中对应了产品的物理属性和功能属性以及服务的属性,都可以通过配置管理来识别、记录和跟踪。只有做好软件配置管理,才能真正把项目的范围管理做实。

配置管理中要记录、控制、报告各种属性(配置项)的变化状态,这就是配置管理中的版本管理和变更管理,有变更才有不同的版本,版本又成为变更控制的主要对象,这两者是紧密关联的。在项目范围管理中,需要识别和控制项目的交付成果,要描述交付物应有的各种特性。这些交付物及其特性,就是配置管理中的配置项。从项目管理的角度,WBS只需要分解到可管理(Manageable)的程度,而配置管理则要求分解到最终可操作的程度,管理的粒度更为精细。因此,良好的配置管理机制,是项目范围管理得到最终落实的保证。在配置管理中,每个配置项的每个状态都可以称为一个版本,配置项的演变过程就可以体现为一棵版本树。而我们平时经常说的版本,实际是指软件产品的版本,不是具体配置项的版本。一个软件产品版本是由众多配置项组成的,每个配置项最多只能选取它的一个版本组成一个特定的产品版本。因此,在我们平时谈到“版本”时,需要明确是配置项的版本还是软件产品的版本,否则容易在沟通中带来混淆。既然版本管理是配置管理中的一项内容,那么对于在软件产品版本管理中遇到的各种实际问题,就需要放在配置管理这个大背景中,基于配置管理的理论、方法和工具来考虑,才能逐步理清。

2.组织模式

软件项目组的组织结构取决于整个软件开发组织的管理风格、问题的难易程度和人员的数量及技术水平。策划常见的组织形式:

1).封闭式范型:按照传统的权利层次来组织小组(类似CC小组)。这种小 组在开发与过去已经做过的产品类似的软件时十分有效,但在这种封闭式范型下难以进行创新式的工作。

2).松散式范型:松散地组织小组,并依赖于小组成员个人的主动性。当需要创新或技术上的突破时,按照这种随机式范型组织的小组很有优势。但当需要“有次序的执行”才能完成工作时,这种小组组织范型就会陷入困境。

3).开放式范型:试图以一种,既具有封闭式范型的控制性,又包含随机式范型的创新性的方式来组织小组。工作的执行结合了大量的通信和基于小组一致意见的决策。开放式范型小组结构特别适于解决复杂问题,但可能不象其他类型小组那么效率高。

4).同步式范型:依赖于问题的自然划分,组织小组成员各自解决问题的片断,他们之间没有什么主动的通信需要。

从历史角度看,最早的软件小组是控制集权式(CC)结构,原来称为主程序员小组。这种结构由Harlan Mills首先提出,并由Baker[BAK72]描述出来。小组的核心是由以下人员组成的:一个高级工程师(“主程序员”),负责计划、协调和复审小组的所有技术活动;技术人员(一般2到5个人),执行分析和开发活动;以及一个后备工程师,支持高级工程师的活动,并能在项目进行过程中,以最小的代价取代高级工程师的工作。

主程序员可以由一个或多个专家(如电讯专家,数据库设计者)、支持人员(如技术文档写作者,行政人员)和软件资料员来担当。资料员为多个小组服务,执行以下功能:维护和控制所有软件配置(如文档,源程序,数据和磁介质);帮助收集和格式化软件生产数据;分类和索引可复用软件模块;辅助小组进行研究、评估及文档准备。资料员的重要性不能过分强调。资料员充当了软件配置的控制者、协调者及潜在的评估者。不考虑小组的组织,每一个项目管理者的目标都是帮助建立一个有凝聚力的小组。

3.能力评估

软件过程能力描述了一个开发组织开发软件开发高质量软件产品的能力。现行的国际标准主要有两个:ISO9000.3和CMM。

ISO9000.3是ISO9000质量体系认证中关于计算机软件质量管理和质量保证标准部分。它从管理职责、质量体系、合同评审、设计控制、文件和资料控制、采购、顾客提供产品的控制、产品标识和可追溯性、过程控制、检验和试验、检验/测量和试验设备的控制、检验和试验状态、不合格品的控制、纠正和预防措施、搬运/贮存/包装/防护和交付、质量记录的控制、内部质量审核、培训、服务、统计系统等二十个方面对软件质量进行了要求。

CMM(能力成熟度模型)是美国卡纳基梅隆大学软件工程研究所(CMU/SEI)于1987年提出的评估和指导软件研发项目管理的一系列方法,用5个不断进化的层次来描述软件过程能力。现在CMM是2.0版本。

ISO9000和CMM的共同点是二者都强调了软件产品的质量。所不同的是,ISO9000强调的是衡量的准则,但没有告诉软件开发人员如何达到好的目标,如何避免差错。CMM则提供了一整套完善的软件研发项目管理的方法。它可告诉软件开发组织,如果要在原有的水平上提高一个等级,应该关注哪些问题,而这正是改进软件过程的工作。

CMM描述了五个级别的软件过程成熟度(初始级,可重复级,已定义级,已定量管理级,优化级),成熟度反映了软件过程能力的大小。

初始级特点是软件机构缺乏对软件过程的有效管理,软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,其软件项目的成功来源于偶尔的个人英雄主义而非群体行为,因此它不是可重复的;可重复级的特点是软件机构的项目计划和跟踪稳定,项目过程可控,项目的成功是可重复的;已定义级的特点在于软件过程已被提升成标准化过程,从而更加具有稳定性、可重复性和可控性;已定量管理级的软件机构中软件过程和软件产品都有定量的目标,并被定量地管理,因而其软件过程能力是可预测的,其生产的软件产品是高质量的;优化级的特点是过程的量化反馈和先进的新思想、新技术促进过程不断改进,技术和过程的改进改进被作为常规的业务活动加以计划和管理。

CMM是科学评价一个软件企业开发能力的标准,但要达到较高的级别也非常困难,根据1995年美国所做的软件产业成熟度的调查,在美国的软件产业中,CMM成熟度等级为初始级的竟占70%,为可重复级的占15%,为定义级的所占比例小于10%,为管理级的所占比例小于5%,为优化级的所占比例小于l%。而国内企业的水平就更加堪优,到目前为止,只有东软一家达到优化级,少数几家能够达到可定义级。尽快改变这种局面,科学化、规范化、高效的进行软件开发活动,从整体提高我国软件行业的水平,是国内软件企业的当务之急,也是专业人员应该为自己制定的目标。如果有一天也能指挥一个数千人的庞大开发队伍,操作Windows这样巨型规模的软件项目,并生产出高质量的产品,才有理由宣称自己的软件项目管理能力达到了一个“自主自足”的水平。

[1]苏晓旭. (2009). 软件项目质量保证体系的研究与应用. (Doctoral dissertation, 北京邮电大学).

[2]房洁.浅谈软件质量管理[J].现代企业教育,2009(17)

[3]http://baike.sogou.com/v3878395.htm?fromTitle=%E8%BD%AF%E4%BB%B6%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86

时间: 2025-01-04 18:13:09

软件工程之项目管理的相关文章

【转载】软件工程和项目管理的区别

软件工程的定义: 软件工程是研究和应用如何以系统性的.规范化的.可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来. 项目管理的定义: 项目管理是一个管理学分支的学科 ,指在项目活动中运用专门的知识.技能.工具和方法,使项目能够在有限资源限定条件下,实现或超过设定的需求和期望.项目管理是对一些与成功地达成一系列目标相关的活动(譬如任务)的整体.这包括策划.进度计划和维护组成项目的活动的进展. 软件工程为我们提供的具有指导意义的软件

爆栈之一般IT项目管理相关基本概念杂谈(备案)

PS,说到IT(PM)项目管理,还要提下职场两点小领会: 1.选择比努力重要: 2.位置比能力重要. 由于现在IT项目管理一般已下面三种角色划分: 1.产品经理,以产品为导向---对商业模式较为欠缺: 2.项目经理,以项目为导向---通晓一般模式,有一定体会: 3.技术经理,以技术为导向---有较深度和广度积累: 只是大部分公司都没有分那么清晰,大都是身兼多个角色,美其名曰:项目经理.技术总监.部门经理等等,当然也是根据实际情况的侧重不同而已~ IT项目管理,其实也是两个关键: 1.IT,即针对

关于软件管理和软件工程

刚刚开博,看了几篇关于软件管理 Or 软件工程的文章. 有同学混在一起谈不太好.如果谈管理,就是项目管理,如果谈工程,就是软件工程. 项目管理其实在不同领域之间差别不大,而软件工程是侧重领域的,但是一定程度来说,工程学又是一个多领域共通的一个学科. 这里面虽然有交叉但是侧重点不同.谈管理,那么就谈管理相关的,不要谈什么UML,这个是工程上的事情. 谈工程,那么就少涉及管理要素,虽然现实中工程的好坏很大程度上是受管理的制约. 谈问题,谈知识点,首先要把问题和知识点定性,想想这是管理的问题么?是工程

软件工程:需求分析的20条法则

对商业用户来说,他们后面是成百上千个供应商,前面是成千上万个消费顾客.怎样利用软件管理错综复杂的供应商和消费顾客,如何做好精细到一个小小调料包的进.销.调.存的商品流通工作,这些都是商业企业需要信息管理系统的理由.软件开发的意义也就在于此.而弄清商业用户如此复杂需求的真面目,正是软件开发成功的关键所在.  经理:“我们要建立一套完整的商业管理软件系统,包括商品的进.销.调.存管理,是总部-门店的连锁经营模式.通过通信手段门店自动订货,供应商自动结算,卖场通过扫条码实现销售,管理人员能够随时查询门

对现代软件工程开发看法

<现代软件流程 >可以理解成对之前的项目进行一个维护以及二次开发,在开发的过程中加入了一些软件工程以及项目管理的东西来做练习,让我们能够接触到一种开发流程也是挺好的."找bug,改bug,重构小部分代码,以满足用户的需求." 不会给我们一种一上手就编码的错觉.这本软件工程最大的意义就是让我们知道 软件≠编码,语法上的BUG好改,那么业务逻辑上的bug呢?都是在无需求下进行,那么如何满足用户的需求呢?我们还会遇到很多问题,我为什么要改?根据什么来改,怎样改才是对的?如果换成其

一个java高级工程师的进阶之路

宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究.您应该多研究一下JDBC.IO包.Util包.Text包.JMS.EJB.RMI.线程.如果可能,希望您 对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经 了. 二. 设计模式.其实写代码是很容易的事情,我

软考初级程序员考试大纲

一.考试说明 1.考试目标 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求按照程序设计规格说明书编制并高度程序,写出相应的程序文档,产生符合标准规范的.实现设计要求的.能正确可靠运行的程序.具有助理工程师(或技术员)的实际工作能力和业务水平. 2.考试要求 (1)掌握数制及其转换.数据的机内表示.算术和逻辑运算.应用数学的基础知识: (2)了解计算机的组成以及各主要部件性能指标: (3)掌握操作系统.程序设计语言的基础知识: (4)熟练掌握基本数据结构和常用算法: (5)熟练掌握C程

一个java高级工程师的进阶之路【转】

宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究.您应该多研究一下JDBC.IO包.Util包.Text包.JMS.EJB.RMI.线程.如果可能,希望您 对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经 了. 二. 设计模式.其实写代码是很容易的事情,我

《构建之法》的读后感

面对在软件开发方面经验很少的我们,读这本书,软件工程课不再枯燥沉闷,而是变得出乎意料的生动有趣.学习了很多的专业课程,像算法,数据结构,编译原理,软件工程等.我们同学可能心里都会有这样的疑问:我学了这么多的课程有什么用呢?在工作中有多少会真正被应用到呢?也就是说,大家都觉得理论和实践之间有着不可逾越的鸿沟.<构建之法>这本书很好的把理论和实践相结合了. 整本书主要介绍了软件测试.软件工程师的成长.编写代码的规范.团队合作开发软件的重要性.还有开发软件项目的总体流程.IT的发展创新等等,使得整本