《软件开发中的项目管理》由会员分享,可在线阅读,更多相关《软件开发中的项目管理(7页珍藏版)》请在金锄头文库上搜索。
1、软件开发中的项目管理赵鹏 通信一团技术室摘 要 信息化是我军“双重历史任务”的重点。如何实现信息化,建立高效、安全的信息平台,是摆在很多单位面前的一个课题。本文以总装备部CIMIS系统研制为背景,从软件工程的角度,分析了软件开发的生命周期、软件过程模型和团队模型,重点讨论软件项目管理的科学性和必要性,并结合具体实践,讨论如何发挥项目管理的作用,加强软件开发的组织与管理。关键词 软件工程、软件项目1 问题的提出经过三年多的应用和不断建设,总装备部CIMIS通信综合管理系统的性能不断完善,应用范围不断拓宽,对总装通信管理和建设实现科学化、正规化起到了良好的推动和促进作用。在检查中发现,各单位在CI
2、MIS系统的建设过程中,根据CIMIS总体技术方案和各自的实际情况,都建立起了各自的CIMIS系统,开发了不少技术先进的应用系统,初步实现了通信系统内部管理的信息化。但是,总体来说,或多或少存在着以下几个方面的不足:1)目前各单位基本上都是独立开发自己的CIMIS系统,但由于没有统一的开发标准,造成系统功能重复,开发平台不统一,系统整合难度大; 2)系统开发往往针对某一特定功能,没有形成一个完整的系统结构;3)总体设计不够细致,各个子系统功能模块风格不统一;4)开发人员多数为通信技术人员,开发能力和时间有限,开发手段相对原始,大多是软件作坊的形式,代码的可重用性低、可读性差;5)缺乏有效的软件
3、文档管理。这些问题集中体现在单个的功能模块设计和实现比较好,但是系统的顶层设计欠佳,模块与模块之间不能很好的通信,系统功能重复,不能很好的整合。这里既有技术层面的因素,即开发平台不统一;也有软件开发的组织与管理层面的因素,即程序员对系统功能的定义、规划和设计不明确,往往是开发人员摸着石头过河,仅仅从自己开发的这部分模块来考虑问题,另外开发人员和测试人员不能很好的协调,这些都说明了软件项目管理这一角色的欠缺。所以,为了保证CIMIS系统的进一步发展,下面,从软件工程的角度,重点分析项目管理在软件工程的管理和组织中的重要作用,并根据29基地在CIMIS系统开发中的一些做法,讨论如何发挥项目管理的作
4、用,加强软件开发的组织与管理。2 软件工程简述2.1 定义根据Fritz Bauer的观点,软件工程(soft engineering)的基本定义为:Software Engineering is the establishment and use of sound Engineering principles in order to obtain economically software that is reliable and works efficiently on real machines。即:软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程
5、化原则。 软件工程是一个层次化的科学,从低到高分为process层、methods层以及tools层。软件工程的过程(process)指将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付文档资料、保证质量和协调变化所需的管理,及软件开发各个阶段的里程碑。过程是软件工程的基础。软件工程的方法(methods)为软件开发提供了“如何做”的技术。它包括多方面的任务,如项目计划与估算、软件需求分析、数据结构设计、系统总体结构设计、算法过程设计、编码、测试以及维护等。软件工程的工具(tools)为软件工程过程和方法提供自动或半自动的软件支撑环境
6、。软件工具集成起来,建立起称作计算机辅助软件工程(CASE: Computer-Aided Software Engineering)的软件开发支撑环境。CASE将各种软件工具、开发机器和一个存放开发过程的工程数据库组合起来,形成软件工程环境。2.2 软件生命周期(Software Lifecycle)软件生命周期是指一个时间段,从软件产品的设计开始,当软件再也不被使用时结束,也称为软件过程,包括软件生存周期内为达到一定目标而必须实施的一系列相关过程的集合。使用软件生命周期模型可以有助于理解整个过程,实现结构化开发进程,预先资源计划和过程控制,所以,一个良好定义的软件过程对软件开发的质量和效率
7、有着重要的影响。按照在软件生命周期全过程中应完成的任务的性质,在概念上可以把软件生命周期划分为问题定义、可行性研究、需求分析、概要设计、详细设计、编码和单元测试、综合测试以及维护等8个阶段。实际上,在从事软件开发工作时,软件的规模、种类、开发环境以及实用的技术方法等因素,都影响着阶段的划分。因此,一个科学、有效的软件过程应该定义一组适合于所承担的项目特点的任务集合。常用的软件生命周期模型有:瀑布模型(Waterfall Model)历史悠久,广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终交付的产品可能不是用户真正需要的。瀑布模型见图1。进化开发模型(Evolution
8、ary Development Model)正是为了克服瀑布模型的缺点而提出来的。他通过快速构建起一个可运行的原型系统,让用户测试原型并收集用户的反馈意见的办法,获取用户的真实需求。许多商业化的产品都是通过这种方式开发的。这种模型的缺点是,对管理员来说,缺乏对项目进展的了解,同时系统的结构性比较差。适用于小型或中型交互式应用的开发。进化开发模型见图2。风险驱动的螺旋模型(Spiral Model)是由于大规模的内部开发项目,但是,只有在开发人员具有分析风险和排除风险的经验及专门知识时,使用这种模型才会获得成功。螺旋模型见图3。图1 软件生命周期瀑布模型 图2 软件生命周期进化开发模型图3 软件
9、生命周期螺旋模型 图4 软件开发团队3 软件开发的团队模型团队模型(Team Model)是软件开发团队的组成及其内部人员的分工和职责情况。团队中的每一个角色都有其特定的任务,他们互相依赖、互相合作,共享对软件的管理,也共享对软件的责任。每一个角色都始终存在并作用于整个软件开发过程。图4所示就是软件开发团队的组成。团队的成员根据软件的特点进行权力分配,共同分担责任和义务,彼此地位相等,相互沟通,听取多数人的意见,达到彼此制约,最终达到合理的平衡的目的。团队的成员及其主要目标如表1所示。表1 团队角色及主要目标团队角色主要目标产品管理ProductManagement确定软件的远景,获取并确定用
10、户的需求,控制用户的期望值,设计产品的特征和进度表。项目管理ProgramManagement制定开发功能规范,在团队内部进行沟通和协商,维护软件进度并报告软件产品状态,保证能够尽快地在软件的约束条件下发布软件。软件开发Development开发出满足设计规范和用户要求的软件。软件测试Testing开发测试策略和计划,保证在解决了所有已知问题后再发产品。用户培训UserEducation保证使用文档要全部很清楚地写出来,提高用户使用软件的技能,保证大多数用户能够充分利用软件的功能。后勤管理LogisticsManagement保证软件开发能够平稳的进行。在开发一个小的软件的时候,可以考虑使用小
11、的团队。通常对团队压缩的方法就是将图所示的各个角色进行组合。 4 项目管理(Program Management)简述4.1 项目管理的职责项目管理负责并保证高质量的软件产品按时完成和发布。其任务包括:倾听用户需求;负责产品功能的定义、规划和设计;做各种复杂决策,保证开发队伍顺利开展及跟踪程序错误等。总之,项目管理全权负责软件产品的最终完成。4.2 为什么需要项目管理1) 软件设计、软件实现和软件测试专业分工明确,责权分明。在项目开发团队内,项目管理负责软件功能的定义、规划和设计;开发人员负责软件的实现;测试人员负责软件的测试,三者相互配合、相互制约,同时又相互依赖。这三个专业领域只有分工协作
12、才可能建立明确责任制,从而保证软件开发的顺利完成。2) 开发人员能够集中精力做开发,而不被管理琐事所困扰。项目管理承担的管理琐事是非常多的。组织召开会议就是具体的日常任务之一。开发人员如果主持或参加此类会议,将严重影响其编程进度和效率。其他的技术管理琐事还包括审查所有程序错误,处理项目运作过程等。总之,开发人员需要项目经理来帮助他们集中精力写高质量的代码。3)开发队伍需要有视野良好的领导。一个开发组内,如果大家都整天埋头编写自己负责的模块代码,最终可能做出一个高质量而不一定符合系统整体战略或需求的软件。项目管理需花专门时间对软件的战略定位,用户的需求获取和日常管理,以及与其他产品的配合进行认真
13、研究。项目管理对功能的优先级处理,程序错误的判断决策都可以进行专业化管理。4)项目组内部不同角色人员之间需要好的沟通协调。项目组内部有程序开发、测试、用户培训及可用性研究等方面的人员。这些人员对项目的过程和具体设计经常存在分歧和冲突。这些不同职能人员之间的协调一致和相互配合,都需要项目管理的积极参与和领导沟通。5 二十九基地项目管理的实践自2000年开始CIMIS系统的研制以来,我们对项目管理的角色的认识从一无所知,到一知半解,再到比较熟练,是一个成长的过程。最早的方案的总体设计偏重于功能实现和技术可行性研究,将主要精力放在了技术细节上,总体设计上又没有对界面样式和设计风格进行硬性规定,造成各
14、个功能页面的样式差异很大,使整个系统没有形成统一的风格。鉴于这种情况,我们对前期的技术情况进行了总结反思,按照软件工程的规范,重新进行了总体设计,较好地解决了上述问题,取得了理想的效果。我们觉得在以下几个方面有比较深的体会:5.1软件生命周期模型的确定 采用进化开发模型比较适合CIMIS应用系统的开发,开发人员在实现系统的基本核心功能后就直接交给用户使用,在实践中用户一方面熟悉系统,另一方面提出改进意见;开发人员根据意见进行改进和完善,然后再交给用户使用,如此循环,螺旋式上升。经过实践证明,这种方法可以有效地提高开发和应用推广进度。图5 CIMIS软件生命周期模型 图6 CIMIS软件开发团队
15、5.2 开发团队的组织在29基地CIMIS系统开发中,根据基地通信系统人员编制少、值勤维护工作量大的特点,我们采用了压缩的团队模型:产品管理和后勤管理由通信处分管参谋担任,确定人员分工,保证开发的顺利进行;项目管理由通信修理所一名计算机专业的副研究员为主组成的总体组担任,负责软件产品功能的定义、规划和设计以及软件开发中的决策,协调开发人员、测试人员的日常运作;软件开发由指挥自动化站和通信站网管室技术干部承担,并根据实际情况合理分配任务,比如,通信站网管室的技术干部对基地通信网络非常熟悉,承担了网络监控、网络值勤等功能的开发,指挥自动化站由于软件开发能力强,承担了数据库建设和通信GIS的开发任务;软件测试由通信修理所担任。角色分配如图6所示。5.2 项目管理具体工作的界定在基地CIMIS系统的开发中,项目管理应该将精力主要放在系统框架设计和标准制定上。具体来讲,通过对系统的需求分析, 设计系统业务流程(Enterprise Work Flow)、功能模型(Function Model)和数据模型(Data Model),为系统开发打下基础;重点开发CIMIS系统的顶层框架并提供数据资源接口,制定各种功能模块的设计任务书,为系统开发确定一个标准化强、操作性好的规范;同时,对功能模块的实现制定相应的约束条件,保证功能模块结构规