当前课程知识点:软件工程 >  第2章 编写高质量代码 >  2.4 代码静态检查 >  讲课视频

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

讲课视频在线视频

下一节:讲课视频

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

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

代码审查是指通过阅读代码

来检查源代码和编程规范

是否符合

以及代码本身质量的一种活动

它被公认为是一个提高

代码质量的有效手段

这种活动比较容易发现

架构和时序相关的

较难发现的一些问题

同时还可以帮助团队成员

统一编程风格

提高编程技能等

代码审查主要是检查

代码编写的规范性

代码设计的合理性

以及处理代码中的一些地雷区

也就是一些最常出错

但测试不容易发现的地方

这里我们给大家列出了

一部分示例的问题

在实际的开发中

需要大家根据项目的要求

和实践经验

进行进一步的归纳总结

编程规范是最基本的检查项

主要是检查源代码

是否符合具体编程语言的

规范要求

另外还要检查设计抽象

是否合理

是否考虑了未来扩展性的要求

关于性能方面

主要是检查代码实现中

是否存在性能问题

比如说 数据结构的选择

线程和缓存的使用

以及并发访问策略等

这里并不考虑架构和

功能方面的性能问题

内存也是影响效率和可靠性的

主要因素

重点是要检查内存的申请

和释放是否正确

是否存在内存泄露的问题

另外还要检查程序处理逻辑

是否正确

尤其是循环的结束条件

以及循环处理是否存在

影响性能的问题

线程处理是否存在安全

和死锁的问题

数据库的处理是否正确

尤其是事务的完整性和隔离性

方面的问题

还有通讯的编程实现

机制是否合理

在具体的编程语言中

对象的创建和删除是否正确

异常处理

也是一个重要的检查项

主要是检查异常处理

是否考虑了所有可能的错误

并且处理正确

方法或者函数的检查

重点在于接口参数

变量初始化等

代码的安全主要是涉及

参数合法性检查

信息加密和通讯安全等问题

其他方面还有一些关于日志

配置等方面的问题

在代码审查过程中

我们可以借助工具

来帮助自动地执行

静态代码分析

以便快速定位代码中隐藏的

错误和缺陷

减少人工逐行检查上

花费的时间

提高代码审查的效率

Pylint

是一个Python代码的

静态分析工具

下面我们简单介绍一下

如何使用这个工具

进行代码检查

Pylint的功能主要包括三个方面

第一是对代码风格进行检查

主要是检查代码是否符合

PEP8规范

第二是检查代码中

是否存在一些常见的错误

比如说是否所有变量

在访问之前

都已经定义等等

大家可以从下面的这个链接

看到一个完整的检查列表

第三 是检查代码

是否存在重复代码

以便为重构提供帮助

Pylint的安装很简单

可以通过Python的包管理工具

pip进行安装

另外只要在命令行中输入

Pylint加选项

加要检查的模块包

或者文件的名称

就可以使用Pylint进行检查

Pylint常用的选项有以下几项

rcfile用来指定检查时

所用的配置文件

默认是当前目录下的

Pylintrc文件

ignore用来指定不进行检查的

文件列表

disable用来关闭

某种类型的检查

f指定报告的类型

默认情况下是文本类型

我们可以通过-f来输出

html格式的报告

Pylint还有一些其他命令

比如help参数

是用以查看某种类型问题的

帮助信息

这里给出的例子

是一个查看关于

无效命名的说明

generate是根据当前配置

生成配置文件

默认情况下

使用当前目录下的Pylintrc文件

作为配置

有关Pylint命令及其使用的

详细说明

可以查阅官方文档

下面我们通过一个简单的例子

来说明Pylint的使用

这一段程序的功能

是凯撒密码的加密解密

我们在命令行中

输入Pylint命令

对这一段程序进行静态分析

Pylint的输出结果分为两部分

一个是源代码的分析部分

另一个是一系列详细报告

下面我们先来看一下源代码

分析部分

第一行是说没有找到配置文件

这里使用默认配置

下面是检查到的问题列表

它是按照错误类型 出现位置

说明信息这样的格式列出的

主要的错误类型包括

约定 是指违反了编码标准

重构 是写的很糟糕的代码

警告 是某些Python特定的问题

错误 是指代码中可能有的错误

下面就是一系列的报告

第一行是总计分析了

多少行语句

在这个例子中是20行语句

第一个表格列出了所查文件的

模块 类 方法和函数的数量

这个表列出了实际代码

文档字符串 注释 空行等

分别有多少行

以及所占的百分比

在这个给出的例子中

代码是22行 占95.65%

没有docstring

一般的注释有一行

这个程序的注释比较少

这里显示的是前一次的结果

可以用来做对比

这个表是显示是否有重复的

代码行

那么这个程序

是没有重复代码的

这个表是对前面的源代码

分析信息进行汇总

分别按照不同的错误类型

列出各是多少

这个表是根据问题的标识

进行汇总

最后Pylint会给出一个评分

10分是满分

还会把这一次的得分

和前面的结果做比较

因为我们这里的程序

是第一次运行

所以得分的变化是零

现在我们对之前介绍的

生命游戏程序进行静态分析

下面看一下分析结果

第一类问题就是行过长

PEP8规定代码长度

一般不超过79个字符

最长可以宽限到100

Pylint会检查

是否有代码行的宽度

超过了100

我们可以看到

项目中有两行代码超过了100

过长的代码会造成阅读的困难

降低可读性

第二类问题是缺少docstring

一般情况下

模块和公共方法 函数

都要添加docstring

第三类问题是不合法的命名

默认的配置中

变量名至少需要三个字符

所以这里的d和nc

都不符合规则

bad-builtin是说使用了

不好的内置函数

例如map和filter

这是因为Pylint认为

使用Python的列表推导

更符合Python的习惯

列表推导通常具有较好的

可读性

并且会有少量的性能提升

bare-except是指在使用try

except捕捉异常时

没有指定异常类型

通常我们都应该明确异常类型

并进行处理

下面我们对代码检查的错误

进行修改

行过长的问题

可以通过换行使行变短

例如这样的修改

缺少docstring的问题

应该是补充有意义的说明

这里暂时关闭这项检查

但是在实际开发中

不建议这样做

无效命名的问题

要具体分析原因

我们这里是把命名规则

进行重新设定

关于bare-except问题

生命游戏这个程序

没有必要在except中

做异常处理

相应的处理

已经在主函数中实现

所以可以关闭这项检查

在某些情况下

可能需要关闭某个文件中的

某些警告信息

这种情况往往不是配置文件中

那种全局配置的情况

那么我们可以通过上面的方式

来实现

并且在文件头加上注释

现在生命游戏的评分

达到了10分

各种不同的编程语言

都有自己的静态分析工具

这里列出的是Java语言的

还有C++

JavaScript

HTML等

建议大家结合具体的编程

学习使用

代码审查已经被广泛地公认为

是一种非常好的工程实践

在Google公司

任何产品

任何项目的程序代码

都要在经过有效的

代码审查之后

才能提交到代码库中

也正是因为这种很彻底

很普遍的应用

让Google的程序变得非常优秀

如果你在编程的时候

知道会有同事检查你的代码

那么你的编程态度

就会完全不一样

你写出的代码将会更加的整洁

有更好的注释和更好的结构

希望同学们在编程实践中

学会应用这种做法

不断地提升编写

高质量代码的能力

软件工程课程列表:

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

-第一部分:基础知识

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

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

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