王菁华、边梦琦、董春杨、王洁、凌咸庆 /北京航天长征飞行器研究所
随着软件产品在武器装备中所占比重不断增加,软件研发工作的难度和复杂度不断提高。一方面,软件功能的不断增加导致编写规模不断扩大,另一方面,研制周期的不断缩短导致管理难度增加。
随着软件承研项目越来越重要、复杂度越来越高,软件研制在功能实现、编写规模、研制时间等方面均与以往不同,特别是在软件流程研制上提出了更为严格的要求。为此,北京航天长征飞行器研究所的软件研制流程采用了更科学的软件项目管理手段,以保证在“多、大、快”的时代背景下,高效率、高质量完成军用装备研发工作。
经过不断摸索与实践,2019年12 月研究所通过GJB5000A三级的认证工作,由GJB5000A二级水平提升为GJB5000A 三级。截止目前,该体系在研究所运行已一年有余,使用范围包括多个研发部门的型号研制团队,为40 余个软件项目提供管理支撑,也为研究所后续开展和推广软件项目管理工作积累了丰富的工程经验。
团队以软件项目计划与控制的理念为出发点,以军用软件能力成熟度模型为理论依据,针对研制流程模式进行不断探索和尝试,提出符合研究所实际需求的改进方法,力图寻找一种具有研究所特色的软件项目管理模式。通过不断改进,取得了一定效果,形成了一系列富有成效的管理措施。
基于GJB5000A 二级的管理经验,团队从资源分配角度对人力资本、项目资源、时间投入等要素进行项目估算,并制定软件开发计划,力图在项目伊始就勾勒出研制流程整体轮廓,为后续项目管理工作奠定良好的基础。
为达到软件研制要求,团队对整个研制过程中的各项具体活动进行分解,将目光聚焦于与研制过程息息相关的3 个方面,分别是时间、工作量以及人员。对照软件项目生存周期模型,依照“项目—任务—工作—日常活动”的WBS,从项目顶层进行分解,直至可操作的日常工作。
(1)规模量估算
首先,根据任务书明确软件需求,将软件项目从一级任务分解至二级任务,如表1 所示,包括“软件初始化”“软件自检”“时间同步”“参数装订”等。其次,对二级任务进一步分解,细化代码功能,如将“软件初始化”分解为“DSP 存储器初始化”、“内部锁相环始终电路”及“外设时钟模块寄存器”等。最后,依据二级任务确定开发方式,或沿用已有软件,或修改已有软件,或进行软件新研,并辅以软件研制经验确定各项二级任务的软件编写规模。
表1 规模量估算表
(2)工作量估算
在软件研制中,工作量一般以“人/小时”为单位进行计算,将二级任务作为工作量的最小单元,结合软件语言、软件关键等级、人员熟练程度等因素计算总工作量、总时长等信息。
(3)进度值估算
在“规模量估算”及“工作量估算”的基础上,可进行研制进度估算,为每项二级任务估算时间周期,即各项任务的起止时间。值得注意的是,在分解过程中不仅需对软件代码编写时间进行估算,也需为各项配置项文档编写时间进行估算。
首先,为研制活动的各项日常工作分配系数,各项日常工作系数总和为100%。其次,根据权重及工作量估算计算得出计划工时,具体公式为:计划工时=工作量估算×分配系数。接着,根据计划时间与人员工作时间的关系计算得出计划工期,具体公式为:计划工期=计划工时/人员工作时间。最后,依据研制经验,估算项目组成员在各项评审、质量保证等工作中的时间花费,形成完备的进度估算表,如表2所示。
表2 进度估算表
实际工作的开展将参照进度估算表进行,如出现任务延迟或提前的情况,可及时得到偏差结果,并在软件研制项目组中进行讨论。
相对于其他的工程项目,软件项目受到来自物料、设备、场地等因素的影响较小,人力资源是软件项目的主要资源,项目组成员有不可取代的作用。研究所目前承接的软件研制项目也因为“专业多、人员多、环节多”等特点更加依赖成员。
软件项目组成员的作用不仅体现在具备足够的软件专业能力及GJB5000A 体系管理意识,也体现在在一个复杂研制流程中是否可以将自身能力发挥到最大化。
(1)角色划分
目前,研究所承接的软件研制项目编写规模复杂、涉及专业众多、集成度高、参与人数庞大,与传统研制方式有很大区别。这就要求软件项目成员在流程中明确职责并了解工作内容,以此提高每一环节的工作效率,达到“1+1 >2 ”的效果。
同时,研究所设计人员人均承接3~4 个不同型号的不同软件项目工作,人力资源紧张,且用户方提出型号研制平均周期为18~24 个月,为避免因在型号研制期间中途换人、时间安排不开等问题的影响,软件项目组人员安排及所属角色设置至关重要。
通过角色划分的方式(见表3),明确项目组成员在软件研制过程中承担的职责,以及在管理流程中被赋予的权限。以角色定位划分的方式明确工作范围,同时,在跟进软件研制进度时也可一目了然,准确定位问题环节所在负责人。提高软件研制效率,避免“推诿扯皮”“踢皮球”的现象发生。
表3 某项目人员角色分配
(2)能力提升
为保障软件研制流程顺利进行,需要不断提高项目组人员的专业能力及体系意识。通过体系要求的2 个“专用目标”和7 个“专用实践”开展能力提升工作。一方面,针对软件研制项目开发人员、测试人员等开展专业培训。另一方面,根据软件项目管理要求开展管理培训。以传统培训开发理论“需求分析—计划制定—效果反馈”为依据制定全年培训内容,以此帮助项目组成员提高自身能力,改善工作效率。
在项目研制中,通常以开会或电子邮件的方式向项目负责人或更高级领导人员汇报项目进度。这样的方式导致项目开发人员需要花费大量时间在沟通和编写文档上,是一种不高效的反馈方式。
团队在GJB5000A 二级的基础上优化反馈方式,从每项工作、定期汇报以及整体进度3方面改进,软件项目组成员可直接进行进度反馈。同时,在实际进度与估算进度产生偏离时,可以及时釆取有效措施,保证项目按期完成。
(1)日常工作日志填写
经过WBS 分解软件项目后,将研制任务分解成可执行、可量化的日常工作。软件项目组成员在每进行一项日常工作后,立即填写当日完成情况的工作日志,记录内容包括进度百分比、实际用时等信息。
之前在进度估算表中已对每项日常工作的总工时及总工期进行了估算,通过对比实际用时与估算时用的差异,完善估算方法,为后续软件研制项目积累研制经验,丰富组织资产库。
时至今日,传统中国山水画的创作者们仍然在从前辈的画作中汲取营养,学习他们甘于平淡的艺术精神。从政治经济环境来说,现今的社会和古代社会已发生了天壤之别,当今的山水画作者所处的时代背景决定了他们并不会完全像古代画家一样去追求离尘出世。然而中国文化的内核一直未曾改变,都是以儒释道为核心的。这一点决定了中国山水画的艺术追求不会发生根本的转变,隐逸山林、心生出离的基调也不会彻底改变。
(2)双周报制度
工作日志是为了监控每项工作完成情况而填写的,双周报制度则是为是否完成阶段研制目标而设立。一项日常工作的进度偏差对整个项目进度的影响并不明显,但一定时间内的完成情况汇总可累积体现出与估算时间的偏差。
软件项目成员将每双周完成的工作汇总成为项目进展报告。一方面,全面掌握一定时间内的配置项编写、入库等情况,另一方面,可从双周报的完成情况监控研制进度。
(3) 项目进度管理一览表
在工作日志和双周报的基础上,形成软件研制流程的进度管理表。表中的每项工作即是项目统筹时分解出的二级任务,也是在实际工作中必须进行的项目关键路径。通过进度百分数可直观掌握项目进度情况。同时,通过综合衡量项目进度,可使软件项目组成员对所负责的工作提前进行安排,避免因安排不合理导致研制时间缩短而造成质量隐患,影响型号整体研制进度。
在实际软件研制过程中,软件需求因软件任务书的不断更改而变化,导致软件状态不断更新,产生众多版本的源程序。软件版本的管理一直是软件研制中的痛点和软肋,版本状态管控不清晰对于整个型号研制存在巨大风险和质量隐患。团队针对版本不清的问题持续改进,以风险分析为落脚点、优化配置项管理为抓手,消除软件版本状态不清晰产生的隐患。
(1)动态风险分析及跟踪
风险是指某个意料之外事件所带来的负面影响,可能发生或不发生。如果发生该事件将对整个研制流程造成严重的后果。所以风险分析在研制流程中就显得十分重要,它是整个软件研制流程中的“瞭望塔”“烽火台”。
团队针对实际软件研制流程的4 大类管理过程的7 个过程域进行风险动态识别,从“需求风险”“计划风险”“人员风险”“环境风险”“技术风险”5 个维度对新出现的风险点进行及时评估和跟踪。
参考所级资产库的组织风险库列表,通过“风险可能性-风险影响—风险发生时段—计算风险值—制定风险管理计划”的路径识别研制流程中可能存在的风险,如表4 所示。
表4 某研制过程中的风险识别表
通过“风险值=风险可能性评估值×风险后果评估值×风险发生时段评估值”的风险计算公式确定风险等级,形成项目风险列表,并根据软件研制进度动态识别是否产生新的风险等问题。
(2)强化软件配置项管理
“配置管理”的概念相较于“软件版本管理”的概念范畴更为宽泛,进行配置管理有利于软件版本的管理,清晰掌握软件状态的变化。在GJB5000A 二级的工作基础上,团队组织讨论并修订配置管理过程模板,强化配置管理员责任,明确配置管理过程,加强全体项目组成员的配置项管理工作的意识。
首先,加大对配置管理报告的审查强度,并做好基线的管理工作,严格划分功能基线、需求基线及产品基线。其次,形成配置管理双周报,及时掌握软件配置项入库状态,杜绝“缺、漏、差”的现象发生。最后,严把软件配置项入库的流程审批。力争做到软件状态清晰可查,从根源提高软件研制质量,杜绝低层次质量问题发生。
随着GJB5000A 三级体系在我所的不断运行与经验积累,软件研制流程也更加科学化、系统化、程序化。目前该体系运行已覆盖多个军品研制部门及科研管理部门。为使研制流程更加流畅、软件质量更加可靠,以“培训”“构件”“样例”“经验教训”4 个维度搭建部门级资产库。
通过搭建部门级资产库,以不断滚动积累的形式保证了知识财富稳定地增长,同时减少在项目研制过程中对某一特定人员的依赖。新员工亦可通过资产库快速了解并接手研制工作,降低了因人员更换带来的人员培训成本。
根据实际工作的需要不断迭代更新配置项模板样式,使模板更加贴切实际工作,使软件研制流程中的文档编辑工作更加简化,方便设计人员开展及进行各项计划、说明的编写工作,促进研究所GJB5000A 三级体系的运作流畅度,提高体系效率。
其中以构件库的运用效果最为明显。随着软件项目数量的增多与研制经验的积累,项目组成员总结软件开发的通用性和软件设计层的特点,将已完成设计并通过测试的构件保留至构件库中。如有需求相同的软件项目可直接从构件库中选取。截至2020年12 月,构件库中已留有可靠性较高的构件107 项。
开发构件库不仅节省了开发、测试等环节的时间资源、人力资源,大幅减少工作量,降低软件开发成本。同时,也提高了新研软件的可靠性和质量,提升软件重用率。以此循环利用,软件研制效率将持续提升。
通过实施该软件项目管理方法,不仅确保各型号的在研软件在符合研制要求的情况下,按时保质地进行验收、交付,软件的功能、性能、接口等方面的可靠性、安全性也均有提高。其中在产品质量与成本方面尤为突出,三方测评缺陷率下降3%,总体工作量成本偏差控制在±10%。同时,为研究所对软件项目进行规范化管理,改进软件的开发工作,提高软件开发的成熟度,向实现产品细目化、结构化的现代管理方式迈进积累了丰富的工程经验。
此外,软件研制团队的科研能力、理论水平、管理能力都得到了充分的锻炼和提高,2 人获得研究员职称,1 人获得高级工程师职称,发表国际会议论文2 篇。
随着软件成为武器装备的核心组成部分,软件定义装备也必将成为未来军用作战装备的流行趋势。团队后续将继续改进软件项目管理方法。其一,将软件项目的计划环节与控制环节更加精细化,提高操作性。其二,针对软件配置管理工作开展专项讨论,严格把控配置项入库时机与基线建立。其三,继续丰富资产库,为后续软件研制工作提供有力支撑。在工作中持续发挥GJB5000A体系的作用,开展更加深入的标准学习与研究,提高软件研制能力与效率,保证产品质量与交付节点。