22 项目管理
- 22.1 风险管理
- 22.2 人员管理
软件项目管理者的任务是确保软件项目满足和服从这些约束,并确保交付高质量的软件产品
项目管理的目标:
- 在约定的时间将软件产品交付给客户
- 将全部成本控制在预算之内
- 交付的软件产品满足客户的要求
- 保持一个愉悦且运作良好的开发团队
软件工程管理的不同之处:
- 软件产品是无形的
- 大型软件项目常常是“一次性的”项目
- 软件开发过程是可变的和机构特定的
22.1 风险管理
风险种类 | 描述 | 举例 |
---|---|---|
项目风险 | 影响项目进度或项目资源的风险 | 职员跳槽、管理层变更、硬件缺乏、需求变更、描述延迟、低估了系统规模 |
产品风险 | 影响开发中软件的质量或性能的风险 | 需求变更、描述延迟、低估了系统规模、CASE 工具性能较差 |
业务风险 | 影响软件开发机构或软件产品购买机构的风险 | 技术变更、产品竞争 |
22.2 人员管理
关键因素 | 描述 |
---|---|
一致性 | 对项目组的每个人应该同等对待 |
尊重 | 尊重每个人有不同的技能,所有成员都应该有机会做出贡献 |
包容 | 能够倾听并采纳团队成员的建议 |
诚实 | 对项目组中好的情况和不好的情况保持诚实的态度。诚实地对待自己的技术知识水平,并在必要的时候乐于服从更博学的员工 |
工作动力 | 描述 | 措施 |
---|---|---|
生理的需求 | 较低层次,如事物和睡眠 | 软件开发人员一般没有饥渴问题 |
安全的需求 | 环境对身体的威胁 | 一般没有 |
社会的需求 | 给员工提供与同事交往的时间和场所 | 建议面对面交流,而不是电子会议 |
受尊重的需求 | 让员工感受在他们在开发机构中很受尊重 | 对员工做出的成绩给予认可,让员工感觉到为他们所支付的报酬能够反映出他们的能力和经验的价值 |
自我实现的需求 | 让员工对自己的工作负责人,分配给他们较难(但是可以完成)的任务,并提供培训计划以提高他们的技能 | 员工喜欢学习新知识和技能,培训是一项重要的激励方式 |
职业人士分类 | 描述 | 特点 |
---|---|---|
面向任务型 | 动力来自所从事的工作。在软件工程中,软件开发智力上的挑战激发了他们的工作热情 | 喜欢独自工作,技术可能更出色 |
面向自我型 | 动力来自个人成功和得到认可。他们更乐于把软件开发视为达到自己目标的手段 | 喜欢独自工作。团队协调好,可变成面向交互型。可能善于推动整个工作的完成 |
面向交互型 | 动力来自同事们的存在和协作 | 喜欢小组作业。更利于小组内部的交流沟通 |
22.3 团队协作
- 小组具有凝聚力的好处
好处 | 描述 |
---|---|
能够建立小组自己的质量标准 | 小组一致同意的标准与强加的标准相比,更容易被小组遵守 |
成员互相学习,互相帮助 | 鼓励互相学习可消除互相不了解引起的隔阂 |
知识分享 | 一旦有成员离开小组也可保持工作的连续性。其他成员可接手关键的任务,不会过度影响项目 |
鼓励重构以及不断改善 | 小组成员集体工作交付高质量的产品并解决出现的问题 |
如何增强小组凝聚力
- 为小组成员及其家庭组织一些社会活动
- 通过给小组命名确立小组的特性和地位,尝试建立小组的认同感
- 开展有鲜明小组特色的小组建设活动,如运动和游戏
- 把组员当做自己人
- 必须认为小组成员是负责人的、可信赖的,保障小组成员的知情权
- 坦诚的信息交流,可使小组成员感觉自己是小组的一部分
- 开发新产品时,负责产品描述和设计的小组成员都参与会议,是每个成员能够关心产品的描述和设计
- 午餐会:项目组所有成员互相认识并谈论彼此所关心的问题,比如新产品构想等
- 放松日:每个小组成员准备一项相关技术的最新内容并介绍给小组中其他成员,提高小组的技术水平
影响团队工作的普遍因素
- 小组的人员:项目小组需要不同类型的成员。因为软件开发包括很多活动——和客户谈判,编码,测试,编写文档等
- 团队的组织:组织团队使得小组成员都能尽其所能,所承担的各项任务都能按时完成
- 技术和管理上的沟通:小组成员之间、软件开发团队和其他项目信息持有者之间的良好沟通必不可少
挑选成员
- 创建一个在技术技能和人格各项之间平衡的小组:挑选不同类型(面向任务、面向自我、面向交互)的成员
- 组织成员一起有效的工作:实行民主、集体决策,且需要权威来指导工作。双向沟通,避免较多的会议和冗长的文件