浅谈软件工程的管理活动
管理是我们生活中很普通的一个概念,意思是在做某件事的时候事前有详细周密的规划,过程中有切实的监管,根据实际情况调整策略,以达到最优化的效果。有道是“凡事预则立,不预则废”,任何活动只有计划周详,管理得当,才能收获想要的结果。在软件工程领域更是如此。软件工程中的项目管理是为了使软件项目能够按照预定的成本、进度以及质量顺利完成,而对人员产品和资源进行的分配和调整过程,我们要做到的就是使得整个软件工程始终处于管理者的控制之下,以预定时间顺利交付给用户高质量的产品。和生活中的其他活动略有不同的是,软件开发是一个知识性的活动,过程中的问题不易预料,创新点的出现无法预期,技术突破具有很大的偶然性,而且用户的需求也会随时改变,因此软件工程要求管理者具有良好的素养以及开发人员具有很强的执行力。有过开发经验的人很容易理解软件工程管理的重要性,我们以本学期的编译原理实验为例,虽然是一个人的项目,不涉及到人员管理,仅仅是时间管理和工作量估计,但实际上我们做得并不好,首先是对工作量的估计不够,往往是在实际写代码的过程中才发现陷入了时间黑洞,工作量远超计划,这是其一。其二是时间分配,我们习惯了将任务推到截止日期之前再完成,这样的破釜沉舟确实会节省一些时间,使得我们在截止日期之前能够有较高的效率,但一旦出现意外情况,很容易错过时间无法完成任务,而且,这样孤注一掷的计划也导致项目完成的质量不高。当然,这只是我们在学校完成一项课程作业的情况,和实际的软件开发过程不同,这样的类比也稍欠妥当,但大致意思如此。本学期的另一门课程是数据库课程设计,由于是两个人合作完成一个网站的开发工作,这就和实际的软件开发过程较为一致了,过程中也涉及到了项目规划,实际开发,文档撰写等环节,可以给我们很多启发。两个人的工作就要涉及到工作任务的分配,这也是软件工程管理中最重要的部分。软件开发工作分出不同的模块,这就要求相应的工作人员具有很强的技术专业性,各有侧重,因此我们需要对开发人员的能力有一个全面的了解,才能做出合理高效的分工。我们组在网站开发的过程中就遇到了分工不明确的问题,导致后期做了很多重复的工作,大大降低了开发效率。
通过以上的举例我们可以看到,在我们初期小规模的软件开发过程中软件开发管理工作已近占据了重要的位置,那么在企业级的大型软件开发工作中,管理的重要性更是不言而喻。下面我们就针对典型的软件开发过程看一下如何做好管理工作。
首先,明确需求。软件需求是软件开发的根本所在,整个开发工作都是为需求而生的,所以一定要详细了解客户的需求,以免在后续的工作中找不到重点反复修改。确定需求的过程中,开发和设计人员一定要详细地听取用户的意见,不能想当然地把自己的观点加到用户的需求中,最后汇总出所有有关人员都一致同意的、详细的、完整的、可以实现的、可以测试的软件需求说明书,后续的设计和开发工作就是把这份需求说明书从纸面变成代码。
其次,项目计划。凡事预则立不预则废,事前对整个开发工作有一个详细的计划将会起到事半功倍的效果。这里的计划不仅仅包括软件本身的设计工作,还包括人员分工,制定时间表,资源分配,确定时间节点,风险预估等工作。人员分工要求项目主持者对每一位开发人员的能力和强项都有全面的了解,使得人尽其才,各司其职;资源分配和人员分工一样重要,我们知道著名的二八法则,如何准确地把主要资源分配给核心的20%的工作,使得物尽其用,是项目组长需要认真考虑的问题;制定时间表是为了督促项目团队提高效率,把大任务拆分成一个个小任务可以提高开发人员的积极性,每过一个时间节点都是对开发人员的一个激励,制定时间节点一定要本着切实可行的原则,不能认为“计划赶不上变化”而随意设置。
第三,在项目的实际开发过程中,做好监管,做好软件质量保证和配置管理的工作。如果在项目的开发过程中随意修改计划内容,或者常常不嫩完成计划汇总规定的工作,那么制定计划的意义将不复存在。做好监管的手段包括软件质量保证和软件配置管理。
软件质量保证是建立一套有计划有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目采用。软件质量保证的目的是使软件开发过程对于管理人员来说是可见的。通过对软件产品和活动进行评审和审计来验证软件是否是合乎标准的。
软件配置管理(Software Configuration Management,SCM)是一标识、组织和控制修改的技术。在软件开发过程中,变更是不可避免的,而每一次变更都会导致开发者之间的混乱,因此必须建立一套控制和记录系统一系列变化的体系。通过一系列的技术和手段维护产品的历史,标识和定位产品独有的版本,并在产品的开发和发布的阶段控制版本变化。用一系列的有序管理来减少项目人员之间重复的工作,这样保证了生产的效率和质量。对软件系统的每一个结构版本以及每一个独立部件,都给出独一无二的可访问的标识,这样做的目的是使得问题可追溯,实现对软件的全程跟踪。
第四,人员管理。这是软件开发管理工作中的重点,因为开发工作是由人完成的,而且人是有情感的,所以往往工作的分配并不是看似分配合理即可,还要切实结合每一个开发人员的特点。软件产品开发组的范型有以下四种可以参考的目前较为常见的范型。
1) 封闭式范型。这种方式是按照传统的权利层次来组织分组,每个人的分工和权利都有非常明确的约束,因此开发人员的执行力非常好,这种范型比较适合于做常规的或以往开发过的项目,不需要开发人员的创造力。
2) 松散式范型。这种方式即是以一种非常松散的方式组织分组,对每一个开发人员的权利和责任都没有明确的约束,每个人都有很大的发挥空间。因此这种方式比较适合于开发一些要求创造力的项目,并且对于时间没有严格的要求。
3) 开放式范型。这种方式结合了以上两种方式的特点,既有封闭式范型中严格的层次区分,对每一个开发人员都有有效的控制,又具有松散式模型中的创新性。工作的执行结合了大量的通信和基于小组一致意见的决策。因其兼具了封闭式范型和松散式范型的特点,所以比较适合于完成较为复杂的任务,但是效率较低。
4) 同步式范型。这种方式是根据问题的特点,给每一个开发人员分配独立的模块进行开发,彼此之间没有沟通的必要,最后每个人的工作组合到一起就完成了整个工程的开发。
随着计算机技术的不断发展,我们对于软件的依赖必定不断增强,而软件规模和复杂性也会随之提高,在面对大型软件开发的时候,软件工程管理将会起到越来越重要的作用,届时软件项目的管理将会决定软件项目的成败。
参考资料:
2) 《软件项目管理的思考》——河南大学 朱利娜、周宁