当前课程知识点:软件工程 >  第13章 软件系统测试 >  13.1 软件测试概念 >  讲课视频

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

讲课视频在线视频

下一节:讲课视频

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

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

软件质量

一直是人们关注的一个重要问题

在理想的情况下

开发人员编写完代码之后

所有程序

都应该能够运行起来

并按照预期的行为进行工作

但是现实往往没有这么美好

即使是那些大公司发布的产品

依然会存在这样那样的问题

下面给大家看一个视频

这是1998年

比尔盖茨在Win98新闻发布会上

所遭遇的一个情形

我们看到

在演示Win98的USB功能时

出现了蓝屏死机

现场颇为尴尬

软件在投入运行之后

出现问题的事例数不胜数

软件测试

作为开发过程的最后一个

关键活动

对软件质量保证

具有非常重要的作用

我们经常会听到

bug这个词

它的原意是臭虫或者虫子

现在经常被人们用于表示

隐藏在计算机系统中的

一些没有被发现的缺陷或者问题

这个词的由来

可以追溯到1945年

一只飞蛾钻进了计算机电路里

导致系统无法工作

当时格蕾丝·赫柏中尉

把死去的飞蛾贴到在工作日志上

写道 就是这个bug

害得我们今天的工作无法完成

从此

人们把计算机的错误戏称为Bug

而将发现Bug

并纠正的过程称为Debug

那么软件缺陷是如何产生的

软件开发是由人来实施的

犯错可以说是人的天性

由于认识不足

关注度和策略等一系列的问题

人们不可避免地

就会在需求分析 总体设计

详细设计和编码调试的过程中

出现错误

而这些错误

就造成了软件产品的缺陷

我们来分析一个真实的例子

在1991年的海湾战争期间

一枚伊拉克飞毛腿导弹

击中了沙特阿拉伯的一个军营

造成了28名美国士兵丧生

事后的调查发现

由于程序的计时

使用系统时钟

并用整数表示

而系统时钟的1换算成秒

是1/10秒

这样寄存器存储

并计算导弹的时间

就会产生一个很微小的误差

但是系统缺少有效的防范措施

当爱国者导弹

连续工作了100小时之后

导弹的时钟

已经偏差了差不多1/3秒

这相等于600米的距离误差

由于这个时间的误差

即使是雷达系统

侦查到飞毛腿导弹

而且预计了它的弹道

系统也找不到

实际上来袭的导弹

最终导致了悲剧的发生

通过现实中的一些例子

我们已经看到

软件发生错误时

会对人类的生活

造成或大或小的影响

有的甚至会带来灾难性的后果

软件测试

可以使这种风险降低

开发人员通过测试

尽可能地发现

隐藏在软件中的缺陷

并且及时地修复它们

从而保证最终交付出

经过严格检验的一个完整产品

而不是那些

一触就死机的定时炸弹。

现在大家思考一个问题

什么是软件测试

软件测试的概念

可以从正向思维和逆向思维

两个方面来理解

从正向思维来看

软件测试就是试图验证

软件能够正常工作的

而逆向思维

是假定软件是有缺陷的

通过设计和执行一些测试用例

来证明程序执行错误这样的假设

按照正向思维的模式

测试需要针对系统的所有功能

逐个验证它们的正确性

测试用例

通常是使用有效的数据

正确的流程和一些多样化的场景

通过执行这些用例

来证明软件是成功的

在逆向思维中

测试人员要不断思考

开发人员理解上的误区

一些不良的编程习惯

各种边界和无效的输入

系统的一些薄弱环节

通过试图破坏

或者摧毁系统的方式

来查找软件中的问题

软件测试

要从发现错误入手

也就是说

它直接的目标

是以最少的人力 物力和时间

找出软件中潜在的

各种错误和缺陷

通过修正这些错误和缺陷

来提高软件的质量

但是发现错误

并不是测试的最终目的

测试最终还是要对软件质量

进行度量和评估

以验证软件质量

满足客户需求的程度

当然 在测试过程中

通过分析错误产生的原因

可以发现当前开发过程中存在的问题

从而进行软件过程的改进

测试是软件质量保证的

一种有效手段

但是测试本身也存在一些局限性

首先 测试是不彻底的

它只能证明错误的存在

而不能证明错误是不存在的

所以 软件经过测试之后

也不能保证没有缺陷和错误

其次 测试是不完备的

我们不可能使用穷举的方法

把所有输入和程序分支都测试到

所以

设计好的测试用例是非常关键的

另外

测试并不能直接提高软件质量

软件质量的提高还是要依靠开发

但是没有测试也是万万不行的

我们通过测试来发现缺陷

进一步地促进修正缺陷

从而间接地起到

提高软件质量的作用

尽早地介入

是软件测试提倡的一个基本原则

我们在软件开发的各个阶段

都有可能引入错误

而且前期阶段存在的缺陷

会随着软件开发过程的推进

而不断地放大

缺陷发现和修复得越早

所花费的成本也越低

早期的缺陷

在开发后期或者投入运行之后

再被发现和修复

成本有可能会扩大到

几十倍或者上百倍

软件错误具有聚集性

它也符合二八原则

即80%的缺陷

常常存在于20%的代码中

如果要使软件测试更加有效

就要记住常常光临一些

缺陷的高危多发地段

在那里发现缺陷的可能性

就会大得多

软件测试用例具有杀虫剂效应

我们知道给果树喷洒农药

时间长了

虫子就会对杀虫剂产生耐药性

测试用例也需要定期评审和修改

同时

还要不断地增加新的测试用例

这样才能发挥更大的效力

前面说过

软件测试是通过寻找缺陷

来提高软件的质量

那么测试需要重点培养

什么样的思考问题的方法

这里列出了

测试人员应该具备的

不同思维模式

其中最重要的

就是逆向思维和发散思维

逆向思维

强调的是按照与常规思路

相反的方向进行思考

通常开发人员

运用正向的思维去进行软件开发

所以逆向思维可以发现更多

开发人员思维上的漏洞

发散思维是一种寻求多种答案

最终使问题获得解决的思考方法

这种思维方式可以开阔眼界

活跃思想

用比较独特的视角来看待软件

不同的思维方式各自有不同的特点

我们在平时

也会有意识或无意识地

应用这些思维

但是只有不断地学习

实践和思考

才能做好软件测试的工作

软件工程课程列表:

第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章 期末考试与总结

-第一部分:基础知识

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

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

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