当前课程知识点:软件工程与软件自动化 >  第八章 软件过程改进 >  8.1 软件过程综述 >  授课视频

返回《软件工程与软件自动化》慕课在线视频课程列表

授课视频在线视频

下一节:授课视频

返回《软件工程与软件自动化》慕课在线视频列表

授课视频课程教案、知识点、字幕

嗨,大家好

今天我们来讨论软件过程

首先我们来看一个混沌的软件开发过程

开发团队从客户那里获得了原始的需求之后

就开始了那种不为外人知道的神秘的制造过程

由于客户需求的变更和内部开发的问题

导致了产品的质量不能够满足用户的要求

经过多次返工之后

才能勉强交付给客户一个不太满意的

但是勉强能够接受的产品

这个软件开发过程暴露出来的主要问题就是

开发过程是一个黑盒子,它没有可视性

无从得知开发人员是不是按照标准的开发过程

进行了软件开发活动

这也就无法保证软件产品质量的稳定

从上面的例子我们可以看出,如果我们能把注意力

从软件产品转移到软件的开发过程

说明我们具有了过程思维的意识

过程思维和已经有几百年历史的任务思维

是完全不同的

面向过程的思维注重的是总体的目标

各部分工作的协调性和一致性

从而消除了各部分工作之间的冲突

提高了总体的工作效率

从而有效地达到工作的整体目标

而面向任务的思维作为一种传统的思维模式

通常注重于任务、作业、人员和组织结构

它首先将任务分解,然后指派人员去完成

这样就很容易导致忽略了总体

当各个局部的工作之间出现矛盾和冲突的时候

再去着手解决

这样做就会导致低效率的现象发生

大家再来回顾一下软件质量保证和软件质量控制

质量保证就是通过让开发团队的开发活动

符合既定的软件过程规范来保证软件产品的质量

而产品质量控制则主要是通过对阶段性的任务的

完成情况和产品的检查和审计来保证产品的质量

说到软件过程,就不得不提著名的软件工程大师

CMM之父,Watts Humphrey提出的几个重要论

Humphrery认为软件系统的质量

取决于用于开发和改进它的过程的质量

现在这种观点已经成为一个得到普遍认可的基本
观点了

第二,解决软件问题的重要一步是把整个软件工

当作一个过程来对待

使其能够控制、度量和改进

第三,软件过程是我们用于开发软件产品的

一套工具、方法和实践

第四,软件过程管理的目标是按照计划生产产品

同时提高软件组织的能力

以利于生产出好的产品

第五,成本估算和开发期安排的承诺

应该要比较合理

开发出的产品应该在功能和质量方面

能够满足用户的期望

第六,有效的软件管理必须考虑所完成的任务

所采用的方法和工具

以及参与的工作人员的技能、培训和他们的积极性

第七,有效的软件过程必须是可预测的

我们知道,我们做任何事情,完成任何工作

都需要有步骤、有顺序地完成

这些步骤和顺序是由事务和工作的规律所决定的

是不能任意被打乱的

无论是传统的制造业还是软件行业

从原材料和需求的输入

到用户得到所需要的产品

都会经历一个完整的生产过程

在这个生产过程中,具有一定技能的

经过培训的、具有某种动机的生产者

使用工具和设备,按照某种规程、方法和技术

将原始的需求转化为用户所需要的产品

对于复杂的工作

生产过程又可以分解为多个生产子过程

这些子过程大致可以分为三类

基本过程类、支持过程类和组织过程类

基本过程类包括获取过程、供应过程

开发过程、运作过程、维护过程和管理过程

支持过程类包括文档过程、配置管理过程

质量保证过程、验证过程、确认过程

联合评审过程、审计过程以及问题解决过程

而组织过程类则包括基础设施过程

改进过程以及培训过程

下面我们来看一看具体的过程应该有哪些要素

首先是输入和输出

具体到软件开发过程

输入就是用户的业务需求

输出就是用户满意的产品

活动呢,完成了从输入到输出的增值过程

复杂的活动还会进一步的被分解为更小的任务

为了完成这些活动和任务

必须要有足够的资金,人员,设备

以及其他一些必需的消耗品

如何保证开发活动按照特定的规范要求来进行呢

这就需要测量和验证

测量可以从活动或者工作成果当中

获取相关的质量特性,并和预期值做比较

如果满足预期值就说明这些活动是合格的

否则就是不合格的

所有的这些过程要素是否有效

可以通过软件过程是否满足了过程的目标来进行判断

也就是要最大限度的控制成本,提高质量

取得最大的增值效果

总之呢,过程要素说清楚了3个核心问题

做什么,规定了实现预定的目的或成果

所需要完成的一系列的活动和任务

谁来做,也就是执行活动相关的角色和职责

怎么做,完成活动过程所需要采用的技术、方法和步骤

前面我们说过,软件开发过程可以分为

基本过程,支持过程和组织过程

不同的人员从不同的角度关注着各自的子过程

比如,获取者和供应者他们是以合同的观点

来关注获取过程和供应过程

而开发运维人员如果从开发的观点

他们关注开发过程和维护过程

他们同时可以以支持的观点来关注着

支持过程和组织过程

而支持过程和组织过程则贯穿着整个的软件生产过程

为其他过程提供服务和支持

过程思维就是要求我们具有全局的观念

不仅要考虑自身所关注的和负责的子过程

我们更要关注各个子过程之间的协调性和一致性

从而获得整体的成功

我们可以认为所有的软件开发企业

都有自己独特的软件开发过程

那么如何衡量一个软件企业的开发过程是好还是不好呢?

客户根据什么来选择开发企业

来把自己的需求变成产品呢

我们可以用软件的过程成熟度来度量

软件的过程成熟度是软件过程中的一个重要概念

它是指一个特定软件过程得到清晰的定义

管理、测量和控制的有效程度

成熟度意味着过程能力上的增长潜力

而且表明了一个组织,它的软件过程的丰富性

还能表明组织中的其他项目

在运用同样的一个过程能够产生一致的结果

软件过程能力是指软件开发过程当中所能达到的能力

这个过程能力它包括能够达到的

质量、效率、工期、成本等等

一般情况下,软件过程能力越强

所开发的软件质量就越好,成本就越低,工期就越短

软件过程成熟度意味着什么呢?

由于运用组织的软件过程

使得软件的过程纪律性一致增强

从而它的软件过程所导致的生产率和质量

能够随时间的推移而得以改进

在成熟的组织中

通常通过文档和培训使全组织成员

对软件过程都会有很好的了解

并且能够使得这个过程得到它的用户的不断的监控和改进

随着软件组织的软件过程成熟度的提高

组织通过方针、标准和组织机构将这些软件过程规范化

规范化需要建立一只支持经营方法、实践

和规程的基础设施及社团文化

使得它们在最初的定义方法、实践和规程的人员

离去之后,它们仍然能够继续下去

为了对软件过程的成熟度有个感性的认识

我们一起来看一下成熟的过程和不成熟的过程之间的比较

在不成熟的过程中,没有明确的规定角色和职责

常会发生重叠和不清楚的所属关系和责任

而成熟的过程呢,有明确规定的角色和职责

相互之间关系没有重叠,有明确的目标和测量方法

能够体现持续改进过程的机制

在不成熟的过程中,每个人都按照自己的想法做事

而成熟的过程中,大家遵循一个规划好的文件化的过程

相互之间分享取得的经验

在不成熟的过程中呢

无秩序的混乱现象随处可见

“救火”这种方式解决出现问题的情况经常发生

每个人都想当英雄

而在成熟的过程中,大家根据已有的知识和专业的规则

对发生的问题进行分析和处理

在不成熟的过程中

经常延迟交付产品或者是超出预算

而在成熟的过程中呢

他们的估算就比较准

项目可以得到有效的控制和管理

目标一般能够达到

在工作人员的奖励方面

不成熟的过程中奖励的往往是救火队员

而在成熟的过程当中

奖励则是那些生产效率高,质量高的团队

奖励的是防火者而不是救火者

最后在预见性方面,不成熟的过程中

质量往往是不可把握的,往往依赖于个人

进度和预算不能根据以往的经验来确定

而在成熟的过程中,项目的进展和产品的质量

都是可以预见的

进度和预算也可以根据以往积累的项目经验来确

而且比较符合实际情况

当一个规范化过程已经渗入组织的日常生活当中

过程的要求已经变成全体员工的自觉行动

得到大家的认同和坚持遵循的时候

过程便成为制度化

做到这一点并不容易

要靠过程文化和过程基础设施的支持

过程文化是指人们的习惯和行为受到过程思维

和过程管理原则的影响

人们对于规范化的过程是完全认同的

也就是说,人们的活动自觉地按照过程的要求去做

对于软件过程来说

基础设施指的是支持软件过程的基础框架和结构
基础

它不仅包括组织和管理的岗位和职责

也包括支持定义过程、开展过程活动

获取和分析过程反馈等等

以及不断的进行过程改进所必须的技术工具和平台

组织和管理基础设施包括

建立、监控和推进过程活动的岗位及其职责

支持过程的岗位和职责

又有面向全局的和面向局部之分

支持全局工作的功能组通常是在公司一级上工作

比如软件工程过程组

支持局部工作的功能组可能是在项目级上工作

也可能是在某个特定的关键过程域上工作

在这些功能组工作的人员可以是全职的

比如软件工程过程组

也有的功能组人员是兼职的,比如软件过程改进组等等

最后,我们总结一下软件过程的几个特性

首先,过程应该被定义,也就是要写下来

一般写下来的东西都是要经过仔细的思考和总结的

剔除了一些不确定的因素,具有一定的稳定性

其次,过程应该被掌握

不被理解和掌握的过程是没有实际意义的

只是一纸空文

掌握一个复杂的过程是不容易的

不仅需要对过程自身的认识和培训

还需要执行者掌握相关的技能

这些都需要对相关人员进行充足的培训才能掌握

第三,过程必须被实施

执行者了解了过程,也掌握了相关技能

还必须要严格的按照过程规范进行工作

才能体现过程的价值

才能发现过程需要修改的地方

要做到这一点,必须在管理和组织方面做好工作

最后,过程应该是可监控的

如果过程不可视不可控,就是一个混沌的过程

也就无法消除管理者的恐惧

无法对过程进行度量和改进

好,今天就讨论到这里,谢谢大家

软件工程与软件自动化课程列表:

第一章 软件工程基础

-1.1 软件工程的前生今世

--开篇阅读

--授课视频

-第一章 软件工程基础--1.1 软件工程的前生今世

-1.2 万变不离其宗

--授课视频1/3

--授课视频2/3

--授课视频3/3

-第一章 软件工程基础--1.2 万变不离其宗

-1.3 唯一不变的是变化

--授课视频1/3

--授课视频2/3

--授课视频3/3

--外部链接

-第一章 软件工程基础--1.3 唯一不变的是变化

-1.4 亡羊补牢为时不晚

--授课视频1/2

--授课视频2/2

-第一章 软件工程基础--1.4 亡羊补牢为时不晚

-扩展阅读与话题讨论

--扩展阅读

--话题讨论

第二章 敏捷开发

-2.1 方法论来源于恐惧

--授课视频

-第二章 敏捷开发--2.1 方法论来源于恐惧

-2.2 敏捷是什么

--授课视频

-第二章 敏捷开发--2.2 敏捷是什么

-2.3 典型敏捷开发方法

--SCRUM敏捷开发方法

--XP敏捷开发方法

-第二章 敏捷开发--2.3 典型敏捷开发方法

-2.4 敏捷不是万能药

--授课视频

-第二章 敏捷开发--2.4 敏捷不是万能药

-专家谈敏捷

--专家谈敏捷开发方法

-扩展阅读与话题讨论

--外部链接

--话题讨论

第三章 OO与UML

-3.1 面向对象核心概念和基本特性

--核心概念与基本特性

-第三章 OO与UML--3.1 面向对象核心概念和基本特性

-3.2 面向对象设计基本原则

--面向对象设计基本原则

-第三章 OO与UML--3.2 面向对象设计基本原则

-3.3 通用职责分配模式(GRASP)

--通用职责分配模式

-3.3 通用职责分配模式(GRASP)--作业

-3.4 从重构到模式

--模式和设计模式

-第三章 OO与UML--3.4 从重构到模式

-3.5 使用UML设计面向对象系统

--UML综述

-第三章 OO与UML--3.5 使用UML设计面向对象系统

-3.6 主要UML模型图绘制技巧

--UML用例图

--UML类图

--UML序列图绘制技巧

-第三章 OO与UML--3.6 主要UML模型图绘制技巧

-扩展阅读与话题讨论

--设计模式有毒么?

--话题讨论

第四章 对象模型分析

-4.1 案例简介

--书籍参考

--案例说明

-4.2 对象模型之一

--授课视频1/2

--授课视频2/2

-第四章 对象模型分析--4.2 对象模型之一

-4.3 对象模型之二

--授课视频1/2

--授课视频2/2

-第四章 对象模型分析--4.3 对象模型之二

-4.4 对象模型之交互

--授课视频

-第四章 对象模型分析--4.4 对象模型之交互

-扩展阅读与话题讨论

--图书推荐

--话题讨论

第五章 软件自动化技术

-5.1 软件自动化概述

--软件自动化概述

-第五章 软件自动化技术--5.1 软件自动化概述

-5.2 典型自动化方法和工具

--典型自动化工具视频

-第五章 软件自动化技术--5.2 典型自动化方法和工具

-5.3 文档自动化

--文档自动化视频

-第五章 软件自动化技术--5.3 文档自动化

-5.4 测试自动化

--测试自动化视频

--白盒测试工具VU的示例演示片段(版权属原作者)

--功能和性能自动化测试工具及简单应用演示

-第五章 软件自动化技术--5.4 测试自动化

-专家访谈

--北京理工大学刘辉教授谈软件自动化新进展

-扩展阅读与话题讨论

--各个开发阶段最流行的Java工具汇总

--话题讨论

第六章 CI/CD与DevOps

-6.1 持续集成

--持续集成视频1/2

--持续集成视频2/2

-第六章 CI/CD与DevOps--6.1 持续集成

-6.2 持续交付和部署

--持续交付和持续部署

-第六章 CI/CD与DevOps--6.2 持续交付和部署

-6.3 DevOps

--DevOps授课视频

-第六章 CI/CD与DevOps--6.3 DevOps

-专家访谈

--卓睿科技总架构师带来的精彩访谈

-扩展阅读与话题讨论

--DevOps专题

--话题讨论

第七章 软件质量保证

-7.1 质量和质量保证

--授课视频

-第七章 软件质量保证--7.1 质量和质量保证

-7.2 软件质量模型

--授课视频

-第七章 软件质量保证--7.2 软件质量模型

-7.3 SQA组织与职责

--授课视频

-第七章 软件质量保证--7.3 SQA组织与职责

-7.4 全面软件质量管理

--授课视频

-第七章 软件质量保证--7.4 全面软件质量管理

-专家访谈

--专家访谈

-扩展阅读与话题讨论

--外部链接

--话题讨论

第八章 软件过程改进

-8.1 软件过程综述

--授课视频

-第八章 软件过程改进--8.1 软件过程综述

-8.2 软件过程改进

--授课视频

-第八章 软件过程改进--8.2 软件过程改进

-8.3 能力成熟度模型

--授课视频

-第八章 软件过程改进--8.3 能力成熟度模型

-8.4 过程改进标准框架

--授课视频

-第八章 软件过程改进--8.4 过程改进标准框架

-扩展阅读与话题讨论

--敏捷和CMM矛盾么?

--话题讨论

第九章 软件复用

-9.1软件复用综述

--授课视频

-第九章 软件复用--9.1软件复用综述

-9.2 软件构件技术

--授课视频

-第九章 软件复用--9.2 软件构件技术

-9.3 软件复用实施

--授课视频

-第九章 软件复用--9.3 软件复用实施

-9.4 微服务架构

--授课视频

-第九章 软件复用--9.4 微服务架构

-扩展阅读与话题讨论

--微服务扩展

--话题讨论

文档提交处

-文档提交处--文档提交

授课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。