摘要:在大型软件研发项目的管理过程中,团队中的任务依赖和协调问题是影响项目成功的关键,需要对任务进行合理的分类组织、准确估算、有序拆分、填报审批和变更控制。甘特图是一种计划管理工具,可用于管理项目中的任务及其依赖关系。东方地球物理公司物探技术研究中心将甘特图用在大型找油找气软件项目的研发管理中,摸索总结甘特图框架、各类任务占比、定期填报审批等实践经验,指导项目取得成功,使甘特图成为项目长的管理利器。
关键词:甘特图大型软件研发管理项目管理
0引言
软件已经成为现今人们工作和生活中不可缺少的一部分。随着科技的进步,大家期望软件能处理更多的事项、更大的数据和复杂度更高的逻辑。因此,软件的体量越来越大,软件研发团队的人员也越来越多。
软件是一种人类智慧产品,一个软件产品内部各部分之间存在着多种依赖关系。因此,在大型软件研发过程中,对于人员、任务、时间的管理非常困难。
甘特图是近现代管理学上的有效工具之一,东方地球物理公司物探技术研究中心尝试将甘特图技术用在大型软件项目的管理过程中,以求解决管理难题。
1大型软件研发项目中的管理难题
大型软件研发项目[1],其团队规模一般在30人以上,周期在一年以上,软件代码行规模在十万行以上。
与硬件产品不同,软件产品是人类逻辑的产物[2],有着抽象、不可见、无弹性、难检测的特点。一个软件产品中包含着成千上万个业务逻辑流程,各部分功能相互依赖、相互影响。
对于一个大型软件项目来说,一般要再划分团队进行工作,每个团队负责研发产品的一部分(例如一个子系统)。在每个研发团队中,还会将软件功能进一步分解,拆分成更小的任务进行实现。对于每个功能,按照软件工程的通用做法[3](图1),一般会分解为软件需求分析、软件设计、软件编码、单元测试等子任务。随后,将通过单元测试的功能逐渐集成到软件产品主干上,进一步开展集成测试、系统测试、验收测试等任务。
每一单个功能的开发过程虽然大致相同,但是在同一时刻,不同的软件功能所处的任务却不相同。这一方面是因为不同软件功能之间有依赖关系,有些功能必须在其他功能完成之后才能进行开发;另一方面,也是为了让一个软件项目中的所有人员都保持一定的工作饱和度,不能因为上一个功能没有开发完成而出现人员等待的现象。
此外,研发软件产品并不是一蹴而就的工作。一般都要进行多轮次开发,从初始原型到精化原型再到正式产品,需要反复工作才能实现原本存在于人类头脑中的软件需求。即便是开发出正式产品,还要针对软件需求进行细致的测试,再通过开发修改软件bug,通过测试验证bug是否修改正确,如此往复循环n次才能达到软件释放的标准(图2)。
因此,对于一个大型软件研发项目,影响项目顺利开展并走向成功的因素中,高深的技术难题仅占很少的一部分,而大部分难点是整个团队任务中的依赖性和协调性[4]。例如,不同任务的前后关系是否合理、任务估算与人员资源是否匹配、关键任务能否在规定的时间内优先保证完成、功能迭代的轮次安排是否适合、需求设计开发测试这些不同类型工作时间量的配比是否合理、出现任务变更后如何应对并合理调整,等等。
按照软件工程的指导,可以将软件研发任务拆分到比较小的颗粒度,一般可以细分到单人单周粒度。在一个计划周期为一年的大型软件研发项目中,仅工程类任务一般会有几百个,再加上诸如项目计划制定、项目例会等管理类任务,整个项目运作下来,任务项有上千个。这些任务之间有大量的依赖关系,更有对不同人力资源的占用。如果任务安排不当,很容易造成窝工、误工、返工甚至停工的现象。
2用甘特图管理大型软件研发项目
2.1什么是甘特图
甘特图(GanttChart)是由美国的甘特(GannttHL)发明的一种表现任务从属关系和时间排列顺序的图表,也被称作条状图或横道图[5](图3)。
甘特图通过条状图形来显示任务项之间的关系及其在时间上的前后顺序,帮助管理者进行计划编排和任务拆分,被看作是一项管理技术革命。通过对甘特图的条状图形加以改进,形成了跟踪甘特图,可以体现每项计划任务的进展情况(图4)。
在甘特图中,还可以体现各任务项之间的依赖关系,例如“开始—开始”、“开始—结束”、“结束—开始”、“结束—结束”等关系,以便找到决定整个项目成败的关键路径(图5)。
甘特图的出现对现代管理技术的影响很大,之后的网络图、关键路径法和计划评审等技术和工具,其思想基础都来自于甘特图。
2.2甘特图在大型软件项目中的应用
东方地球物理公司物探技术研究中心是一家专门研发找油找气软件的机构,其主要产品为Geo-East地震数据处理、解释一体化软件。该软件有着超过千万行源代码的体量,能够高效处理海量数据。全中心有近200名研发人员在围绕这一产品工作,每次新版本升级,都会划分成多个数十人组成的研发项目组开展工作。
在多年的研发实践中,物探技术研究中心的项目团队通过不断尝试和摸索,总结了使用甘特图管理大型研发项目的经验,不断开发出成功的软件新版本。
2.2.1总结出甘特图框架
甘特图只是一种工具,在不同项目团队中的实际用法不同。为了统一各项目的管理模式,研究中心依照软件工程中的任务分解关系,根据找油找气软件的技术特点,参考IBMRUP的软件开发迭代模型,总结出适用于科研院所管理要求的甘特图框架(图6~图9)。
除以上几个高位节点的甘特图框架之外,还对项目跟踪监控、项目培训、过程与产品质量保证、软件测试、bug修改等各类工作给出了甘特图框架。
2.2.2确定各类任务占比
一个软件研发项目中,有各种类别的工作,例如:工程类的软件需求分析、软件设计、软件实现、软件测试等工作;管理类的项目计划制定、项目例会、项目里程碑评审等工作;支持类的度量与分析、过程产品质量保证等工作。由于项目有明确的开始和结束时间,人员和资源也是有限的,因此必须对这些工作的占比进行合理安排,以免顾此失彼,最后造成项目不能按时保质完成的后果。
为了得到各类任务的合理占比关系,研究中心设计了不同任务的数据分类(表1),对项目执行数据进行了严格的采集(表2),以项目为单位进行归一化处理(表3)。进行异点排除、数据校正等处理之后,得到了整体的组织过程数据基线(表4),作为指导制定后续研发项目计划的依据(表5)。
2.2.3近细远粗逐渐分解
对于一个大型软件研发项目来说,项目计划任务的分解工作是无法一蹴而就的,必须分层次分阶段进行工作推进。
经过多年的实践,物探技术研究中心总结了“近细远粗”和“632”原则。具体是:对甘特图任务的拆分遵循“近细远粗”的原则,近期任务的时间跨度要拆分得小一些,远期任务的时间可以跨度长一些;时间跨度遵循“632”原则,即项目中两个里程碑任务的时间跨度不超过6个月,一个月以后开始的任务时间跨度不超过3个月,一个月以内开始的任务时间跨度不超过2周(图10)。
2.2.4周五填报、周一审批
如果仅做计划而不做跟踪,那计划就没有意义,起不到任何管理作用。在一个大型软件研发项目的甘特图中,任务项往往有几百个乃至上千个。这些任务项的完成情况形成合力,反映了整体研发的进度执行情况。
在物探技术研究中心的研发项目管理中,强调“周五填报、周一审批”的管理原则,即:每个甘特图任务的任务成员在每周五填报自己任务的完成情况,包括工作量和完成内容(图11);任务负责人每周五填报该任务的完成百分比(图12);任务审批人每周一对填报过的任务进行确认和审批(图13)。
通过任务的填报和审批,能得到每个甘特图任务的完成数据,再结合甘特图任务的计划数据,使用挣值分析工具,很容易得到反映项目整体进度执行情况和成本投入情况的挣值图(图14)。
2.2.5刚性与弹性的统一
一个大型软件研发项目中任务众多,绝大部分甘特图条目是在制定项目计划时确定和下发的。然而,随着项目的推进,总会出现与做计划时预期不一致的情况,包括任务的增减、任务的进一步拆分、任务无法按时开始或者按时完成等多种情况。这样就不可避免地要对甘特图任务进行调整。
有些任务项之间是有依赖关系的,例如关键任务,对其调整会对其他任务特别是后续任务造成影响,甚至会影响项目里程碑能否按期达成;有些任务项本身比较独立,对项目里程碑影响不大,早点开始晚点完成都可以容忍。
为了既能保持甘特图的实时指导作用,又要减少随意变更对项目造成的冲击,给出了甘特图调整原则:影响项目里程碑达成的任务只能通过正式的变更流程进行调整;其他情况可以随时进行任务调整;未按计划完成的任务可以不作调整,继续填报直到任务结束(图15)。
该原则很好地体现了项目管理中刚性与弹性的统一,让甘特图的应用既严格又灵活,成为项目长得心应手的管理工具。
3结束语
团队中的任务依赖和协调问题是影响大型软件研发项目成功的关键。在研发过程中,团队不仅需要对各种任务进行合理地组织归类,还需要在任务估算、拆分下发、跟踪填报、变更调整等方面进行合理的规定,以便于科学管理,不漏不乱。
甘特图是一种很好的项目管理工具,可以用在大型软件研发项目的管理上,再加上合理的管理原则,可以有效地解决任务之间的依赖和协调问题,成为项目长的管理利器。
作者简介:王硕工程师,1973年生;2002年毕业于清华大学软件学院计算机软件专业,获学士学位;2014年获首都经济贸易大学企业管理专业硕士学位;现就职于东方地球物理公司物探技术研究中心,主要从事软件企业质量管理体系建设、软件研发过程改进和软件项目质量管理。