一. 软件危机 及 过程
提出了软件开发中的几个问题, 以及软件危机的概念, 软件危机是否存在, 及理由; 软件危机解决方案 ( 银弹 ) 的发展历程; 软件过程的提出与发展, 及四个研究方向;
二. 过程定义 及 特性
1. 过程 及 过程成熟度发展
过程 : 过程是 做事的 流程 , 规章制度 ;
过程成熟度 起源 与 发展 :
1.质量控制原理 : 发展统计学, 质量控制原理 ; Walter Shewhart ( 1930 )
2.质量控制原理加强 : 进一步发展 并 证明 Shewhart 原则 ; Edwards Deming ( 1956 ) , Joseph Juran ( 1956 )
3.量化 : 发展质量成熟度 量化 ; Phil Crosby ( 1956 )
4.软件过程 量化 : 软件过程中, 采用了 Crosby 量化, 加入成熟度等级概念 ; Watts Humphrey ( 1956 )
5.框架 : 发展成熟度框架, 成熟度问卷, SPA, SCE, CMM, CMMI ; SEI ( 1987-2000 )
2. 软件过程定义 及 特性
软件过程 定义 : 软件过程 ( Software Process ) 是 在 软件生存周期 中所实施的 一系列活动 ( Activity ) 的 集合, 每个活动都是由 一些 任务 ( Task ) 组成的 ;
软件生存周期 : 软件生存周期(SDLC,软件生命周期)是软件的 产生 直到 报废 的生命周期; 周期内 有 ①问题定义、②可行性分析、③总体描述、④系统设计、⑤编码、⑥调试和测试、⑦验收与运行、⑧维护升级到废弃 等阶段
过程特性 :
1.输入输出 : 过程 需要 输入 和 输出, 输入 是实施过程的 基础 和 依据, 输出 是过程完成的 结果, 过程会得到有形 或 无形 的产品;
2.资源活动投入 : 过程 完成 需要投入 适当的资源 和 开发相应的活动; 如 人员, 设备, 资金, (资源) 以及 设计, 计划, 检验 等活动 (活动) ;
3.增值效果 : 过程本身有增值效果, 是有益的经济行为 ;
4.过程质量控制 : 过程的质量需要保证, 针对 过程的输入 (资源 活动) 和 输出(中间件 产品) 需要在 适当的阶段 进行 检查, 评审 和 验证;
3. 过程 3 个方面的特性
过程特性 :
1.过程定义 : 过程需要被定义,一般是将过程所包含的 活动 及 程序 制定成 文档 ;
2.过程培训 : 过程需要培训, 需要 给过程中的 每一个相关人员 培训 过程涉及的知识 ;
3.过程结果 : 执行过程活动, 可以得到过程 结果 ;
三. 过程的优劣
过程优劣判定方向 : ① 过程的基本要求 ; ② 过程的有效性; ③ 过程的成熟性 ;
1. 过程的基本要求
过程的基本要求 :
1.干系人接收并执行 : 过程思想 已经 被干系人 理解, 遵守, 度量 并 严格执行;
2.目标明确 : 过程支持 商业目标, 是为 该目标进行 服务 的 ;
3.汇聚作用 : 过程实施过程中, 将 组织, 管理者, 人员, 技术, 基础设施 都汇聚起来;
2. 有效的软件过程
有效的软件过程 :
1.明确过程所有者 : 过程的所有者必须明确, SEPG ( Software Engineering Process Group ) 软件工程过程组 主持运行 软件过程, 负责对 软件过程的 维护 与 改进 ;
2.培训 : 软件过程需要培训, 培训对象包括 ①主管人员, ②SPEG, ③项目管理者, ④项目组成员, ⑤支持人员, ⑥质量保证人员 等 ;
3.实施 的 度量 和 反馈 : 过程实施的情况, 需要 针对以下几个方面进行 度量 和 反馈 ; ① 过程的有效性; ②过程效率; ③过程适用性;
4.使用者 的 反馈 : ① 鼓励员工主动反映意见和建议, 奖励突出者; ② 使用 调查表 , 提问表 ;
5.外部环境 : 吸收 外部的反映 建议, 这些外部环境包括如下几点 : ① 法律法规和标准的变更; ② 技术 方法 进步; ③ 政策调整 ; ④ 目标客户的 特征 需求的 变更 ;
6.检验 强制 机制 : ① 内部审核, ② 认证审核, ③依从性审核 或 评审 ;
3.成熟的软件过程
( 1 ) 成熟 与 不成熟
过程的 成熟 与 不成熟 :
1.过程发展 : 过程需要经历 不成熟 到 成熟 的发展历程 ; 成熟的过程才能 发挥应有的作用 ;
2.儿童 与 成熟的成年人 差异 : ① 计划性, ② 稳定性, ③ 能力, ④ 一致性, ⑤ 预测性 ;
3.组织成熟度 : 处于不同的 过程规范 成熟度 的 组织, 就像处于不同成熟状态的 人 一样 ;
4.过程的 成熟 关口 : 过程成熟需要经过 三个关口 : ① 僵化, ② 固化, ③ 优化 ;
( 2 ) 成熟 的 发展过程
成熟的发展过程 :
1.软件过程创建 : SPI ( Software Process Improvement ) 软件过程改进 的 第一步是 软件过程创建 ( SPC : Software Process Create ), 其中 C 是 Create ; 这是 SPIN ( Software Process Improvement Network ) 专家提出的;
2.僵化阶段 : 该阶段需要降低灵活性, 即 僵化, 障碍在这个阶段没有消除 ;
3.完成该步骤的条件 : 软件过程创建 需要行政力量 推进 ;
4.固化阶段 : 固化阶段开始真正消除障碍问题, 对应 障碍消除 ABO 阶段的 B 阶段; ABO : Awareness, Buy-in, Ownership, 即 了解, 接受, 拥有 ;
5.优化阶段 : 在上面 僵化 固化 的基础上, 开始改进, 开始 优化阶段 ;
( 3 ) 软件过程成熟度
软件过程的成熟度 :
1.软件过程成熟度 定义 : 软件过程的成熟度 指的是 特定的 软件过程 被 显式 ①定义, ②管理, ③度量, ④控制 和 ⑤执行 的程度 ;
2.软件过程成熟度 作用 : 成熟度 可以用于 指示 组织加强其软件过程能力的 潜力 ;
3.软件过程成熟度高级表现 : 当 组织 达到了 一定的 软件过程成熟度级别后, 软件过程会被 制度化, 进而成为 组织文化 ;
( 4 ) 不成熟的组织标志
不成熟的组织标志 :
1.没有软件过程 : 缺乏 确定的 软件过程 和 其相应的 管理 和 控制 ( 软件过程的 ) ;
2.有软件过程但不执行 : 定义了软件过程, 但是 不能严格 遵循 和 强制执行 ;
3.被动管理 : 管理完全是被动的方式, 策略是 救火 ;
4.计划不准 : 没有有效的 估算依据, 软件的 预算 和 计划 不准确, 经常超标 ;
5.产品不稳定 : 如果强制软件在预订期限完成, 那么软件的 功能 和 质量 无法保证 ;
6.没有评价体系 : 缺乏 ①评价软件产品质量 和 ②解决产品缺陷 和 过程问题 的 客观基础;
( 5 ) 成熟的组织标志
成熟组织的标志 :
1.有软件过程 : 在组织范围内, 有 管理软件开发 和 维护 过程的 能力 ;
2.过程得到遵守 : 所有人员都 ① 了解其要遵循的 软件过程, ②所有的工作都按照事先的计划完成 ;
3.责任分明 : 在被定义好的软件过程中, 所有 项目 和 机构 中的 角色 和 责任分明 ;
4.计划准确 : 计划 和 预算 有章可循, 基于***历史数据***, 因此计划是实际可行的 ;
5.预算准确 : 预算的结果通常能够达到, 如 ①成本, ②时间表, ③产品功能, ④质量 等 ;
6.有评价体系 : 有 客观 和 定量化 的措施, 用于判定 产品质量 并 分析 产品 与 生产过程中的问题 ;
7.基础设施 : 基础设施用于 支撑 软件过程, 如 标准过程库, 历史数据 ;
4. 过程规范 副作用
过程规范 的 副作用 : 过程规范要有一个度, 过犹不及;
1.无法定义具体工作 : 当前的软件工程技术, 无法 具体定义 软件开发的大多数 工作;
2.强制手段作用 :
① 少用 : 强制手段的作用是 发现 并 纠正 少数 不符合过程要求的行为 ;
② 威慑 : 强制手段 仅仅是 对破坏过程实施的人 的 威慑 ;
5. 过程认知的 误区
过程认知 的 误区 :
1.文件误区 : 有了文件 并 不等于 建立了过程, 还必须 遵守 并实施 过程 ;
2.记录误区 : 过程执行了, 必须记录, 不记录就不完整 ;
3.信任误区 : 员工按照 要求 执行过程, 必须进行培训, 改变平时的习惯需要 强制执行 ;
4.验证误区 : 过程不会自动实施, 实施了过程必须要验证, 目标是否达到 ;
5.稳定误区 : 过程建立了, 不能一成不变, 要 根据 环境, 商业目标 改变 而 改进 软件过程 ;
6.保证误区 : 得到了高层领导支持, 不一定有保证, 为业务工作带来效益才有保证 ;
四. 过程改进的必要性
过程改进的必须要性 : 给出了以下 六个 必须要持续改进过程的 理由 ;
1.性能降低 : 过程经过一段时间后, 其性能就会趋于降低 ;
2.需求提高 : 客户的需求会越来越高 ;
3.目标变化 : 组织的目标一直是变化的 ;
4.环境变化 : 组织所在的环境在不断变化 ;
5.对手改进 : 竞争对手在不断改进 ;
6.逐步成熟 : 组织的过程是 逐步成熟 的 ;
总结 :
凡是活动, 都存在过程 ;
凡是过程, 都存在改进 ;
凡是改进, 都没有终点 ;