当前课程知识点:软件工程 >  第1章 初识软件工程  >  1.5 软件质量实现 >  讲授视频

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

讲授视频在线视频

下一节:海芯科技创始人施侃乐访谈

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

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

软件已经成为人们生活中

不可缺少的一部分

正是由于软件越来越重要

人们对其质量的要求

也就越来越高

人们都希望开发高质量的软件

但是由于受到市场因素的牵制

不可能达到“完美”这个标准

因此 软件工程的目标

不是实现“完美”

而是达到“足够好”

那么 什么是好的软件呢

质量是一个复杂多面的概念

不同的人从各自的视角

会有不同的理解和要求

对于用户来说

他们更关心的是系统的功能质量

比如说

是否满足了自己的需求

是否存在影响使用的缺陷

软件性能如何

以及是否容易使用等

开发人员

更多关心的是系统的结构质量

主要包括代码的可读性

可测试性 可维护性

以及效率和安全等方面的因素

对于投资者来说

软件开发的过程质量更为重要

他们主要关心的是

项目是否可以在

规定的时间和预算内交付

最终产品的交付质量

是否可以保证

通常来说

软件质量应该涵盖软件过程

软件产品和产品效用三个方面

软件过程用过程质量来衡量

软件产品则包括

内在质量和外在质量两部分

产品的效用用使用质量来衡量

那么过程的质量会影响到

软件产品内在的代码质量

而代码质量的好坏

决定了产品的外在质量

外在质量最终影响到

用户的使用质量

因此

我们必须用有效的方法

来检验整个开发过程

程序代码和最终产品

并对用户的使用质量进行监测

质量大师温伯格认为

质量就是软件产品

对于某个(或某些)人的价值

这里的某个或某些人

通常指的就是用户

在这一句话中

包含了两个层次的质量含义

即“正确的软件”

和“软件运行正确”

所谓“正确的软件”

是说一个软件

要能够满足用户的需求

为用户创造价值

比如说带来工作的便利

创造了利润或者减少成本

而“软件运行正确”

说的是软件没有或很少有Bug

扩展性强 性能良好

易用性高等

我们开发的软件

既要是正确的

也要是运行正确的

这是曾经引发全球热潮的

谷歌眼镜(Google glass)

从2015年1月19日开始

不再接受订单

与此同时

谷歌还关闭了

“探索者”这个软件开发项目

除去销售策略欠佳方面的原因

一个关键的问题在于

谷歌自己也不清楚

谷歌眼镜存在的目的

它是让用户更便捷地

获得电子邮件等通知信息

还是更迅速地拍照

由于需求调研不足

产品过于超前

再加上价格昂贵等因素

使得这款看起来很酷的产品

很快就丧失了对用户的吸引力

前面我们提到过

微软的Vista系统

这是一个典型的

“运行不正确”的软件

Vista系统

应该说是用户非常期待的

也是满足用户需求的

但是由于莫名其妙的死机

以及很差的运行效率等

一系列缺陷

最终导致许多用户弃用

甚至有的用户

选择退回到XP版本

所以微软不得不在两年之后

用Win 7取代了Vista

上面两个事例很好地说明了

一个好的软件

既要是“正确的”

也要是“运行正确的”

这两者是相辅相成的

前者关系到软件的成败

后者关系到软件的好坏

对于开发团队来说

尤其是偏重技术的开发团队

往往过分注重后者

也就是说“运行正确”

经常会陷入到

在软件开发过程中的

技术细节中

而忽略了前者

也就是

软件需要符合用户的需求

这样开发出的软件

经常是能用

但不是用户满意的产品

从软件产品的角度来看

高质量意味着

做了用户想要它做的事情

能够正确有效地

使用计算机资源

易于用户学习和使用

系统设计良好

代码编写规范

而且易于测试和维护

在理解了质量的基本含义之后

我们要考虑一下

应该如何评价质量

这是一个可爱的小胖子

你会因为这个人长得结实

饭量大

就断定他是健康的吗

显然这不是一个科学的判断方法

现代人一般会通过

考察多方面的生理因素

来判断这个人是否健康

例如使用医学仪器

对身高 体重 心脏 血压 血液

体温等一系列指标进行测量

如果所有指标都是合格的

那么可以说这个人是健康的

如果某项指标不合格

就说明这个人

可能存在一定的健康隐患

医生会做出进一步的诊断

并对症下药

同样的道理

产品的质量

也是可以从多个维度

来进行评价的

David Garvin提出了一种

多维度的质量评价模型

具体包括性能质量 产品特色

可靠性 符合性 耐久性

可服务性以及外观性和感知性

等8个维度

不同的属性反映了

产品质量的不同方面

我们可以通过

改善产品的各个质量属性

来提高整个产品的质量

我们用一个汽车的例子

来说明一下Garvin的

8个质量维度

汽车首先是要满足

人们出行的驾驶需要

所以在功能和性能上符合要求

为最终用户提供价值

除了主要的产品特性之外

如果还有一些诸如自动泊车

未关门报警

在遥控器锁车的时候

自动检测

并关闭敞开的车窗等特性

这些特性会给用户带来意外的惊喜

当然

汽车要可靠安全

要符合国家或行业的相关标准

日常维修不能损坏

和降低车辆的性能

维修时间

是在可接受的范围之内

除了这些主要的产品特性之外

人们对产品的审美

也是必不可少的

当然这个审美是各有不同

是非常主观的

也许有的人

欣赏某种优雅 稳重的外形

有人则喜欢醒目

动感的外在

但是对于产品来说

审美这个性质是非常重要的

有时候一些偏见

也会影响人们对质量的感知

例如企业或者品牌的声誉

会让人对产品质量产生相应的感觉

Gravin的质量维度

是一个通用的产品评价体系

并不是专门为软件制定的

但是它也同样适用于软件产品

ISO9126模型

是一种评价软件质量的通用模型

它定义了软件的6个质量属性

即功能性 可靠性 易用性

效率或性能

以及可维护性和可移植性

每一个属性

又细分成一系列子属性

下面我们简单地解释一下

每个质量属性的含义

功能性包括适合性 准确性

互操作性和安全性四个子属性

适合性就是说

软件提供了用户所需要的功能

同时软件提供的功能

也是用户所需要的

准确性是指软件提供

用户功能的精确度

达到要求

比如说运算结果的准确

数字没有偏差等等

互操作性是软件

和其它系统进行交互的能力

当然软件还要有

保护信息和数据的安全能力

比如说

我们在京东网站上购买商品

像关键字搜索 商品质量浏览

选购商品 生成产品订单等

都是用户需要的主要功能

订单费用的结算

也必须是运行准确的

同时这个系统

还会和银行卡支付系统进行交互

系统也要保证用户账号的安全

可靠性指的是

系统是否能够在一个

稳定的状态下满足用户的使用

那么这就意味着

软件要有代码出错的处理能力

对外部出现错误时

软件仍然能够保持

正常的运行状态

当然软件不可能

绝对不出现问题

但是在失效发生的情况下

系统应该能够

重新恢复到正常的运行

同时恢复受直接影响的数据

易用性是指

在规定的条件下使用时

软件产品被理解 学习

使用和吸引用户的能力

软件的易用性

是用户在使用过程中

所实际感受到的系统质量

它会直接影响到

用户对产品的满意度

性能也是影响产品质量的

一个重要因素

通常从时间特性

和资源使用两个方面

来衡量系统的性能水平

比如说

我们打开一个商品网页

浏览商品的时候

希望系统对用户请求

具有快速的响应和处理

同时消耗的系统资源

和网络带宽比较低

对于开发人员来说

可维护性和可移植性

是非常重要的

可维护性

用于衡量软件产品被修改的时候

需要花费多大的努力

可移植性

是指软件从一种环境

迁移到另一种环境的难易程度

现在大家考虑一个问题

软件质量是如何实现的

或者说

如何才能有效地提高软件质量

软件开发过程

包括了分析 设计 实现

测试等一系列活动

测试是检验软件产品的

一个重要的手段

但是质量是能够测出来的吗

实际上到测试的阶段

软件质量的问题如果发生

已经很难进行纠正

所以说 质量并不是测出来的

而是在开发过程中

逐渐的构建起来的

构建高质量代码

是每一个软件工程师

义不容辞的责任

当然

测试也是开发过程中

不可缺少的一个重要环节

因此 对于软件开发来说

高质量的设计 规范的编码

以及有效的测试是保证

软件产品质量的三个重要方面

也是提高软件质量的必要手段

现在问题又来了

软件质量的重要性

是无容置疑的

那么是不是质量越高就越好

或者是说

软件产品是不是应该

追求“零缺陷”

下面我们来看

两种不同的使用环境

对软件质量的不同要求

对于航天软件来说

如果在发射时软件出现问题

就会造成巨大的损失

所以说在发射之前

只要发现任何异常

就会立即取消发射指令

直到异常被消除为止

在这种情况下

软件的质量越高越好

软件产品追求的是“零缺陷”

像许多互联网软件

例如新浪微博

百度导航等

在产品还存在一定缺陷的情况下

就发布上线

之后再不断地更新版本

修复已有的缺陷

似乎在这种情况下

用户也是可以接受

一个有缺陷的软件产品的

那么大家想一想

为什么这种系统

不像航天系统一样

需要在发布之前

修复所发现的任何缺陷呢

显然

我们不能抛开商业目标

来谈论产品质量

企业的根本目标

是要获得尽可能多的利润

为了提高用户对产品的满意度

企业必须提高产品质量

但是也不可能

为了追求完美的质量

而不惜一切代价

质量是有成本的

当企业为提高质量所付出的代价

超过了产品收益时

这个产品也就没有商业价值了

因此

企业必须权衡质量

效率和成本三个因素

产品质量太低或太高

都不利于企业的长远发展

理想的质量目标

不是“零缺陷”

而是恰好让用户满意

并且将提高质量

所付出的代价控制在预算之内

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲授视频笔记与讨论

也许你还感兴趣的课程:

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