前 言
随着市场经济的进一步完善及全球经济一体化进程加快,企事业单位面临着激烈的市场竞争,企业内部、外部信息交流已成为企业发展、参与市场经济竞争的迫切需要。企业引入先进的信息处理技术,增加信息共享程度,不仅会提高工作效率、降低成本,而且也会提高企业管理的科学性和自动化程度。信息已成为企业生存与发展的基础。
计算机和通信技术的迅速发展,特别是Internet 技术的发展与普及,为企业内部、企业与外部提供了快速、准确可靠的信息交流渠道,信息高速公路改变了企业与企业、企业与客户、企业内部各级决策者与管理人员以及管理人员之间的信息交流方式,有效地促进了企业各部门之间以客户为中心的协作,为企业实现经营方式、管理模式的改变奠定了坚实的基础。信息化企业运作管理系统已成为企事业单位参与全球市场竞争的必备的支持系统。
正是由于这样市场需求与技术发展现状,为我国的IT行业带来了空前发展的机遇,特别是软件行业。软件企业能否抓住这样一个难得的发展机会需要多方面的努力,其中软件开发管理与质量控制在其发展中占有重要的位置。本文试图在这方面进行初浅的分析,可供业内人士参考。
1. 国内软件行业发展概况
1.1 发展现状
在我国,随着信息技术产业的迅速发展及软件版权意识的提高,软件越来越受到了人们的关注与重视,越来越多的人把目光投到了充满风险与利益的软件行业。加之我国风险投资机构的逐渐形成,都将促进软件行业以比以往更快的速度发展。
人们往往把IT(信息技术)产业看作风险行业,原因可能有几个方面,
其一: 这是一个飞速发展的行业,说她飞速也并不过分,只有二十几年发展历史的IT行业,在世界500强企业中占有重要的位置,而当今世界上最具财富的也是IT类企业。高额的回报吸引大批企业的介入,一个企业要想在这个行业有所作为没有一个灵活而有利的团队加之一定的规模是难以生存的。
其二: 这是一个高科技领域,这个行业的技术的生命周期一般为一年到二年,高速的技术发展势必要求大量的科研开发经费,而科研开发是有风险的,成功与失败只是咫尺之遥。一旦失败,无投资残值可言。
其三: 这是一个知识密集型领域,知识就是财富也意味着笼络一批人才需要付出一定的代价。
但实实在在讲IT行业确实是一个高速增长的行业,虽然计算机的发明已有五十几年的历史,IT做为一个行业的历史也只有二十几年,而当今世界上最具财富的是IT类的公司,足见其成长的速度。我国软件行业大约有十年的发展史,到现在应该说也还是个很小的行业,虽然它在国民经济中所占的份额很小,但他对我国经济的发展,社会的进步起着很重要的作用。目前已形成一批具有一定规模的软件公司,如以财务软件为代表的“用友”、“金蝶”、“安易”等,及以项目开发型为特色的“东大阿而派”、“联想系统集成”、“北大方正”等企业。软件收入已占有一定的市场份额。发展速度惊人。
1.2. 存在的问题
我国软件行业发展的历史较短,加之IT行业技术发展速度快,软件开发工具层出不穷。我国的软件行业自身发展方面确实存在一些问题。归纳起来,有以下几方面的问题:
* 软件开发管理不规范;
* 缺乏高素质的研发管理人员和研发人员;
* 缺乏合格的产品经理;
* 软件产品孤立、零散,缺乏整合性;
* 软件公司规模过小;
1). 软件开发管理不规范
目前大部分软件公司,无论是产品型公司还是项目型公司,大部分公司没有形成适合自己公司特点的软件开发管理模式,虽然有些公司根据软件工程理论建立了一些软件开发管理规范,但并没有从根本上解决软件开发的质量控制问题。这样导致软件产品质量不稳定,软件后期的维护、升级出现麻烦,同时最终也会损害用户的利益。
同时,随着软件开发规模及开发队伍的逐渐增大,软件开发不再是向过去那样一二个开发人员即可解决的事情。迫切需要一种开发规范来规范每个开发人员、测试人员与支持人员的工作,每个项目组成员按约定的规则准时完成自己的工作。同时采用规范化管理,专业分工也可以降低对开发人员的要求,从而降低产品研发成本。
2). 缺乏高素质的研发管理人员和研发人员
目前,我国软件市场还处于起步与发展阶段,真正称得上商品的软件很少,绝大多数的软件公司的规模很小,国内软件开发人员超过100人的公司很少。软件公司的用户几乎全是国内用户,加之国内软件专业的学校教育与实际软件开发脱节严重,开发人员工作不稳定,以及技术的高速发展以及开发工具的变更,导致软件开发人员缺乏必要的技术积累,表现为整体素质偏低。同时,由于没有合适的内部与外部环境也很难造就高水平的研发管理人员,从软件开发到开发管理都不能适应市场的要求。
3). 缺乏合格的产品经理
产品经理在软件产品的发展过程中起着至关重要的作用,产品经理负责产品的定位与发展方向。这就要求产品经理对产品市场、用户需求有深刻的认识与理解,需要有一定的悟性、管理经验与能力。同时,产品经理必须了解当今IT技术的发展状况及发展趋势,对相关开发工具与技术应有比较深刻的理解。对于大型应用软件的产品经理还要求其对网络技术、电子商务及各种硬件设备有全面的了解。这样才能保证在决定产品特性,产品框架结构、市场销售策略与服务策略时作出合理决策。从某种程度上讲,产品经理是否称职关系着其产品的存亡。目前软件行业急需而又缺乏正是这种产品经理。
4). 软件产品孤立、零散,缺乏整合性;
国产软件目前称得上产品的主要以财务软件、防病毒软件、家庭教学软件及一些初级的工具软件。总的说来基本为专用型产品、满足特定功能,即便是专用型产品其各专项子系统大多也缺乏整体考虑。大多厂家产品不具备构成大型应用系统的整合能力,目前一些公司已开始进行这方面工作。
项目型公司大多以项目为主,产品化程度比较低。不具备推广的条件,经济效益较差,影响公司的发展。
导致软件产品孤立、零散,缺乏整合性在很大程度上也是软件开发管理不规范;缺乏高素质的研发管理人员和研发人员;缺乏合格的产品经理;三条原因造成的。
5). 软件公司规模过小;
目前我国软件市场还处于起步与发展阶段,绝大多数的软件公司的规模较小,国内软件开发人员超过100人的公司很少。软件公司的用户几乎全是国内用户。但软件作为一个行业,他需要市场的拖动,也需要外部资金的介入,外部资金的介入给它带来的不仅仅是金钱,更重要的是也带来了一种管理与思维方式,这也是国内软件公司需要的。
2 工程设计与软件开发
将软件开发作为工程来对待是有其存在意义的,在谈软件开发管理与质量控制之前,我们先看一下工程项目的整个过程。
2.1 工程设计的阶段划分
工程项目从可行性研究到最后项目建成基本包括如下八个阶段。最后二个阶段主要是考虑与软件开发比较而划分的,在实际的项目实施过程一般不将其作为独立阶段考虑。因此,一般的工程项目只包括六个阶段。(这里所指的工程项目可以是新建一间工厂,也可以是一个建筑工程项目)
但真正属于工程设计阶段的只是前四部分,以下以化工类工厂设计为例就属于工程设计的几个阶段的要求做以简单扼要的介绍,希望能软件开发管理有所帮助。
1) 可行性研究
在可行性研究阶段一般应完成如下几方面的工作:
* 项目内容定义
* 项目技术分析
* 项目市场分析
* 项目策略
* 投资与回报分析
* 已有资源分析
* 其它应考虑的因素
2) 方案设计
方案设计可以说是可行性研究中技术可行性的扩展。方案设计级段主要完成如下几方面的工作:
* 确定整个项目的技术实现。主要包括采用的工艺流程,主要及关键设备参数确定及设备选型。
* 基本设备布置方案
* 能够确定对建筑物、水、电、气以及采暖通风等方面的要求。
* 简单的方案说明
* 粗略的项目预算
* 技术的可实现性
3) 初步设计
初步设计是详细设计的前提,其目的是要根据具体项目的要求,初步确定技术实现的一些细节信息,主要完成如下几方面的工作:
* 确定工艺流程中的工艺参数和主体物流及物料平衡;编写工艺流程说明书
* 绝大部分设备的选型以及非标准的确定。并完成设备布置方案。
* 建筑、水、电、气以及采暖通风各工种均需确定初步设计方案及基本的方案说明。
* 较为准确的项目预算
* 具体的实现技术
初步设计是项目设计单位与用户交流的基础。
4) 详细设计
详细设计是以初步设计为基础,完成所有的技术细节工作。
* 确定工艺流程中所有的工艺参数,
* 完成所有设备的选型以及非标准设备的设计。并完成所有设备及管道布置等。完成所有工程实施前的准备工作。
* 建筑、水、电、气以及采暖通风各工种均需完成详细设计图纸。
* 详细的流程说明与使用说明
* 准确的项目预算
详细设计是项目实施的基础。
5) 工程实施
项目详细设计是工程实施的基础,按照设计要求施工是最基本的要求。同时,在项目的实施过程中还会发现详细设计中存在的问题,可以通过向设计单位提出修改设计要求,由设计单位完成设计修改工作。项目工程实施也可采用项目监理的方式,监督施工单位按设计图纸及施工规范施工,确保施工质量。
6) 试运行
工程实施完成后便是投产试车,解决其中存在的问题,便可开始项目的试运行。
在以上工程项目的各个阶段中,可行性研究一般由设计单位或用户自行完成,也可委托具有该类项目评估经验的项目咨询机构完成。方案设计、初步设计、详细设计由工程设计单位完成,工程实施由工程施工单位完成。
2.2. 工程设计的质量控制
工程项目设计从设计单位接受用户委托,进行工程项目设计到设计任务完成,用户在几个环节均有参与项目质量的控制的机会,同时设计单位有严格的质量控制体系确保项目设计符合相关的标准与规范。
在以上的工程设计质量控制体系中,在每一设计阶段结束时用户均有机会参与对工程设计质量的监督与控制,设计单位与用户沟通的媒介是工程设计图纸及相关的设计文档,双方有交换意见的共同基础。设计单位会根据用户的意见与建议及时调整设计,以便更好的满足用户的需要。多年的设计经验证明,上述的工程设计质量控制体系是科学合理的。
2.3 软件开发与工程设计之比较
按照软件工程理论,软件开发过程基本可以划分为如下几个阶段:
* 需求分析
* 总体设计
* 详细设计
* 编码设计
* 模块集成
* 软件测试
* 定版发行
从上面的软件开发阶段划分不难看出,软件开发与工程项目设计虽然看上是二类不同的工作,但他们本质上是相同的。不妨将软件开发与工程设计的阶段加以比较,不难得出上述的结论。
由图3不难可以看出软件开发与工程项目设计之间的相似性,因此将软件开发作为工程来管理是完全可行的。
2.4 软件开发与工程设计的差异
虽然软件开发与工程设计有其相似之处,但由于其所处的领域不同,发展历史与人文环境也有一定的差别,完全照搬工程设计的管理模式并不可取。首先比较一下工程设计与软件开发目前各自的现状。
1). 工程设计
* 有一套完备设计标准与规范;
* 大量的标准化设备可供选择;
* 大量的样板设计可供借鉴;
* 一批有经验的设计师言传身教;
* 客户基础素质良好;
2). 软件开发
* 历史较短,缺乏必要的开发管理规范;
* 技术发展变化快,零部件标准有待形成;
* 国内软件产品质量意识差;软件产业化意识淡薄;
* 可供借鉴的样板少;
* 缺乏高素质软件开发与管理人才;
* 客户素质较差;
正是由于工程设计与软件开发存在上述背景差异,应此在借鉴工程设计经验的同时,必须针对软件开发自身的特点,制定出符合企业自身的软件开发管理模式与相应的软件开发管理规范。这样才有利于我国软件行业的健康发展。
3 . 软件开发的组织机构
无论是项目型公司还是产品型公司,从事软件开发的组织或公司应该有一定的软件开发组织结构。一个合理的软件开发组织结构是确保软件开发质量的最基本保证,各个组织各负其责,可以确保软件开发按拟订的质量控制规则与软件开发计划进行,有利于软件公司软件质量与成本的控制。
3.1 软件开发组织机构设置
一般而言,对于产品型软件公司,其公司内部均会有一个类似与产品管理小组这样的一个组织,一个专门负责产品发展的产品经理部门。而项目型公司则相对简单一些,主要是针对项目进行定制开发,一般对项目的发展方向不做控制。但从项目开发演变为可推广产品的另当别论。一般来讲,下图4是一个典型的软件公司软件开发的组织机构设置。
3.2 组织机构的职责分工
在上述的组织机构中,各职能组织有各自明确的责权范围,完成各自的本职工作,各组织相互协调完成相应的软件开发与维护工作。
公司产品管理组:对于产品型软件公司而言,软件产品是其生存与发展的基础,公司对新产品立项、现有产品的发展方向及有关产品发展的重大决定均需由公司产品管理组来决定。
公司产品管理组一般由公司的执行总裁、技术总监、市场总监、产品经理、研发经理及其他必要人员。
产品管理部门 :产品管理部门是界于研发部与市场部之间的一个桥梁部门。产品管理部门的主要职责是负责产品发展策略的制定与执行,这里的执行包括软件开发前期的市场及需求调研,完成可行性分析报告,制定产品规格。参与软件开发项目组,并完成相关工作。
* 软件开发前期:用户需求分析、功能描述、运行平台与环境、市场定位、销量预测与售价;
* 软件开发后期:产品宣传资料、产品培训、促销与支持t;
研 发 部 门:研发部是软件开发的主体,主要任务是完成软件或的项目的开发工作。其工作内容通过各职能组实现。主要包括:
* 功能规范:功能规范列表及用户界面,确保写出用户手册;
* 开发活动:包括设计、编码、模块集成、Alpha测试与文档;
* 支持工作:软件配置管理与问题报告数据库;
* 项目计划:定义项目里程碑;
* 软件定版:IRL,
Architecture & QA:是软件开发的质量控制机构,主要职责是负责软件开发过程的质量控制。在软件开发的各个阶段,根据软件开发设计规范对阶段设计结果进行质量控制。及时发现问题、解决问题,确保进入下一阶段的设计符合设计规范要求。实现软件开发全程监控。
Architecture & QA为非常设机构,主要由研发经理、产品经理、资深系统分析远、测试经理等人员组成。根据项目进展需要,由研发经理召集进行项目阶段评审。
软 件开 发 组: 主要由各种角色的开发人员构成,完成开发任务。
CMO:(Configuration Management Officer)软件配置管理,对于一个具有一定规模的软件公司都会有一个软件配置管理机构,对于小型公司一般由项目经理带管,
CMO的主要职责是进行软件开发过程中的软件配置管理,以及软件定版后的维护管理。在软件开发过程中,由于多个开发人员协同工作,需要对其工作协同管理,确保协同工作的顺利进行。同时,由专人进行配置管理,使得大部分开发人员不会得到全部原代码,也有利于软件公司的安全保密工作。在软件定版后,由于软件的Bugs,功能的完善及各种原因导致的对软件的修改,版本的控制就显得极为重要,软件配置管理可以确保得到不同时间的软件版本。
软 件 测 试 组 :软件是软件工程的重要组成部分,软件测试组承担的工作主要是α测试。测试模块与集成测试由软件开发人员完成。对于项目软件开发,用户的计算机技术人员参加到软件测试与支持工作组,使用户参与整个软件的测试工作中。确保交付的应用系统是用户可信赖的系统。
在以上的软件开发组织机构中,不论公司规模的大小,以上的各个职能应该是健全的。明确的责任分工有利于软件开发的顺利进行于质量控制,同时,也必将有利于公司的成本控制,降低软件开发风险。
3.3 软件开发项目组的角色
一般来讲,一个软件开发项目组是由多个不同角色的人员构成,每种角色在软件开发中起不同的作用,各个不同角色的人员协同工作,完成软件开发工作。
典型的软件开发项目组由下列角色构成,如图5所示
在软件开发项目组中一般有六种角色,他们是:
①.产品管理
②.程序开发
③.程序管理
④.测试及质量保证
⑤.用户培训
⑥.后勤支援
在大型软件开发项目中,可以将每个角色赋予不同的个人。对小型项目,一个人可以肩负多个不同的角色。每种角色的人员在项目中起着同等重要的作用。每种角色都有其特定的任务及技能要求。
产品管理:产品经理负责建立及更新项目的商业模型,在确定及设置项目目标方面起关键作用。产品经理应确保项目成员清楚理解项目商业目的,并根据商业需求的优先级确定功能规范。同时,产品经理负责高层的项目沟通,如:商业项目的成本核算、合同洽谈,及向相关人员通报项目进展等。
程序管理:程序经理负责确定软件特色及功能规范,根据软件开发标准协调日常开发工作确保及时交付开发任务。协助产品经理完成项目需求文档,并根据需求文档起草软件功能规范。同时负责与系统分析、规范及框架结构有关的各种活动。管理与协调与外部标准与系统的互操作性,控制项目进度。程序经理是项目组成员间沟通与协调的核心。
程序开发:开发队伍负责交付符合功能规范的软件系统。开发队伍应积极参与功能规范的制定,在建立项目原型时开发人员与程序经理可以同步进行并提供技术可行性。在功能规范确立后,开发人员必须与程序经理就如何解决重大疑难问题达成一致。
测试与质量保证:测试与质量保证是保证系统符合功能规范的保证。为保证“零误码”测试/QA人员应积极参与开发过程,确保开发出交付符合功能规范的软件系统。测试/QA人员负责准备测试计划、测试用例、自动测试程序、执行测试工作、管理并跟踪Bug。测试工作与开发工作是独立并行的。
用户培训:培训人员负责设计编写离线及在线培训文档,包括演示材料。用户培训人员应参与用户界面和系统的设计与构造,并参与安装程序与安装过程的设计。参与系统的可用性测试及设计改进,与程序管理与开发有密切的关系,并确保系统的变化及时反映到文档中去。
后勤支援:后勤支援包括确保项目顺利进行的各方面工作。
对于一个项目组,建立一个良好的团队氛围是非常重要的,每个角色在项目中都是不可缺少的,项目的成功是团队成员共同努力的结果。鼓励成员的积极进取、高效、参与的团队精神,提高成员的责任感,避免造成团队或项目的成功依赖于少数个人的贡献。
3.4 开发组人员构成
根据软件开发项目组织的角色划分,对于中等以下规模的软件开发项目组基本包括如下几类人员:
① 产品管理人员:(产品管理与用户培训角色)
② 软件开发人员:(程序管理与开发角色 )
③ 软件测试人员:(测试角色 )
一般而言,产品管理人员同时担负用户培训的角色。程序管理角色一般由项目经理承担,而队后勤支持角色一般由研发部和公司统一承担,或由公司的信息系统管理人员协助完成。图6表示项目组的人员结构及承担的相关工作。