软件工程(导论)

成秀秀、杨玲、戚爱斌、苗世迪、温东新

目录

  • 1 软件与软件工程
    • 1.1 软件
    • 1.2 软件危机
    • 1.3 软件工程
    • 1.4 软件生命周期
    • 1.5 软件过程模型
    • 1.6 学生成果分享
  • 2 可行性研究与项目开发计划
    • 2.1 可行性研究的任务
    • 2.2 可行性研究过程
    • 2.3 进度计划
    • 2.4 学生成果分享
  • 3 需求分析
    • 3.1 需求分析的任务
    • 3.2 与用户沟通获取需求的方法
    • 3.3 分析建模与规格说明
    • 3.4 实体-联系图
    • 3.5 数据规范化
    • 3.6 状态转换图
    • 3.7 其它图形工具
    • 3.8 验证软件需求
  • 4 总体设计
    • 4.1 系统流程图
    • 4.2 数据流图
    • 4.3 数据字典
    • 4.4 设计过程
    • 4.5 设计原理
    • 4.6 启发规则
    • 4.7 描绘软件结构的图形工具
    • 4.8 面向数据流的设计方法
  • 5 详细设计
    • 5.1 结构程序设计
    • 5.2 人机界面设计
    • 5.3 过程设计的工具
    • 5.4 面向数据结构的设计方法
    • 5.5 程序复杂程度的定量度量
  • 6 软件编码
    • 6.1 程序设计语言
    • 6.2 编码风格
  • 7 软件测试
    • 7.1 软件测试基础
    • 7.2 单元测试
    • 7.3 集成测试
    • 7.4 确认测试
    • 7.5 白盒测试技术
    • 7.6 黑盒测试技术
    • 7.7 调试
    • 7.8 软件可靠性
  • 8 软件项目管理
    • 8.1 估算软件规模
    • 8.2 工作量估算
    • 8.3 人员组织
    • 8.4 质量保证
    • 8.5 软件配置管理
    • 8.6 能力成熟度模型
人员组织

人员组织总述

为了成功地完成软件开发工作,项目组成员必须以一种有意义且有效的方式交互和通信。

管理者应该合理地组织项目组,使项目组有较高生产率,能够按预定的进度计划完成所承担的工作。

除了追求更好的组织方式之外,每个管理者的目标都是建立有凝聚力的项目组。

一个有高度凝聚力的小组由一批团结得非常紧密的人组成,他们的整体力量大于个体力量的总和。


一、民主制程序员组

民主制程序员组的一个重要特点是,小组成员完全平等,享有充分民主,通过协商做出技术决策。因此,小组成员之间的通信是平行的,如果小组内有n个成员,则可能的通信信道共有n(n-1)/2条。

程序设计小组的人数不能太多,否则组员间彼此通信的时间将多于程序设计时间。

民主制程序员组通常采用非正式的组织方式,也就是说,虽然名义上有一个组长,但是他和组内其他成员完成同样的任务。


民主制程序员组的优点:

■组员们对发现错误抱着积极的态度,有助于更快地发现错误,导致高质量的代码;

■小组成员享有充分民主,有高度凝聚力,学术空气浓厚,利于攻克技术难关;

■若组内多数成员经验丰富,那么本组织方式会非常成功。

民主制程序员组的缺点:

如果组内多数成员技术水平不高,或是缺乏经验的新手,由于没有明确的权威指导开发工程的进行,组员间将缺乏必要的协调,最终可能导致工程失败。 


二、主程序员组

采用这种组织方式的原因: 

软件开发人员多数比较缺乏经验;

程序设计过程中有许多事务性的工作,例如,大量信息的存储和更新;

多渠道通信很费时间,将降低程序员的生产率。


主程序员组的两个重要特性: 

1、专业化。该组每名成员仅完成他们受过专业训练的那些工作。

2、层次性。主程序员指挥成员工作并全面负责。

典型的主程序员组由主程序员、后备程序员、编程秘书以及1~3名程序员组成。 


主程序员组核心人员的分工: 

主程序员既是成功的管理人员又是经验丰富、技术好、能力强的高级程序员,负责体系结构设计和关键部分的详细设计,并且负责指导其他程序员完成详细设计和编码工作。 

后备程序员也应该技术熟练而且富于经验,他协助主程序员工作并且在必要时(例如,主程序员生病、出差或“跳槽”)接替主程序员的工作。

编程秘书负责完成与项目有关的全部事务性工作,例如,维护项目资料库和项目文档,编译、链接、执行源程序和测试用例。 


主程序员组的组织方式不切实际:

首先,主程序员应该是高级程序员和优秀管理者的结合体。通常,既缺乏成功的管理者也缺乏技术熟练的程序员。

其次,后备程序员更难找。

第三,编程秘书也很难找到。


三、现代程序员组

实际的“主程序员”应该由两个人共同担任:

一个技术负责人,负责小组的技术活动,参与全部代码审查工作,因为他要对代码的各方面质量负责;

一个行政负责人,负责所有非技术性事务的管理决策,不可以参与代码审查工作,因为他的职责是对程序员的业绩进行评价。行政组长应该在常规调度会议上了解每名组员的技术能力和工作业绩。  

由于程序员组成员人数不宜过多,当软件项目规模较大时,应该把程序员分成若干个小组。该图描绘的是技术管理组织结构,非技术管理组织结构与此类似。

把民主制程序员组和主程序员组的优点结合起来的另一种方法,是在合适的地方采用分散做决定的方法。有利于形成畅通的通信渠道,以便充分发挥每个程序员的积极性和主动性,集思广益攻克技术难关。