学习阶段软件开发的分工研究

2009-02-04 05:35陆戌辰臧珠萍
计算机教育 2009年23期
关键词:软件开发

陆戌辰 臧珠萍

摘要: 本文针对“学习阶段的软件开发”的特定情况,提出了均分模式的分工方法,将该方法与传统分工方法进行了比较,提出了在项目各阶段将功能相近、实现手段和步骤相似的任务平均分配给每个组员,以使整个团队共同进退的创新性项目分工方法。

关键词:软件开发;小组分工;项目体会

中图分类号:G642 文献标识码:B

软件开发是一项复杂的系统工程,牵涉到多方面因素,以前作坊式的开发早已无法适应当前的形势。随着软件越来越复杂,系统越来越庞大,软件开发人员的组织和分工便成了一项复杂而又重要的工作,对软件项目的开发进度与最终成果有着不容小觑的影响,甚至可能会直接决定项目的成败。本文针对学习阶段的软件开发,提出了相应的分工模式与方法。

1应用环境介绍——学习阶段的软件开发

在阐述具体的分工方法之前,需要先介绍一下该方法适用的特定情况——学习阶段的软件开发。

“学习阶段的软件开发”看似陌生,但无论是计算机专业的教师还是学生,对这个概念包含的情形都是相当熟悉的。

所谓学习阶段,就是指计算机专业水平正从初级向中级过渡的阶段,该阶段对应的群体一般为计算机专业的低年级本科生,该特定群体具有如下特点:

对计算机专业知识的学习范围广、深度浅,偏重于概念理论方面,实践经验较少。

还未确定自己的专业研究方向,对于计算机的各个领域没有突出的偏向和特长。

通过学院开课等多种途径,开始有机会接触一些综合性软件开发。

其中一些优秀的个体对计算机技术有浓厚的兴趣,并且具备较强的自学能力。

该阶段的软件开发一般分为如下3种情况:

第一,学院开设的实践性课程一般分小组进行,在规定时间内完成一个综合性软件的开发,针对整个群体。该情况又分为两种,一是针对特定课程的实践,对编程语言、所用的技术都有规定限制,涉及到的课外知识较少,对自学能力要求不高;另一种情况是针对特定应用的实践,该情况只需实现应用需求,对编程语言、所用的技术均无限制,涉及到的课外知识较多,大部分技术需自学。

第二,国家级/市级创新项目或者其他综合性竞赛,该情况针对比较优秀的学生,对自学能力有很高的要求,并且需要扎实的计算机专业基础和创新思维,对团队精神也有较高要求。

第三,协助导师完成企业项目或者科研项目的一部分,该情况也是针对比较优秀的学生。该情况下,导师挑选几个平时表现优异的学生参与项目的开发,分配一些比较基础简单又与大学课程有关联的模块给学生完成。对学生的自学能力和理解能力有很高的要求。

每种情况的一个共同点就是软件开发小组是由3~5人临时组建的小团体,并且对开发时限有较严格的要求。

以上简要介绍了“学习阶段的软件开发”这一概念,本文就是针对该特定条件下软件开发过程中的分工方法进行讨论与探索。

2传统方法及其对学习阶段软件开发的弊处

在传统的项目分工里,考虑到充分发挥每位组员的特长和经验,一般都会将软件开发划分为几个子任务,每个子任务包含若干模块,再将各个子任务按专业特长分配给相应的组员。举个例子,要设计实现一个动态网站时,经常会根据MVC模式,将项目分为数据库设计、前台页面、后台管理三大部分,然后把数据库设计部分交给擅长数据库的组员去做,前台页面由精通美工及HTML语言等的组员去做,后台管理则会交给擅长网页编程的组员去做,并由掌握大局观的项目负责人统一协调管理。为降低系统开发过程的复杂性,小组内程序员之间的任务界面一般都很清楚且尽量简化。

上述传统分工方法在发挥组员特长、优化团队结构和降低软件各模块耦合度等方面作用显著,对大多数软件开发情况都适用,并且应该是首选的。然而,针对上文提到的“学习阶段的软件开发”,由于比普遍的软件开发阶段多了一个学习阶段,如果仍旧采用传统的分工方法,一些始料未及的问题便暴露出来。

按传统的技术类型分工,由于时间和精力的限制,组员必定只会盯着自己负责的那部分技术资料研究,而对其他组员负责的部分毫不关心,整个团队将会缺少互动交流,更严重的是,无论在技术学习阶段还是应用阶段,由于负责某一特定技术模块的只有单独一人或两人,对技术知识点甚至模块功能的理解可能产生偏差,孤军奋战的形势又似回到了从前各自为营的软件开发模式,软件开发期间比较容易产生挫败感等负面情绪。

3针对学习阶段软件开发的均分模式分工方法

所谓均分,是指在工作量、工作性质、工作难度、技术领域相同的条件下,在各阶段对项目进行平均分配,即全组成员在各个阶段共同致力于某一功能相同的模块组,将功能相近、实现手段和步骤相似的任务平均分配给每个组员完成。以下就学习阶段的软件开发过程中运用均分模式分工方法与运用传统分工方法有较大差别的几个阶段进行说明。

3.1技术学习阶段

在技术学习阶段,全组成员共同学习本次软件开发所要用到的全部技术。对此,也许有人会提出质疑,学习全部技术与传统方法中的只学习某一特定领域技术相比,是不是要花费成倍的时间与精力?其实不然。针对本文讨论的学习阶段软件开发情况,要完成一个软件项目,往往只需中级专业知识水平,而不像一个完整的科研项目,需要相应领域的高级知识、经验及运用技巧,因此在进入自学阶段之前,学生可以向教师或相关领域的前辈请教完成这个软件项目所要用到的具体知识块,尽量压缩学习范围。全体组员共同学习,交流对知识点的不同理解,碰到疑难问题还可以一起讨论,从而提高学习效率,加快学习进程,加深对该技术的认识。同时,整个小组在学习时就统一编程风格及各种表示方式,为今后的设计编程提供很大便利。现今社会需要的是复合型人才,要求人才对某一领域有所专长之外,对其他领域的知识也须有一定程度的了解,而均分模式下的技术学习方法正为培养这种人才奠定了坚实的基础,学生学得多,收获也多。

3.2系统设计阶段

在系统设计阶段,小组中的每个成员都站在相同的全局角度去看问题,考虑问题更全面,能更好地看清系统的结构及各模块间的具体关系,保证系统设计不会与需求分析产生太大偏差。模块实现流程由小组成员共同讨论,能更全面地对实现方案进行设计,从而产生更多的方案,从中挑选最合适的。另外,组员共同讨论同一模块的设计,还能提出更多的可能碰到的突发状况,以弥补经验不足的缺陷。而采用传统的分工方法,每个模块由特定的负责人员设计,由于缺乏经验,再加上技能学习阶段遗留下的知识点掌握不扎实的隐患,设计方案必定存在许多漏洞,而自己却浑然不知。由此可见,经过全组讨论设计出的系统结构以及模块内部结构将更趋向完善。

3.3编码实现阶段

在编码实现阶段,虽然,由于该小组是临时组织的,且每个组员参加综合性软件项目的经验不多,但小组成员普遍具有良好的大局观和全局概念,考虑问题会立足于整个系统。

在均分模式分工方法中,各个模块被分为功能相近,实现技术相同,实现手段、步骤相似的模块组,模块组按照层次关系或难易缓急排序,分阶段顺序攻克,每一阶段的当前模块组均分给组员实现。单从心理来看,由于不是一个人单独面对从未接触过的编程技术,遇到问题时可以向小组成员请教,个人的自信心将增强不少。更重要的是,在计算机技能应用方面,初学者遇到的问题往往是相似的,遇到共同的问题时,通过集体讨论、查资料,或者向导师求助等途径,一般很快就可以解决,从而大幅度加快开发进程。

然而,如果在学习阶段的软件开发中使用传统方法,组员往往只关注于自己的工作领域,没有时间也没有精力去关心系统的其他部分,这就丧失了全局观,与相关人员的交流也将产生困难。更糟糕的是,如此分工很有可能带来系统开发中的本位主义,而遇到问题时,既没有解决这些问题的经验,又由于组员的专攻方向不同而不能与同组组员讨论研究,通过其他渠道得到帮助往往会花费较长时间和较多精力,也会影响总体进度,使其他组员难以把握步调。同时,系统设计阶段遗留下来的弊病也将逐渐显现。从理论上来说,组员对自己负责模块的接口不能自由修改,对系统整体设计的改进则更是困难。自己这一部分的改进往往需要其他部分的相应修改,这样就会带来很多的麻烦,最后大家的工作被相互抵消了。

在学习阶段的软件开发过程中,如果实行传统分工,必然导致程序员视野狭隘,系统中存在的错误被详细的分工掩盖起来,最后等到系统整体测试时才发现错误,这时只好在上面修补,使整个系统变得杂乱无章,让项目组不能自拔。而均分模式分工方法正好弥补了这些缺陷,从而达到提高软件开发效率、保证软件质量的目标。

4均分模式分工方法的注意事项

均分模式的运用还有以下几点需要注意。

首先,这里所提的均分模式分工方法是针对“学习阶段软件开发”的特殊分工方法。对于学习阶段软件开发的几种子情况来说,该方法更适用于第2和第3种组员能力比较均衡的情况。

其次,均分模式与传统的分工模式也有共通的地方,实现效果如何,最重要的还是看团队合作。

最后,该方法还需要经过多次实践不断完善。如果条件允许,可以尝试在软件开发正式启动前,请业内人士进行简要的工程开发流程与团队合作的培训。

总之,软件开发的分工模式并不是一成不变的,应本着具体问题具体分析的态度分配工作,真正发挥项目分工的优势。

参考文献:

[1] Ian Sommerville. 软件工程[M]. 8版. 北京:机械工业出版社,2007.

[2] 杨少波,卢苇. J2EE项目实训——UML及设计模式[M]. 北京:清华大学出版社,2008.

猜你喜欢
软件开发
基于安卓平台的移动式教学模式研究
软件开发中JAVA编程语言的应用
信息安全环境下的计算机软件开发研究
核电厂定期试验管理软件开发
FPGA软件开发过程中编码规范的作用