国内外比较

本文探讨了中美软件开发管理的差异,强调了软件配置管理的重要性,并详细介绍了如何使用版本控制软件来有效管理大规模软件开发项目。

中美两国软件开发管理的比较与启示

杨锦方

 

在美国学习和工作期间,我注意比较了中美两国软件公司在软件开发管理和技术方面 的不同之处。下面以我在硅谷一家从事企业语音识别平台软件开发的公司工作的经历为例, 介绍我的一些观点。
   
第一,软件工程师年龄和经验的反差。我工作过的是一家NASDAQ上市公司,公司 只有5年时间,但是近一半的软件工程师、软件项目经理和软件设计师都不算很年轻,并 有着5年以上的软件开发经验(不包括在校期间的经验)。其中部分软件设计师(software architect)更是年龄在35岁以上(有的甚至已经45岁),有着15年以上的软件开发经验。 在开发过程中,这些软件设计师的经验成为公司的宝贵财富。他们在多年开发过程中积累 的大量经验、教训能够让系统在设计阶段就避免许多后来让人走弯路的事情。权威的软件 工程专家RogerS.Pressman在他的SoftwareEngineering:口practitioner approach一书中指 出,软件质量保证体系最重要的是软件项目刚刚开始的需求和设计阶段。反观国内的软件 工程师,绝大部分是刚从学校毕业不久,而且多半的软件工程师都定位在将来做管理者, 这样,经验无法积累,低水平重复的现象就在所难免了。
   第二,软件开发管理职位设置的差异。在国内,软件公司通常只指派一位项目经理, 由他全面负责单个项目的开发和管理工作。如果项目经理不是技术高手,手下的软件工程 师们就会有牢骚,如“凭什么你没我水平高,却坐着比我高的职位,拿着比我高的薪水?” 这使得许多软件公司雇佣技术高手担任项目经理。他们中许多人缺乏管理方面的能力和意 识,由他们领导的软件开发难以实现规范化和工程化。实际上,项目管理更多的是需要管 理技能而并非开发经验,而管理水平高的人大多数并不擅长技术,更有一些管理人员原来 不是受高等计算机专业教育出身,而是半路出家。在美国,我接触过的所有软件公司(或 者有软件研发部门的计算机、通信技术公司)的软件项目小组都设有两个管理者的职位: 软件项目经理(proiectmanager)和软件设计师(softwarearchitect)。软件项目经理负责小 组人力资源、激励、非技术方面的管理,并向上级负责。软件设计师负责项目的规划设计、 技术方案选择等并为此负责。就像项目经理有一个职业发展道路,从项目经理到部门经理, 再到总经理,甚至总裁一样,软件设计师也有其职业发展道路,从软件项目小组的软件设 计师到软件部的软件设计师,再到公司的首席软件设计师。我想大多数人都注意到比尔·盖 茨的头衔,是微软公司chairman和chiefsoftwarearchitect,也就是微软公司董事长兼首席 软件设计师。可以想见,首席软件设计师的地位也是很高的。在更大规模的软件项目中, 系统工程师(systemengineer)和测试部门是单独设置的。
   第三,开发管理应用软件水平的差异。美国绝大多数软件公司的软件开发管理应用了 大量的先进软件,而国内的软件开发管理几乎是纯手工操作。本来,软件公司是为所有需 要软件应用技术和解决方案的行业提供软件,其中也包括软件行业自身。具有讽刺意味的 是,国内许多从事软件开发的公司为别人提供了非常有价值的软件,创造了很高的效益, 却没有意识到(或者没有决心)自己也需要投资购买或者自行开发用于管理软件开发过程 的软件。许多美国公司根据自己的实际需要,开发用于辅助软件项目管理的软件,例如, 著名的电信设备制造商朗讯公司的大型软件工程管理软件(Sablime)就是自己开发的;许 多软件工程师自己用脚本语言写小工具,优化工作流程,提高工作效率。本书的主题CVS 系统正是从一些软件工程师在自己工作过程中写的一些脚本程序起源的。在美国,流行的 脚本语言,如Peri、BournShell/CShell、Python、TCL/TK等应用非常广泛:而在国内,这 些语言应用十分有限。
   第四,软件开发流程的差异。美国水平比较高的软件公司软件开发流程十分规范,技 术文档和使用文档非常细致,量非常大。在大项目的开发过程中,各种各样的表格更是数 不胜数。按照一位经理的说法,是“所有的事情都有文档记录”。不仅如此,美国更有technical writer(技术写作师)这个职业,许多公司聘用专门的技术写作师完成部分技术文档和使用 文档,尤其是给最终用户使用的使用指南一类的文档,更需要专业水平才能达到实用和易 用。国内这方面的差距较大:软件工程师视文档为负担:项目经理本身是软件工程师出身, 更加没有动力实施这些规范;公司老总可能又不懂软件开发管理。于是低水平现状是想躲 都躲不掉了。
   可喜的是,目前CMM认证正逐渐地在国内流行起来,有越来越多的软件公司重视流 程。更重要的是,不把通过CMM认证作为目的,而是真正贯彻规范和经过实践证实有效 的软件流程。不过,对于许多规模小、实力不强的公司而言,CMM认证负担太重,而且 不一定实用。记得有一位中型软件公司的老总对我说,“CMM那些东西全都是文档,不管 用。”这件事情可以得出三个结论:一是CMM这种先进管理技术真正得到认同还有一个过 程,二是CMM的实用价值在一些管理阶段还不是太大,三是CMM可能的确需要进行适 当的改造以适合中国的国情。
   我接触过国内许多软件公司,这些公司中的绝大部分其开发管理的混乱状况让我非常 吃惊。我也一直听到这样的议论,“国内绝大部分的软件公司都是软件作坊,基础不行,软 件业怎么发展壮大?”我相信造成国内软件业落后的原因是多方面的,但是,我们的确需 要认真思考如何补上提高软件开发管理水平这一课。
   有人说,中国的软件工程技术水平低下和中国人的特点有关系。我认为这是无稽之谈, 是为管理水平过于低下找借口。在国外,同样是中国人做软件工程师,同样是中国人做软 件研发管理,为什么他们做得那么出色,赢得同事们的尊敬?
   我接触到的中小型软件公司大部分都抱着提高开发管理水平的美好愿望,也有些公司 在进行着各种努力。例如,CMM正在一些中、大型软件企业中兴起。但是,CMM流程模 型引入的代价很高,而且在水平很低的情况下过分强调CMM中的模型恐怕也没有太大价 值。CMM的有效实施实际上是建立在强大的CASE工具基础之上的。
   我在美国软件公司的工作经历告诉我,有一些非常有价值,,实施起来代价相对较低的 技术,能够帮助国内许许多多的软件公司走出作坊时代,进入软件开发流程化的阶段。这 就是我们准备写作出版“软件研发管理技术丛书”的主要目的。真切地希望这套丛书能够 为广大软件工程师和软件公司带来实实在在的变化。

 

规范软件开发过程


    规范软件开发过程
    ——软件配置管理实践

    ■ 中国建设银行信息技术管理部  杨忠伟

    随着软件系统的规模、复杂度日益上升,软件开发过程管理已经成为保证软件系统开发效率、质量、成本的关键性因素。作为软件开发过程中质量保障的重要组成部分,行之有效的软件配置管理(以下简称SCM,Software Configuration Management)能够显著提高软件开发组织的自身能力、提高软件开发过程的完整性,以及降低软件开发的风险。

    软件配置管理的概念

    ISO 9000、CMM、ISO/IEC 12207、IEEE 729-1983对SCM的定义有不同的描述。ISO9000定义SCM为“一个管理学科,它对配置项的开发和支持生命周期给予技术上和管理上的指导。配置管理取决于项目的规模、复杂程度和风险大小”。

    CMM2将SCM定义为一个关键过程域KPA,是“贯穿于整个软件过程中的保护性活动,它被设计来(1)标识变化,(2)控制变化,(3)保证变化被适当的发现(4)向其他可能有兴趣的人员报告变化。”。SCM包括了配置项识别、工作空间管理、版本控制、变更控制、状态报告、配置审计等活动,其中以版本控制最为核心和关键。

    数据集中工程软件配置管理策略

    1、 数据集中工程项目背景

    中国建设银行数据集中工程的目标是通过建立总行级的数据中心,向全行38个一级分行、20000多个网点提供完整的核心金融服务。其核心应用系统DCC-CCBS包括主机、前置、前端三大部分。主机应用部分部署在总行级数据中心,前置应用部分部署在数据中心前置通信网关、各一级分行业务大前置,前端部分部署在网点。

    DCC-CCBS项目的SCM需要实现开发、发布、部署的全过程软件配置管理。开发过程SCM的核心是系统源码版本管理;发布过程的SCM核心是系统目标码版本管理;部署过程以确保系统目标码版本在数据中心、一级分行、网点和外系统的正确部署为首要目标。

    2、 开发过程软件配置管理

    系统源码版本除系统源程序、参数外,还包括需求规格说明书、系统总体架构设计说明书、主机/前置/前端系统结构设计说明书、各子系统的详细设计说明书、各子系统的对外接口规范、业务操作手册、系统使用手册、系统安装维护手册等文档。根据配置项的不同属性,经过评审,形成需求基线、设计基线和源代码基线等不同的基线。开发过程SCM按照子系统的性质,分为主机、前置、前端三部分独立管理。

    DCC-CCBS项目总体组负责整个需求和变更的控制。通过审批的需求按照功能分布分解为主机、前置、前端的子需求,再由各部门分别管理和实现。环境及版本控制小组负责向各部门提出形成“系统基线”的要求,以同步主机、前置、前端的源码版本。

    3、 发布过程软件配置管理

    发布过程的系统目标码版本包括系统目标码(执行码)、系统参数及相关文档等。按照用途,系统目标码版本可分为测试版和正式版。以前置平台为例,发布过程SCM的主要活动包括:

    ● 构建环境管理,保证编译环境的纯净性和正确性;

    ● 构建过程管理,保证构建过程的自动化操作,及其正确性和完整性;

    ● 版本编号管理,统一版本命名规则,确保目标码版本号的唯一性和可追踪性;

    ● 目标码版本生成管理,从各版本管理工具系统收集、整理、打包相应的目标码、参数和文档,形成完整的或部分(补丁)的目标码版本;

    ● 配置状态检查,检查目标码版本包中内容的正确性、完整性和一致性;

    4、 部署过程软件配置管理

    部署过程SCM的主要任务是:建立安全、可靠和迅速的传输流程和传输渠道;建立目标码版本记录和追踪机制、版本运行时刻检查机制和版本恢复机制;确保正确的版本、按照正确的渠道、在规定时间递交到正确的用户并生效。

    在DCC-CCBS生产环境中,软件开发中心将通过数据中心版本管理系统发布各单位所需的目标码版本,各单位在版本管理系统和数据传输通道的支持下,实现版本/补丁的主动分发、查询、下载和生效。

    软件配置管理实施经验

    1、 树立正确的企业配置管理意识

    SCM是一门管理学科。归根结底,其关键是“管理”,然后才是“软件配置”。项目级SCM能否成功实施,与企业的软件配置管理目标、策略、能力、组织和资源息息相关。

    2、 提高全员的配置管理素质

    SCM是规则和流程的集合,需要依靠流程中所有部门和人员共同的支持和努力。任何环节上的疏忽和懈怠,都将直影响SCM的实施效果。

    3、 采用合适的工具

    功能强大的或昂贵的工具未必是合适的工具。往往20%的功能即可解决80%的配置管理问题。目前比较流行的版本管理工具包括CVS、PVCS、ClearCase、Harvest、VSS、Endeavor等。在选择具体工具时,往往需要考虑以下因素:(1)工具将要使用的范围;(2)工具自身的功能、稳定性、扩展行,以及对环境的要求;(3)工具使用的复杂度;(4)工具与其他流程和工具的集成度和交互性;(5)工具的投资和维护费用。

    4、 及时的检查和梳理

    大系统开发过程中,配置管理往往采用分步离散管理方式,因此保证整个系统配置管理的完整性成为一件精密细致的工作,需要投入大量人力及时修订基线,防微杜渐,避免混乱,以满足对配置管理正确性、完整性和及时性的要求。

    5、 系统化思考、分步实施、持续改进

    SCM不是一项孤立的管理活动。企业的战略目标、管理能力、文化背景、组织结构,项目的规模、性质、技术、人员等都是影响SCM决策的重要因素。因此需要在项目乃至企业的整体环境中系统的考虑SCM的实施策略和方法。

    通过分阶段实施量化的、渐进的配置管理目标,可以避免由于引入复杂管理流程所造成的混乱,有利于方便灵活地优化配置管理流程。同时,阶段性目标的实现将有助于整个团队提高士气、增强信心,并逐步提高开发队伍的配置管理素质。 



应用版本控制软件管理软件开发

作者:周军 04-03-05   

 

    摘要:本文详细介绍了在大规模软件开发中使用版本控制软件来管理软件开发的具体实施方法。
关键字:版本控制软件 提取(Chink-out) 放入(Chink-in) 冻结(Freeze) 解冻(Unfreeze) 应用 登记(Register)

一. 引言:
随着计算机应用范围的日益广泛深入,应用软件的规模及复杂程度日趋大型化、复杂化,这就导致软件开发的方式也从早期的单兵作战式或手工作坊式渐渐转变为集团化、工厂流水线式的团队协作开发方式。在这种开发模式中会遇到一些非常棘手的问题:
1. 需要将整个软件版本恢复到以前的某一时间的状态。
2. 控制某一程序在同一时间只能一个开发人员修改。
3. 限制随意修改程序。
4. 对每个开发人员编写的程序质量进行评估...
如何解决上述问题,管理好项目的每一步运作,成为每一位项目主管亟待解决的课题。

二.在软件开发过程中引入版本控制软件
通过我们的实践,发现在开发过程中采用版本控制软件能较好的解决上述问题。目前,一些版本控制软件能够与各种流行的开发工具进行无缝的连接,它们有机地结合在一起,能够完整地保存开发中对应用程序每一个源文件所有的修改记录,因此充分地利用版本控制软件能够对软件开发进行卓有成效的管理,其具体表现有以下几个方面。
1. 随时将程序回复到以前某一时间点
版本控制软件可以将某一程序恢复到以前的某一时间的状态,甚至将整个软件版本恢复到以前的某一时间的状态。它能比较程序的不同版本,方便地识别出被修改、删除或插入的具体行,可以将两个不同版本的修改合并到一个新文件中,如果一段重要的代码被删除了,它可以迅速恢复这段代码。
2. 实现程序的互斥性修改
版本控制软件能够实现某一程序在同一时间只能一个开发人员修改。其具体实现方式是:需要修改程序的开发人员从源文件存放处提出(Chink-out)一个程序,这时其他开发人员就不可以再Chink-out同一个程序了,只有当第一个开发人员修改测试完成后,将更新版本的代码做放入(Chink-in)操作,其他开发人员才能Chink-out同一个程序。
当然,如果有必要,现在有些版本控制软件也可以配置成允许多人修改,即同时Chink-out同一个程序,最后可以将不同版本的修改合并到一个新程序中。
3. 对程序修改进行有效的管理
在版本控制软件中可以将用户分为管理员和程序员两种角色,只有管理员可以将程序冻结(Freeze)和解冻(Unfreeze),被冻结的程序是不允许修改的。修改程序的流程为:
(1) 用户提交需求书,程序员提交程序设计说明书,项目主管审核通过后,管理员将程序解冻。
(2) 由程序员Chink-out程序。
(3) 程序员修改程序。
(4) 修改完成后程序员提交测试请求给测试小组,测试小组进行测试;如果测试不通过,转向第(3)步。
(5) 测试通过以后程序员填写本次修改解释,然后Chink-in程序。
(6)管理员将程序冻结。
至此完成一次程序的修改。在软件开发后期或者软件正式投入使用时,这种方式对保证软件的稳定运行能起到非常重要的作用。
4. 将开发环境与测试环境、运行环境进行有效的隔离
比较大型的软件开发项目都有专门的测试小组。采用版本控制软件后,开发人员有自己单独的开发环境,测试人员有自己的测试环境,其具体实现方法见第三部分的说明。
项目进行到一定阶段,可随时用版本控制软件生成一个新的版本,投入运行。生成运行版本时可以选择丢弃以前所有的修改记录。
5. 评估软件开发人员编写的程序质量,控制软件开发的进度。
版本控制软件完整地保存开发中对应用程序每一个源文件所有的修改记录,这些记录包括完成修改程序的开发人员,修改的时间,所进行的具体修改以及对本次修改的解释。项目主管通过调阅这些记录,对程序修改的次数,修改原因和修改情况进行统计,就能够对每一个程序员编写的程序质量进行综合评估。这些记录还能使项目主管对整个项目的进度,程序的编写修改情况有一个整体的了解。
6. 管理文档
版本控制软件不仅为各种开发软件提供了存放对象的接口,还能存放任意类型的文件,这样我们可以在版本控制软件中建立专门的文件夹,用来存放软件开发过程中生成的各种文档,对于每个文档可以存放它的多个版本,供随时查阅。

三. 具体实施
介绍完版本控制软件的功能后,下面将详细描述版本控制软件的具体实施方法。目前常用的版本控制软件主要有:
Sybase ObjectCycle
Microsoft Visual SourceSafe
常用的开发工具有:
Microsoft Visual Basic
Microsoft Developer Studio (C++, J++,Interdev etc.)
Sybase PowerBuilder
Sybase Optima ++ (WATCOM C++)
Insprise Dephi
为叙述方便,我们假定开发的基本环境是采用ObjectCycle 2.0作为版本控制工具,PowerBuilder 6.0作为软件开发工具,如果采用别的软件,方法大同小异。
在开始之前,我们想对PowerBuilder的开发做一个简要说明。PowerBuilder的程序是放在库中,库以pbl作为文件的后缀名;PowerBuilder的入口程序称为“应用”(Application);要运行程序,需要首先在“应用”的“库搜索路径”(Library Search Path)中添加所有系统需要用到的库;如果一个对象在两个以上的库中存在,系统将引用“库搜索路径”中在前面的库中的对象。
1. 建立用户
首先在ObjectCycle中建立用户,并将用户分为管理员和程序员两种角色,管理员可以对其他用户进行管理,可以冻结和解冻程序。一般为每一位开发人员在ObjectCycle建立一个相应的用户。
如果软件开发人员比较多,可以在版本控制软件中建立多个文件夹(Folder),将一个开发人员所编写的所有程序全部放到对应的文件夹,这样便于查找程序的编写者。如果项目模块比较多,还可以分模块建立文件夹。
2. 建立开发环境
(1) 首先建立一个局域网,将其中一台电脑作为版本控制服务器,安装版本控制软件服务器部分的程序,所有的源程序也安装在服务器上,并将存放源程序的目录共享出来。
(2) 开发人员的电脑只需安装版本控制软件的客户端部分和PowerBuilder。安装好程序以后,每位开发人员运行PowerBuilder,将服务器上共享目录中的库文件添加到应用的“库搜索路径”中。
(3) 在PowerBuilder中建立自己的工作库,将工作库放在“应用”的“库搜索路径”中的最前面。这样做的原因是:每位开发人员只是将自己工作库放在在“应用”的“库搜索路径”的最前面,测试人员的“库搜索路径”包括与他配对的开发人员相应的工作库,这样就实现了每位开发人员都有自己独立的开发环境,未修改好的程序不做Chink in就不会影响其他人员使用已测试过的系统,测试人员也就有了一个独立的基本稳定的测试环境。
3. 将程序登记入库
每位开发人员运行PowerBuilder,在库管理功能中选择版本控制软件为ObjectCycle;用管理员提供的用户名及口令连接ObjectCycle Server;定义用户可用的文件夹;将自己编写的程序登记(Register)到ObjectCycle中。
所有程序登记完成后,由管理员将所有程序冻结。
4. 修改程序
如果要修改程序,必须由用户提交需求书,程序员提交程序设计说明书,管理员才将程序解冻。程序员将程序Chink-out到自己的工作库,修改程序,测试正确后,提交测试请求。测试人员进行测试,如果测试不符合要求,提交程序员继续修改;如果测试成功,程序员填写修改解释,然后Chink-in程序,管理员将程序重新冻结,完成程序的修改。让测试人员测试无误后才Chink-in程序,可避免错误的程序影响其他人员使用和测试应用系统。
在PowerBuilder中,Chink-out为互斥的,如果一个开发人员Chink-out一个文件,那么只有到该程序被Chink-in时,其他开发人员才可以Chink-out该文件,保证了程序的一致性。
在PowerBuilder中,开发人员可以方便地查看以前修改程序所填写的解释,可以根据需要将程序恢复到以前的某个版本,放弃当前版本。
5. 新版本的生成
项目进行到一定阶段,可以在PowerBuilder中建立一个新的版本,新版本的目录名程序名都可以选择新的名字,可以保留或放弃以前的修改记录。

四.结束语
总之,在一个项目小组开发环境中,版本控制软件的采用是非常必要的,它就好象建立了一部软件开发的编年史,不仅仅对软件的版本进行了控制,还能够协调多个开发人员的工作,对整个软件的开发过程进行有效的管理,大大提高了软件开发的效率,收到事半功倍的效果。


参考文献
[1] PowerBuilder Help 
[2] ObjectCycle Server Help

作者:周军
工作单位:中国银行湖南省分行信息科技处
通讯地址:湖南省长沙市韶山北路263号45号信箱(410011)
联系电话:0731-4472473        0731-4135012

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值