当前课程知识点:软件工程与软件自动化 >  第五章 软件自动化技术 >  5.2 典型自动化方法和工具 >  典型自动化工具视频

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

典型自动化工具视频在线视频

下一节:文档自动化视频

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

典型自动化工具视频课程教案、知识点、字幕

嗨,大家好

首先我们来看一个自动重构工具的演示

重命名是软件编程过程当中我们经常做的事

大家对命名的苦恼都深有体会

关于命名有很多讲究

比如名字要有自注释性,不能太长,也不能太 短

单词缩写怎么缩,大驼峰命名,小驼峰命名等等

甚至有时候你想到了一个名字

却发现英文不会写,总不能写拼音吧?

还要去查汉英字典

同时,在编程的时候,开发者的思维处于极度亢
奋状态

他急于要把功能实现出来,所以对于命名这种费
心费力

而又觉得不太重要的事情进行quickly and ugly的
处理

暂时起个名字,夸张一点的程序员

甚至可能用int a1,a2,到a10这样的命名

来快速的定义变量。但这种命名是不符合编码规
范的

因此在完成代码编写之后

往往需要在第一时间对这些变量名进行重命名

手工重命名的效率很低

而且存在着多改、漏改和错改的可能性

而自动重构工具在你选中这个变量的时候

就可以给你提供准确快速的重命名服务

这是一个非常实用的,也是非常常用的重构方法

这里展示的是如何对现有的函数进行参数重排

比如原来Add方法用的是返回值

程序员想改成不用返回值的方式来传递计算结果

他只需要把鼠标放在这个方法上

从智能感知菜单中选择重排参数

然后用键盘的方向键进行左右调整就可以调整参
数的位置

更为方便的是,自动重构工具会自动定 位到

那些调用add方法的代码处,给出修改方案

开发者只需要按下回车就可以自动完成代码的修

自动重构工具不仅仅用于修改代码

还可以给开发者带来编程上的方便

比如方法重载可以提供新的功能

把鼠标定位到要重载的方法上

在智能感知菜单上选择方法重载

就可以很容易的生成一个新的同名方法

然后用键盘修改它的参数

我们在实现类的时候

往往需要把字段设为私有的

然后提供getter和setter方法供外部使用

使用封装字段功能可以快速的生成getter和setter

提高编程速度

大家可以看出,有了这些自动化重构工具的帮助

程序员的编程效率会得到大幅提升

把精力从重复枯燥的劳动中解放出来

集中进行一些高创造性的活动

最后要演示的是用卫语句来代替条件嵌套

条件表达式通常有两种表达方法

一种是所有的分支都属于正常行为

另一种是条件表达式提供的答案只有一种是正常
行为

其他都不是常见的情况

所以这两种表达式有不同用途

对于第一种情况

可以用if-then-else的条件表达式

对于第二种情况,由于某个条件极其罕见

我们应该单独检查这个条件

这种单独的检查我们就称之为“卫语句”

通过上面的几个演示

大家见到了自动重构工具的威力

但工具毕竟是工具,什么时候重构,要不要重构

这些还是需要开发者来决定

如果你觉得不需要重构

这些工具对你来说就是没有用的

一般来说,代码编写的时候或多或少都会偏离原
始设计

对编码的重构也体现了敏捷开发方法所提倡的迭
代和进化的观点

代码的重构对改进软件设计,提高代码质量

提高可维护性都有重要的作用

重构就像每次战斗之后的战场清理,武器擦拭和
战斗总结

它有利于下一场战斗的胜利

因此,合适的重构不仅不会降低开发速度

反而可以加快开发速度

什么时候适合做重构呢?可以是需求变更的时候

设计改进的时候,但更多的是在代码审查的时候

当我们发现了bad smells,就是代码坏味道的时

比如发现了代码当中的大量的拷贝,过大的类,
过大的方法等等

重构是灵活的,它可以手工完成

每个人都可以有自己的重构方法和策略

目前的自动重构工具往往只提供对

最常见的重构方法的支持

下面我们来讨论一下典型的自动化开发工具

TDD测试框架

TDD是来自于极限编程的一个实践

它要求先有测试代码再有功能代码

这种方式其实是回归了事情处理的正确顺序

为什么这么说呢?

我们来看看瓦匠砌墙的时候是怎么做的吧

他们一般都是先拉上一条水平线

然后每次砌砖的时候都参照这条线

从而很容易的就保证了每块砖都被水平放置

最终保证了整堵墙不会倾斜倒塌

而我们的程序员在编程的时候却采用相反的顺序

先写功能代码,就像先砌砖

然后再写测试代码

就像在砌完砖之后才拉水平线进行检查

最后对代码进行修改

就像对那些位置不正的砖进行调整一样

TDD的实际意义就在于

它可以让程序员逐步积累出数量可观的测试用例

这些测试用例就像一条一条的保险绳

密密麻麻的存在于系统的各个核心角落

忠实的监视着系统的一举一动,一旦有触发就马
上报警

同时,TDD还可以强化开发者按照需求优先的编
程意识

因为测试用例是根据需求来确定的

而不是根据已经实现的代码来编写的

TDD测试工具目前已经很成熟了

从原来的独立程序,到插件,再到目前集成到
IDE当中

已经成为开发者非常重要的开发助手

有关TDD的应用成功的例子很多

这些成功的例子当中都有着令人惊讶的测试用例
数量

这些测试用例虽然花费了开发者不少的时间和精

但对于复杂系统的自动化开发来说

绝对是不可或缺的工作

这些测试用例保证了系统的可靠性

让系统对需求变更的适应变得更加得心应手和轻 而易举

极大的提高了系统的市场潜力

TDD虽然很好,但是如果没有其他的技术配合

它的实际功效将会大打折扣

在团队合作中,如果你需要调用其他开发者

负责编写的组件,但是他只完成了接口,还没有
具体的实现

这时候你怎么才能编写自己的单元测试代码呢?

或者是你需要从一个特殊的硬件那里获取数据

但这个硬件只有在生产环境中才有

那你怎么才能编写自己的测试代码呢?

这里是用测试框架xUnit进行TDD开发的例子

我们要测试BusinessReporter类的Report方法

但这个类依赖于一个实现了IEmailService接口的

如果这个类没有写完,我们是无法进行测试的

那应该怎么办呢?

这时候就需要它的最佳搭档出手相助了

模拟对象技术就是利用对象的模拟版本来代替被
依赖的类

这些模拟对象被传递给要测试的类之后

依赖关系就被对象的模拟版本代替了

而被测试对象则仍然会以为自己所处理的是真实
的对象

这种冒名顶替的测试思想出现的比较早

但在模拟对象框架技术成熟之前

模拟对象都是手工编写的

这就限制了Mock技术的大范围的应用

现在,有了大量优秀的模拟对象框架

开发者只需要简单的几条语句

就可以完成之前无法完成的测试任务

这个例子结合了NMock框架和NUnit框架

非常轻松的完成了单元测试任务

它符合测试独立性原则

在这个例子中,我们要测试Hello类的Greet方法

Hello类的构造函数依赖于IPerson接口

在不需要实现这个接口的类的情况下

我们用NMock框架生成了一个IPerson模拟类

并告诉这个冒名顶替者,当有人问你姓名的时候

你就说我叫无名氏

于是在NUnit的断言中

Hello类并不知道它所依赖的是一个冒名顶替者

从而完成了测试

这里需要注意的是,在使用模拟对象之前

必须把所依赖单元的接口定义清楚

此外,如果被测试对象不适合采用Mock技术

可以采用一些设计模式先对这个对象进行重构

让它适合使用这种mock对象技术

模拟技术除了在配合TDD进行测试之外

还常常用于提供模拟数据

比如在网络应用开发中

前端开发往往和后端开发同步进行

前端通过ajax与后端进行数据交换

为了去除前后端之间的数据依赖,出现了很多自
动化工具

这些工具可以拦截ajax,并能提供接近真实的测
试数据给前端

比如在这个例子中

我们用mockjs框架来拦截特定url的ajax请求

返回姓名和年龄给前端

姓名可以是中国人或者外国人的名字

年龄在1到100岁之间

年龄在1到100岁之间

在使用xUnit测试框架和Mock模拟对象框架进行
测试的时候

一般不涉及到用户界面

如果用户想测试一个含有交互的界面,那怎么办
呢?

随着自动化技术的发展,之前无法完成的测试工

现在也可以由自动化工具来完成了

这个例子中我们使用了Selenium IDE

它是一个火狐浏览器的插件

可以用来记录和模拟用户的操作

并将这些操作转化为程序脚本

录制控制区控制录制状态

而命令记录区显示录制的命令

比如操作者的点击命令,输入命令等等

录制完成后,可以导出成各种各样的代码脚本

这些脚本可以嵌入到其他语言当中

结合xUnit框架和xMock框架

来完成大多数单元测试的自动化测试工作

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

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

第一章 软件工程基础

-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 微服务架构

-扩展阅读与话题讨论

--微服务扩展

--话题讨论

文档提交处

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

典型自动化工具视频笔记与讨论

也许你还感兴趣的课程:

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