大型软件项目需要很多人的能力合作,花费一年或数年的时间才能完成。为了提高工作效率,保证工作质量,软件开发人员的组织、分工与管理是一项十分重要和复杂的工作,它直接影响到软件项目的成功与失败。首先,由于软件开以人员的个人素质与差异很大,因此对软件开发人员的选择、分工十分关键。1970年,Sackman对12名程序员用两个不同的程序进行试验,结论是:程序排错、调试时间差别为18:1;程序编制时间差别为15:1;程序长度庆功别为6:1;程序运行时间差别为13:1。近年来,随着软件开发方法的提高、工具的改善,上述差异可能会减小,但软件人员的合理选择及分工,充分发挥每个人的特长和经验显然是十分重要的。其次,因为软件产品不易理解、不易维护,因此软件人员的组织方式十分关键。一个重要的原则是,软件开发人员的组织结构与软件项目开发模式和软件产品的结构相对应,这样可以达到软件开发的方法、工具、与人的统一,从而降低管理系统的复杂性,有利于软件开发过程的管理与质量控制。按树形结构组织软件开发人员是一个比较成功的经验。树的根是软件项目经理和项目总的技术负责人。理想的情况是项目经理和技术负责人由一个人或一个小组担任。树的结点是程序员小组,为了减少系统的复杂性、便于项目管理,树的结点每层不要超过7个,在此基础上尽量降低树的层数。程序员小组的人数应视任务的大小和完成任务的时间机时定,一般是2~5人。为降低系统开发过程的复杂性,程序员小组之间,小组内程序员之间的任务界面必须清楚并尽量简化。
按“主程序员”组织软件开发小组是一条比较成功的经验。“主程序员”应该是“超级程序员”。其他成员,包括程序员、后备工程师等,是主程序员的助手。主程序员负责规划、协调和审查小组的全部技术活动。程序员负责软件的分析和开发。后备工程师是主程序员的助手,必要时能代替主程序员领导小组的工作并保持工作的连续性。软件开发小组还可以根据任务需要配备有关专业人员,如数据库设计人员、远程通信和协调,提高了工作效率。这种形式的成败主要取决于程序员的技术和管理水平。除了按主程序员负责的程序员小组组织开发人员外,还可以按“无我程序设计”建立软件民主开发小组。这各组织形式强调组内成员人人平等,组内问题均由集体讨论决定。这种组织形式有利于集思广益、互相取长补短,但工作效率比较低。
软件项目或软件开以小组可以配置若干个秘书、软件工具员、测试员、编辑和律师等到。秘书负责维护和软件配置中的文档、源代码、数据及所依附的各种磁介质;规范并收集软件开发过程中的数据;规范并收集可重用软件,对它们分类并提供检索机制;协助软件开发小组准备文档,对项目中的各种参数,如代码行、成本、工作进度等,进行估算;参与小组的管理、协调和软件配置的评估。大型软件项目需专门配置一个或几个配置管理人员,专门负责软件项目的程序、文档和数据的各种版本控制,保证软件系统的一致性与完整性。软件开发小组内部和小组之间经常交流情况和信息,以便减少误解,删除软件中的个人特征,提高软件的质量.
软件项目的开发实践表明,软件开发各个阶段所需要的技术人员类型、层次和数量是不同的。软件项目的计划与分析阶段只需要少数人,主要是系统分析员、从事软件系统论证和概要设计的软件高级工程师和项目高级管理人员。概要设计时要增加一部分高级程序员,详细设计时,要增加软件工程师和程序员,在编码和测试阶段还要增加程序员、软件测试员。在此过程中软件开发管理人员和各类专门人员逐渐增加,到测试阶段结束时,软件项目开发人员的数量达到顶峰。软件运行初期,参加软件维护的人员比较多,过早解散软件开发人员会给软件维护带来意想不到的困难。软件运行一段时间以后,由于软件开发人员参与纠错性维护,软件出错率会很快衰竭,这时软件开发人员也就可以逐步撤出。如果系统不做适应性或完善性维护,需要留守的维护人员就不多了。上述人力资源安排类似下所示Rayleigh-Norden曲线。根据Putnam得出的软件项目开发工作量与开发时间的四次方成反比的结论,得出软件开发的人员-时间折衷定律:在时间允许的情况下,适当减少人员会提高工作效率,降低软件开发成本。F.Brooks从大量的软件开发实践中发现:“向一个已经延期的软件项目追加开发人员,可能使项目完成的更晚。”这从另一个角度说明软件开发宁可时间长一点,人员少一点。这样可以大大减少人员之间的通信开销,工作效率会更高些。
由此可见,在软件开发过程中,人员的选择、分配和组织是涉及软件开发效率、软件开发进度、软件开发过程管理和软件产品质量的重大问题,必须引起项目负责人的高度重视。