EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

软件质量管理-00-课程介绍

本文主要内容来自 SpriCoder 的博客,更换了更清晰的图片并根据新的课程设计做了补充和修正。

课程动机

  1. 核心课程:唯一一门系统讲解软件开发管理的课程
  2. 梳理如下的概念
    1. 软件项目管理
    2. 软件生命过程
    3. 软件过程
    4. 软件过程管理
    5. 敏捷软件开发
    6. CMM/CMMI
    7. 瀑布模型
  3. 未来可能需要的部分
    1. DevOps
    2. SRE

软件工程究竟是什么?

什么是软件开发?

本质上是智力劳动

软件开发的本质困难:

  • 复杂性
  • 不可见性
  • 可变性
  • 一致性

本课程目标(重要,要全部理解)

  1. 理解项目管理的基本概念,掌握项目管理的常用方法。例如估算和计划跟踪,配置管理,风险管理等。
  2. 掌握产品质量过程质量的基本概念,理解通过过程质量管理来保障最终产品质量或服务质量的手段。
  3. 掌握软件过程的基本概念,了解常用软件过程方法。理解进行个人级、小组级和组织级软件过程的评价与改进方法。
  4. 面临复杂项目的时候,能够选择适用的软件过程,对其进行合理组合和裁剪,并在此基础上合理组织和管理项目开发,达到预先设定的质量要求。

本课程要回答的十大问题(重要)

问题 回答
软件过程管理和软件项目管理是不是一回事?如果不是,两者差异是什么? 完全是两件不同的事情,没有隶属关系。
前者类似于流水线升级改造,关注过程本身,如开发工具是否适合。CMMI 主要指导软件过程管理
后者针对特定的项目目标实现,成本质量(主要是指产品质量)工期等。
管理视角的软件工程是要复制别人的成功。
软件估算过程中,项目经验/历史数据的作用是什么?您的答案经得起细问吗?比如,能具体解释如何把项目经验/历史数据转变成估算结果?估算结果经得起时间考验吗?比如,隔了 3 个月,能保证估算结果一致? 估算要尽可能细地划分,提升对结果的信心;
用相对大小、抽象的描述;历史数据应该为估算所用,通过适当的加工,提升对结果的信心。
所以,估算究竟追求的目标是什么? 追求的是所有参与者对估算结果的认同,而不是简单追求估算结果客观的正确性,因为客观的正确性是达不到的。
估算本质上是相互讨论、妥协、达成一致的过程。
估算规模与实际规模相近,可以认为估算准确;估算时间与实际时间相近,不一定是估算准确,可能是因为只给了这么多时间。
什么叫做 XX 管理?管理的要素有哪些?如何区分有管理(或者好的管理)还是没有管理(或者不好的管理)?这种判断如果只能事后从结果判断,有意义吗? 三要素:目标、状态跟踪、纠偏措施;
质量管理最难的是状态跟踪。
接上一问题,什么叫做软件质量?当您宣称做了质量管理,实际上真的对质量有管理吗? 绝大多数企业只有质量实践,没有质量管理。
质量路线图告诉我们如何追求高质量
说说敏捷吧。

- 客户合作胜于合同谈判,您会不先签订合同或类似文件就正式开始项目吗?
- 可以工作的代码胜过面面俱到的文档,试试二次开发?现如今,从头开始的软件项目还多吗?
- 个体和互动胜过流程和工具,您试试跟 DevOps 全栈工程师谈谈?当需要服务数亿或者数千万用户的时候,敢脱离过程,甚至简化过程吗?
- 响应变化胜过遵循计划,这究竟是甲方的想法还是您的想法?请仔细想一下!
当然,我们大可说敏捷宣言并不否认右项价值,那么问题来了,您如何判断右项已经做的足够了所以您可以开始重视左项的价值?
孙子曰:以正合,以奇胜。
好的敏捷是在充分理解了右项之后,在思考计算之后选择了左项。
从没有度量就没有管理/改进,到软件项目度量毫无意义,到包含 2200 多指标项的研发效能度量,到研发效能引发血案,这是想闹哪样?究竟要不要度量? 度量是没有争议的,一定要度量!
错误的做法:直接把别的项目的数据拿过来用。
从极度反对 CMM 到自己搞开发运维一体化成熟度模型,所以,这是成熟度模型的问题?还是其他问题? 只要可以用过程描述的事情,从不成熟到成熟的路线图都是一样的。
定量管理的本质是什么?用数据就是定量管理了?DevOps 模式下,还需要定量管理吗? 一是构造预测模型,二是用预测模型指导项目实践
DevOps 也需要定量管理,而且可以做得更好
关于工程实践。需求分析究竟要解决什么问题?设计究竟要设计什么?测试的目的是什么?为实现这个目的,测试实践的重点应该是什么? 严格区分客户需求和产品需求,前者是问题,后者是解决方案
设计就是要把内部-外部、动态-静态四个象限内容填满。
测试不是提升质量水平的手段,而是帮助掌握质量状态的手段
掌握 Ver & Val:前者关注的是产品需求是否得到体现、从这个产品需求(即解决方案)设计出来,一直到解决方案的开发完成,整个过程当中有没有偏、解决方案有没有被正确地实现出来;后者更多关注的是你的这个客户需求有没有得到满足,简单来说就是客户期望解决的问题,有没有被解决。

关于本课程的一些假设前提

  1. 软件开发本质上是智力劳动,开发者心理方面的因素不可忽视;
  2. 大部分情况下,管理仅仅是试图复制其他地方(场景)的成功,但是这种复制一般并不容易;
  3. 软件开发四大本质难题永远存在,不可能彻底解决,在不同时期凸显程度有差异;
  4. 项目管理是为了降低/减少各种无谓损耗来实现本该有的效能;
  5. 软件过程改进为了达到更好的效能,这其中质量(缺陷)是首要目标或限制。

内容安排

  1. 第一讲 概述
  2. 第二讲软件过程的历史演变和经典工作(1)
    1. 软件开发和应用特征驱动
    2. 当前挑战和未来
    3. 不同阶段的经典(瀑布、CMM、敏捷、等等)
  3. 第三讲软件过程的历史演变和经典工作(2)
    1. 技术热点 ABC 和 DevOps(https://www.icourse163.org/)自学
  4. 第四、五讲估算、计划和跟踪
    1. 估算方法、计划框架、挣值管理方法
  5. 第六、七讲质量管理
    1. 质量是什么?质量管理手段和路线图
  6. 第八讲风险管理
  7. 第九讲工程技术管理
    1. 需求开发管理、技术方案管理、方案决策、V & V 管理
  8. 第十、十一和十二讲统计与定量管理
    1. 常用用统计方法、软件过程建模与仿真技术、软件项目的定理管理
  9. 第十三讲 GQM 度量体系
  10. 第十四讲配置管理
  11. 第十五讲缺陷预防与根因分析
  12. 第十六、十七讲过程管理
    1. 基本概念和方法
    2. 参考模型
    3. 基础设施
    4. 过程裁剪和融合

课程组织

  1. 上课,单双周安排
  2. 平时作业组织
    1. 个人完成的部分课堂练习
    2. 小组完成的学期课题(为一个待开发的软件项目定义一个可以工作的软件过程)
  3. 期中考试
  4. 期末考试

课本

  1. Devops
  2. 软件过程与管理