软件开发过程中,往往有很多细节和意外让我们的计划赶不上变化。譬如需求变更、人员流动等。为了保证项目进度可控,有效规避项目在开发过程中的风险,项目管理的作用在软件开发管理中的重要性可想而知。
项目管理大致有项目计划和开发团队管理两方面。
建立项目计划
(1)设计总体架构
针对项目的实施需要,采取适合项目且相对成熟的框架结构。
前些年,我在某集团技术部门担任技术员时,那时公司的产品总出现各种各样的问题,例如日常发布系统时或访问量稍微过大时,系统就会出现故障,一天下来收到了100多份bug邮件,影响了业务系部门的正常使用。
之所以出现这么多的bug,是因为无论业务系提什么需求,技术部都全盘接受了,按理这样也不会导致出现这么多bug,技术部服务于业务部,是正常的,毕竟公司的主要收入在业务部。可问题是,数据字典是每个开发人员自己设计的,导致大多数数据字典冗余、甚至设计不合理。各自只关心自己负责的模块。等到模块之间有关联时,问题就接踵而至了。
那时候公司用asp.net +mssql server技术,并没有采用相应的框架,代码冗余多,后来团队经过两个多月的整改,系统才勉强能正常使用。
(2)控制可扩展度
扩展度过大,将提高系统的复杂程度,延长开发时间;扩展度过低,会直接影响系统的二次开发与维护。控制系统的可扩展性,能提高开发效率,降低系统维护的难度。
不知你有没有觉得,项目前期没有做好,后面复制粘贴的现象就会到处可见,导致冗余的代码越来越多,维护越来越困难。
(3)建立基础设施
合理分配软、硬件等基础设施的部署所需要的时间与成本。
(4)划分开发任务
利用WBS(Work Breakdown Structure,工作分解结构)对可交付结果进行分类与划分。每个项目划分为多个不同阶段,每个阶段又可以分为多个工作包(Work Package),工作包是WBS里最小的可交付结果,最后从工作包中分解出多个开发任务列表,分配给各个开发人员。
(5)部署开发进度
从需求调研、进行概要设计、进行详细设计、执行开发任务、测试、联合调试、SIT部署、生产环境部署都常常延误,项目经理必须有谈判能力、预判风险能力、控制能力。项目经理就是在满足各方项目干系人的利益的情况下,推动项目向前发展,最后达到项目验收。
(6)测试项目成果
每个工作包都应该同步部署测试工作,提高项目的质量。对出错BUG的工作包应该由测试人员以文本方式记录,向开发人员展示错误所在,让开发人员及时进行修改。
管理开发团队
(1)组建团队
按照工作任务与项目时间的前提条件建立团队,按团队职责分配人员,一般小组控制在6~10人之间。当团队人数超过20人时,应该考虑把团队分解成2个独立团队,负责不同的开发任务。
(2)分配开发任务
在每个迭代周期内(一般是15~30个工作日),应该把每个工作包进一步细分为多个开发任务,开发任务的开发时间应该控制在15个工作小时以内,如果开发任务的开发时间超出15个工作小时,应该考虑把任务再度细化。而开发任务应该以自由选择的方式分配给每个组员。
(3)跟进开发进度
在迭代的前期举行一次会议,让组员了解开发的进展及流程,并以自主选择的方式分配开发任务。用工具记录开发流程的进展,在每个工作包完成开发后应该进行性功能的测试,并以文本方式记录测试结果。
每天举行一次10多分钟的站立会议,让组员汇报昨天已完成的开发任务,当天将要做的任务,以及开发过程中所遇到的问题。
并在每周末举行一次例行会议,交待总体进程。
在迭代末期举行一次冲刺会议,总结项目的进展,交行已完成的任务,回顾该迭代周期内所遇到的问题,为下一个迭代做好准备。
期间千万不要忽视开发规范和代码审查。
关于代码规范,感兴趣,请浏览《你见过马化腾18年前编写的代码吗?》
代码审查,顾名思义,是一个检查代码并确保其能正常工作的过程,并且尽可能的优化代码。
有人会对代码审查的流程反感,我写的代码还要别人审查,难道怀疑我们的编码能力。
其实不然,有人检查我们的代码其实是件好事,能减少因为粗心的犯错带来的风险。 即使再好的开发人员也会有大意的时候。
在团队中的每个人都有自己的强项,通过代码审查。有些人可能会提出一个更聪明的解决方案,用一个更适合的设计模式来降低复杂度并提高性能。
通过别人的审查,他们可以察觉到可能的问题和发现能改善的地方,对代码提交者的编码水平提高有很大的帮助。
审查者则可以通过读别人的代码学习到很多新知识和技巧,并找出适合他们自己工作的解决方案。
(4)系统测试
对每个已完成的工作包进行适时的测试,保证系统质量与性能。对测试结果进行文本的记录,并把测试结果与绩效工资收入挂钩,并以真实数据计算组员的绩效收入。
测试人员应该以文本方式记录bug,并与开发人员共同工作的,把突出的缺陷演示给开发人员,以提高修改的效率。
这里的绩效考核就要慎重了,搞不好会导致团队人员的流失
(5)解决开发中的问题
对开发人员进行前期培训,可适当按工作能力分配任务,指导组员的开发。当遇到问题时应该在当天的站立会议时即时提出,避免影响开发进度。
(6)流程化管理
流程化管理(process management),是一种以规范化的点对点的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法。它是一个操作性的定位描述,指的是流程分析、流程定义与重定义、资源分配、时间安排、流程质量与效率测评、流程优化等。因为流程化管理是根据团队的具体情况而设计的,因而这种流程会随着内外环境的变化而需要被优化。
针对一个IT软件管理来说,应该抓好以下四大流程管理:
编码规范的制定与执行;开发任务流程化的制定与执行;开发进度流程化的制定与执行;测试成果的制定与执行。
流程化的管理减少了团队成员盲目与重复的去工作,提高了团队的工作效率。同时也提高了团队管理者的效率,为管理提高了一个便捷的管理工具,所以一个高效团队的打造,离不开流程化的管理。
(7)需求变更,修改项目计划
在开发过程中,遇到需求变更,要做好详细的文本记录,让客户了解需求变更的实际情况和开发方为之所付出的成本代价。与客户探讨,让客户了解计划修改对项目进度所造成的影响。同时为开发人员争取工作量。
笔者曾遇见过,项目开发过程中,需求变更了,可给予相应的开发人的工作量却没有任何变动,这对开发人员很不公平,开发人员只好通过加班加点来完成任务。这样很容易导致人才流失,做完了这个项目,组员都陆陆续续辞职了。
软件开发管理,必须得提高软件团队管理能力,管理者就要利用一切机会让团队成员感受到团队的力量,让他们不孤单,不委屈,并通过每一次的开发任务让他们不断成长。
做好项目管理,在软件开发中不容忽视,只有做好了,才不会影响项目进度,才能推动项目向前发展,最后达到项目通过验收,顺利完成项目的开发任务。