项目启动

1 项目和项目管理

1.1 什么是项目

项目是具有下列特征的一系列活动和任务[Kerzner2009]

  • 具有一个明确的目标
  • 有限定的开始和结束日期
  • 有成本限制
  • 消耗人力和非人力资源
  • 多工种合作

1.2 项目管理的目标

项目管理的目标是做到以下方面:

  • 在限定时间内
  • 在一定的成本内
  • 在要求的质量水平上
  • 高效使用资源
  • 获得客户认可

1.3 过程组与活动

过程组:项目启动、项目计划、项目执行、项目跟踪与控制和项目收尾

活动:计划制定、团队管理、成本控制、质量保障、度量、过程管理、进度跟踪与控制、风险管理、配置管理

2 团队组织与管理

一个协作良好的团队是任何项目成功的基础。软件项目尤其依赖于有效的团队组织和管理:软件开发是一个以人为本的活动,人力资源是软件项目最大的资产。有很多实践者认为比生产高质量产品更大的成功是在生产过程中建立一个凝聚的团队

2.1 团队的特征

[Katzenbach1993]将团队定义为:为了一致的目的、绩效标准、方法而共担责任并且技能互补的少数人。

  • 团队成员要具备共同的目标
  • 团队成员要共担责任
  • 团队成员要技能互补
  • 团队内部要有一个明确的结构

2.2 团队结构

  1. 主程序员团队
  2. 民主团队
  3. 开放团队

主程序员团队

民主团队

开放团队

2.3 团队建设

  • 建立团队章程
  • 持续成功
  • 和谐沟通
  • 避免团队杀手

如何避免团队杀手

[DeMarco1999]认为组织和管理团队时要回避下列团队杀手

  • 防范式管理
  • 官僚主义
  • 地理分散
  • 时间分割
  • 产品质量的降低
  • 虚假的最后期限
  • 小圈子控制

3 软件质量保障

软件工程师需要对软件产品的质量负责。对软件质量的要求可能是显式的,也可能是隐式的。人们通常会选用系统的某些质量要素进行量化处理,建立质量特征,这些特征被称为质量属性(Quality Attribute)。为了根据质量属性描述和饿评价系统的整体质量,人们从很多质量属性的定义当中选择了一些能够相互配合、相互联系的特征集,它们被称为质量模型

质量模型

因素:功能性、可靠性、易用性、效率、可维护性、可移植性

里程碑 质量保障活动
需求开发 需求评审、需求度量
体系结构 体系结构评审、集成测试(持续集成)
详细设计 详细设计评审、设计度量、集成测试(持续集成)
实现 代码评审、代码度量、测试(测试驱动、持续集成)
测试 测试、测试度量

3.1 评审

评审过程:规划 - 总体部署 - 准备 - 审查会议 - 返工 - 跟踪

  1. 在规划阶段(Planning),制定审查计划,决定审查会议的次数,安排每次审查会议的时间、地点、参与人员、审查内容等等。
  2. 在总体部署阶段(Overview),向所有参与审查会议的人员描述待审查材料的内容、审查的目标以及一些假设,并分发文档
  3. 在准备阶段(Preparation),审查人员个字独立执行检查任务。在检查的过程当中,他们可能会被要求使用检查清单、场景等检查方法。检查中发现的问题会被记录下来,以准备开会讨论或者提交给收集人员
  4. 在审查会议阶段(Inspection Meeting),通过会议讨论、识别、确认、分类发现的错误
  5. 在返工阶段(Rework),修改发现的缺陷
  6. 在跟踪阶段(Follow-up),要确认所有发现的问题都得到了解决,所有的错误都得到了修正。

3.2 质量度量

度量产生自统计控制(Statistical Control)思想。“你不能控制自己无法度量的东西” – DeMarco, 1998

测度(Measure)就是为了描述软件产品而提供的定量指标,比如代码行数等指标。进行测度的活动被称为测量(Measurement)。**度量(Metric)**是软件产品在特定属性上的量化测度程度。

例如基于所有对象的代码的行数测度可以建立平均代码行数、最大代码行数、最小代码行数等

4 软件配置管理

4.1 软件配置管理的动机

在软件开发活动汇总,除了最终产品之外,还会产生很多中间制品,例如需求规格说明、需求分析模型】软件体系结构设计模型、详细设计模型等。这些制品是不同阶段、不同角色、不同软件开发活动进行协同的基础。

在复杂软件系统开发中,产生的制品数量众多,以至于开发者需要维护一个清单才能清楚项目所处的状态,理解已经完成的工作和将要进行的工作。

某个制品发生变化带来的最大挑战是如何确保其使用者能够得到最新的制品,避免开发协同出现的问题。

4.2 配置管理

IEEE将配置管理定义为:用技术的和管理的指导和监督方法,来标识和说明配置项的功能和物理特征,控制对这些特征的变更,记录和报告变更处理及其实现状态,并验证与规格需求的一致性。

IEEE将配置项定义为:置于软件配置管理之下的软件配置的各种有关项目,包括各类管理文档、评审记录与文档、软件文档、源码及其可执行码、运行所需的系统软件和支持软件以及有关的数据等

配置管理

配置管理活动主要有以下的几个活动:

  1. 标识配置项
  2. 版本管理:可能会存在不同修改冲突问题,需要通过merge来解决(git)。同时需要规定不同的分支以进行不同的工作(比如dev分支用于开发,test分支用于测试,release分支用于发布等),常见的分支管理策略如下所示:
    1. 主分支(Master)
    2. 开发分支(Develop)
    3. 临时性分支
      1. 功能分支(Feature)
      2. 预发布分支(Relaease)
      3. 修补bug(Fixbug)
  3. 变更控制
  4. 配置审计
  5. 状态报告
  6. 软件发布管理

5 管理实践

经济为本、分工协作、目标驱动、常来常往、有张有弛、不断总结。

5.1 经济为本

开发管理需要注重人员的成本,同时需要注重工具的购买、培训的费用、差旅费等。同时需要注意维护的费用、生产停顿的损失、市场和服务的费用以及机会成本等。软件项目的产出主要在于节约商业活动成本(比如开发了新的库存管理系统之后,加快了流通并且减少了库存的浪费)、创新商机增加销售(指由于使用新软件带来的盈利,可能是软件本身的销售,也可能是软件项目带来的营业成长)和提高品牌含金量(提高质量和客户满意度)。有以下四个原则:

  1. 为技术而技术是条死胡同
  2. 以经济原则指导软件项目的决策过程
  3. 按照产品规律来营销软件产品
  4. 以收益为依据规划设计产品

5.2 分工协作

软件开发项目中主要是分为“三驾马车”:产品经理、项目经理、技术经理。项目管理的角色是非正式的角色,需要明确定义的角色主要的目的是:

  1. 领导整个团队以了解项目工作(计划,进度安排以及收集需求)
  2. 带领项目进行设计和开发工作(沟通、角色以及中期策略)
  3. 以及驱动完成整个项目(领导力、风险管理以及终局策略)

6 项目实践

组建团队的选择:

  1. 选择技能互补的成员组成团队,明确分工
  2. 根据成员特点,选择团队结构;(建议使用民主团队)
  3. 建立团队章程
  4. 明确团队的交流沟通手段

Reference

  1. 南京大学软件学院2022春季学期《软件工程与计算二》
文章作者: ZY
文章链接: https://zyinnju.com/2022/06/08/项目启动/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZY in NJU