1.1系统特点
大型复杂软件系统大多是国家/政府/军方的重点建设项目,具有很强的政治背景,很多关系到国计民生甚至国际影响等。一般有以下几个特点:
- 系统研发团队的人员规模庞大,比如我们的团队就有200多人,还有几十个外协单位的团队,以及用户的需求研究团队、使用团队等,总的加起来有好几百人;
- 与用户需求要求捆绑紧密,一般会采用驻场开发的模式进行研发;
- 分系统/子系统/功能模块繁多,设计繁琐,相互提供服务,接口之间调用关系复杂,还涉及到与现有系统的兼容适配,总体集成和测试难度很大;
- 内外部协调管理难度很大,推进困难,进度、成本和风险难以控制;
- 耗费经费巨大,利益关系复杂,涉及的大学与工业部门、体制内其他外协单位、地方外协单位、以及大学内部各学院、学院内各团队之间,经费难以合理划分使用。
1.2角色划分
- 主管部门
负责顶层设计和提供经费的部门,同时也负责最终的验收。
- 使用总体
系统使用的主要部门,主要负责系统的需求分析、系统的环境建设以及最终进行的使用运行。
- 技术总体
技术总体负责整个系统的技术路线制定和信息系统的具体设计、研发和协调组织。一般来说,大学会进行总体的设计,其中部分系统大学自己组织研发,部分系统外协给地方的公司和企业,部分系统研制作为任务下达给体制内单位。
成立专门的项目办公室、技术指挥线和行政指挥线,技术指挥线向行政指挥线汇报,接受其领导和指示。
- 项目办公室负责项目团队的日常管理和保障,如项目相关的事务(如立项、评审、检查等),办公场地和用品,用车保障,出差的食宿安排,财务报账,聘用人员的工资发放,与协助单位的商务谈判、合同签订等流程处理。
- 技术指挥线负责系统的技术部分,由总师组和开发组构成。总师组一般由1名总设计师和多名副总设计师组成,由总师组对项目的技术体制和具体问题进行决策、指导和协调,每名副总师分管几个开发组。开发组由组长(主任设计师)、副组长(副主任设计师)、设计师及其所属的工程师组成,负责具体功能模块的设计和开发。开发组一般会分总体组、基础组和核心业务组,总体组协助总师组工作,负责系统的总体设计、总体集成和总体测试,以及软件开发过程的管理。基础组负责构建整个系统的基础部分,包括部署环境,基础业务平台和数据库相关平台等。核心业务组会具体对接用户的核心业务,进行设计和开发相关的业务系统。各位副总师一般会分管多个业务组,如一人管理基础业务组、其他人分管多个核心业务组等。
- 行政指挥线一般由学校领导任总指挥,学院领导任副总指挥,分别负责对外协调和对内管理。对外负责与上级、其他协作单位的协商工作;对内主要是学校大团队的管理和资源协调工作。
总师负责抓总,并对行政指挥线负责;副总师分别负责几个业务组的研发;主任和副主任设计师将分系统切分为子系统,负责组内总体工作,设计师设计具体的系统功能模块,并组织开发团队进行实现。
开发组的开发工作有以下几种实现方式:
-
- 各个开发组自己招聘工程师或利用劳务公司派遣的工程师,建立开发团队进行开发;
- 将部分系统及功能模块外协给地方公司,大学与公司签订技术协议和合同,负责提需求和验收,公司负责具体的开发集成工作;外协公司会在本公司内组织开发或者派出工程师参与大学的开发团队;
- 还有些子系统专业性太强,大学的研发团队设计不了,需要引入其他体制内的专业单位进行协作,一般挂个副总师单位的名头,让他们设计研发相关的系统。
这种方式也存在不少问题如:
-
- 相互关系复杂,信息流动和处理速度缓慢;
- 需要协作和协调的事情很多,从经费使用分配到功能模块的划分,需求的变更等,系统集成联调难以组织;
- 对于我们这种以新研发为主的系统更是影响较大,工作推进不畅;
- 导致整个组织和团队工作效率低下。
因此实际操作时一般会采用驻场用户单位,集中封闭管理,与用户紧密捆绑的开发模式,一边研究需求,一边开发系统,一边组织试用,以快速响应用户需求,提高系统研发的效率,缩小系统更新迭代的周期。
- 外协、招标与外包
1、外协
外协团队中除去销售和商务谈判的部分,其研发团队的组成和我们的开发团队和外包团队类似。外协团队的工作内容却和开发团队和外包团队有所区别。
外协团队将依据产品团队的系统研发需求,相对独立的完成其功能模块的设计、开发、集成、测试和部署等工作。外协团队的主要工作场所在其公司,研发过程管理也由其公司负责,当工作有阶段性成果时,产品团队对外协单位的成果进行检查指导,并对外协团队最终的开发成果进行组织验收。外协单位的开发成果如果需要与其他团队开发的系统功能模块集成时,一般会要求外协团队过来驻场与产品、开发团队进行联调联试,共同攻关。
2、招标
技术总体将系统进行模块划分,各个模块设计为可以相对独立开发的包,进行发布,由中标者完成系统研发。中标单位也是一种广义的外部协作单位,只是通过招标的方式确定,而不是技术总体指定。
3、外包
在研发大型复杂软件系统时,大学将系统开发任务以劳务外包的合作形式,让劳务公司派驻开发团队驻场参与大型复杂软件系统的开发研制。
外包团队由一名技术经理和多名软件开发工程师组成。外包团队开发力量是整个项目所有产品团队的公用开发资源,外包团队的使用、任务的安排由总师组直接指导,总体组(负责协助总师组工作的小组)具体组织与管理,各产品团队按需提报软件开发任务单及相关的软件设计文档等,具体指导开发过程、检查开发质量。外包团队的技术经理负责两方面的工作:一方面,对接软件开发任务单,与大学团队协商完成每个任务所需的工作量;另一方面,对其团队开发任务和所属人员进行统一分工、管理、调配和使用,并对最终开发成果负责,这点与开发团队项目经理职能类似。
在研发大型复杂软件系统时,大学将系统开发任务以劳务外包的合作形式,让劳务公司派驻开发团队驻场参与大型复杂软件系统的开发研制。
外包团队原则上进行统一管理、统一使用。
统一管理:后勤、生活保障等管理由外包公司负责;在驻场办公的日常管理遵守大学研发团队办公的相关制度。
统一使用:外包团队开发力量的使用、任务的安排由总师组直接指导,总体组(负责协助总师组工作的小组)具体组织与管理,各开发组按需提报软件开发任务单及相关的软件设计文档等,具体指导开发过程、检查开发质量。
外包团队由技术经理和软件开发、测试等人员组成。技术经理负责两方面的工作:一方面,对接软件开发任务单,与大学团队协商完成每个任务所需的工作量;另一方面,对其团队开发任务和所属人员进行统一分工、管理、调配和使用,并对最终开发成果负责。
开发任务安排流程如下:
- 开发组每周提交软件开发任务单和软件详细设计说明书,总体组负责整理汇总;
- 总师组讨论确定任务开发优先级排序;
- 按照优先级排序,开发组和外包团队进行具体对接,开发组明确开发任务和要求,提供详细设计说明书,大学团队和外包团队共同协商确定开发人员、预计开始和完成时间、所需人天、成果形式等;
- 外包团队接受开发任务后,采用项目管理系统进行项目管理和软件开发过程管理,包括开发任务管理、切分子任务指派给工程师(可分为设计、开发和测试等子任务)研发等,其开发进度和质量控制可在项目管理系统中方便查阅;
- 开发组对外包团队开发过程进行指导,设计人员经常性检查指导开发状态、进展,纠正偏差、督促按期完成;完成后,开发组与总体组一起验收成果,评估完成情况,结果由总体组存档;
- 总体组通过项目管理系统监控管理任务研发进度,回收任务,组织安排新任务进行开发;按照月度向总师组汇总外包团队开发完成情况。
1.3研发流程
开始调研立项论证准备;
1、查阅资料,调研国内外相关单位情况,撰写立项论证报告;
2、分析系统架构,功能模块,关键技术,难点,创新点,亮点等,撰写系统技术方案,进行概要设计;
3、与拟协作单位联系,调研其能力和产品,为开发选型做准备;
4、原型实现与概念演示,如自己编程实现、原型制作工具进行系统原型设计、开源的或外协单位的可用产品等;
5、其他工作,如做预算,审价,做汇报PPT等。
基本从0开始开发系统,没有已有的系统可供改造集成;
1、招聘工程师,组建研发团队,开始研发系统,如寻找一个开源的系统在上面修改扩展;
2、寻找地方合适的外协团队,协助商业合同与评审准备,如地方公司,将部分的开发任务交其开发,经常检查其工作进展;
3、寻找体制内的专业单位,与其对接需求,将其纳入大团队之中,经常检查其工作进展;
4、出差,驻场,与用户对接需求,部署系统试用,组织工程师驻场开发,外协单位集中联调等。
小组开发的系统基本可用,可演示,需要与其他业务系统进行集成,同时响应用户新的需求。
1、与其他业务组对接集成需求,将需求反馈至研发团队,确定完成时间;
2、理解业务,为支撑业务,落实领导指示对系统做需求分析;
3、与其他老师和研发团队进行需求分析讨论,确定系统需求,研发团队确定开发方案;
4、去研发团队检查指导,了解和查看其开发成果和进度,解决其问题;
5、其他工作,如制作培训教程,为其他人员演示讲解系统,部署系统至客户环境,协调集成联调环境等。
- 项目测试与验收阶段
- 撰写项目相关的文档,如标准规范文档、需求文档、设计文档和测试文档等
- 对各个功能模块进行验收测试,撰写模块测试报告
- 对大系统进行集成测试和应用测试,撰写系统测试报告
- 搭建验收演示环境,部署相关系统
- 组织各类评审
功能模块的验收测试
当前期研发的功能模块受到用户的认可以后,需要这些功能模块作为更大系统的组成部分融入到新的大系统之中。此时需要按照大系统的技术体制对现有开发的模块进行改造,改造完成以后,再由大系统的测试部门对这些模块进行验收测试。模块验收测试的流程是先技术体制符合性检查、再代码静态检查、最后进行功能测试等内容。按照规定只有上一阶段的错误归0后,才能进入下一阶段的测试,版本升级后必须进行回归测试。
整个组织流程如下:开发人员将webapp打包后入库->系统配置人员进行菜单配置->系统部署人员将应用部署至测试环境->测试人员在测试机上进行测试和记录问题,开发人员从旁讲解协作->开发人员修订系统,完成后返回至第一步。
大系统一般会提供模块集成框架、集成规范、底层的公共服务等,新的功能模块改造后作为其框架上的插件进行使用。
技术体制符合性检查
这里一般会包括:
- 界面规范检查:检查模块的前端界面是否符合开发规范,包括字体、颜色、配色方案、底色等,能够使得新的模块与原系统框架和模块在界面上统一和和谐一致;
- 数据访问规范检查:由于数据的私密性,功能模块不能直接访问数据库,而必须通过一个统一的中间层框架进行访问,这个中间层大系统可以进行统一的管理和规范,模块需要根据自己的需要开发中间层的实现注册至数据访问管理框架之中;
- 数据库设计规范检查:包括库名称、表名称、字段名称、注释、约束等要求,要求保证数据的一致性,即模块从大系统中的公共数据库中获取数据持久化至模块私有库时,如果公共数据库的数据发生变化,私有库的数据可能存在不一致的风险和隐患;
- 服务规范性检查:当模块提供服务给其他模块使用时必须通过服务框架进行,每个模块需要按照服务开发规范开发的服务,注册至服务框架供其他人或自己使用。模块调用服务也必须通过服务框架进行。其注册和调用过程由服务框架管理和监控;
代码静态检查
使用商业的软件,如klocwork进行,安装其要求,不能有1~4级的错误,待错误归0后,可以申请功能测试。Klocwork支持java、c、c++和c#语言,对代码分析比较快,分析结果能够导出为word或者Excel,同时给出代码修改的建议。建议编写代码的工程师可以将自己的写的代码自己拿去用klocwork分析,对代码编写能力的提升会有不小的帮助,写出能通过其测试的代码也算是老鸟了。
这里值得注意的是,由于知识产权的原因,模块开发的源代码并不提交给大系统总体,代码审查结果可能存在开发人员隐瞒的情况(如将部分代码私自隐藏,不参与代码审查等手段)。而且对于web应用开发而言,klocwork只能测试后台代码,前台的JavaScript代码并不支持,这对于有大量的前台代码的web应用而言也不太合理。
功能测试
按照功能测试的用例,对模块进行测试,同时对界面上可以点击的按钮和链接、可以输入的框等都要进行测试,模拟最终用户的使用过程,有时候还得配合使用数据库进行查验。
这里没有说到性能测试,因为系统性能和服务器的配置、网络状况等相关,而现在的服务器是基于windows虚拟机的应用服务器,服务器资源不足,并且时间非常紧张,因此大系统暂时没有要求和测试。
1.4质量管理
项目管理需要纳入质量管理体系,遵循相应的质量管理标准,进行过程和结果的管理。比如在软件开发过程中,需要按照软件开发标准提供的各类开发文档以及评审记录,进行规范化审查,以满足质管要求。