分析一套源代码的代码规范和风格并讨论如何改进优化代码

1. 结合工程实践选题相关的一套源代码,根据其编程语言或项目特点,分析其在源代码目录结构、文件名/类名/函数名/变量名等命名、接口定义规范和单元测试组织形式等方面的做法和特点;

    工程实践为爬取用户评论在对这些数据进行分析,因此选取了一套爬取用户微博信息的代码进行分析,下图是该程序的结构:

 

    

search_spider - 根据关键字和时间进行爬取的模块 

----hour_fenge.py 时间分隔函数:对要搜索的时间期限进行以每小时为单位的划分,返回包含所有时间单位的列表

----search_start.py 根据关键字和时间条件进行爬取的主要函数:其中包括爬取某页全部微博、微博所有页数的计算、保存数据库等功能

tools - 工具模块 

----Config.cfg 数据库等配置文件

----Cookie_Process.py cookie处理函数:其中包括获取文件中存储的cookie、更新文件中存储的cookie等功能

----Date_Process.py 时间处理函数:其中包括对爬取到微博的不同时间格式进行统一

----Emoji_Process.py 表情处理函数:清除掉包含的utf8bm4编码格式的表情 ----Mysql_Process.py mysql数据库工具类:其中包括数据库连接、关闭、增删改查的操作等

----Number_Process.py 转发、评论数处理函数:对爬取到的微博的转发、评论数进行统一

user_spider - 爬取根据关键字搜索到的微博对应的微博用户的基本资料模块 

----cookie.file 存储可用的cookie信息

----user_start.py 爬取用户资料的主要功能函数:包括获取所爬取微博的所有用户ID,并根据每个ID爬取其基本信息

weibo_spider - 根据某个用户ID爬取其所有微博的模块 

-----cookie.file 存储可用的cookie信息

-----weibo_start.py 爬取用户全部微博的主要功能函数:其中包括爬取某页全部微博、微博所有页数的计算、保存数据库等功能

comment_spider - 爬取根据关键字搜索到的微博对应的微博下的全部评论

----cookie.file 存储可用的cookie信息

----comment_start.py 爬取微博评论的主要功能函数:包括获取所爬取微博的所有微博ID,并根据每个ID爬取其全部评论信息

 

从图中的代码结构,我们可以发现:

  1. 目录结构:将各个模块分隔开放在不同的文件夹下,此程序实现了4个功能,每个功能对应了一个文件夹,而另外一个文件夹下存放的是公用的工具类以及相应的配置文件,体现了高内聚低耦合的特点。
  2. 命名:各个文件名均由有意义的英文单词组成,而多个英文单词之间由“_”分隔开。对于各个模块的文件名,英文字母均以小写字母开头;而对于tools文件夹下的文件名,英文字母均大写字母开头,依次表示与其他模块文件的差异。
  3. 单元测试模块:在此项目中并没有发现单元测试模块,但在正常开发中,单元测试是必不可少的,下图是使用Java开发的博客项目,可以看到main文件夹下是正常模块文件,而resources下存放的是相应的配置文件。Test是模块测试代码,相应的resources下存放了对应的配置文件。

 

2. 列举哪些做法符合代码规范和风格一般要求;

 

 

  • 注释

 

 

 

 

  • 命名

     使用有意义的,英文单词或词组,不使用汉语拼音

    package/module 名中不要出现 –

 

  • 空格+缩进
    * list, dict, tuple, set, 参数列表的 , 后面加一个空格
    *  dict 的 : 后面加一个空格
    * 操作符两端加一个空格,如 +, -, *, /, |, &, =
    * 接上一条,在参数列表里的 = 两端不需要空格
    * 括号((), {}, [])内的两端不需要空格
  • 空行
    * function 和 class 顶上两个空行
    * class 的 method 之间一个空行
    * 函数内逻辑无关的段落之间空一行,不要过度使用空行
    * 不把多个语句写在一行
    * if/for/while 语句中,即使执行语句只有一句,也要另起一行

3. 列举哪些做法有悖于“代码的简洁、清晰、无歧义”的基本原则,及如何进一步优化改进;

    语句过长,没有使用换行,虽然是sql语句不是真正操作的代码,但是阅读起来也很不方便,可以使用“\”控制换行。

 

 

    注释过于简单,虽然说明了每个函数的功能,但是对于输入参数以及输出情况没有说明,对于多人协作开发可能会存在影响。

    配置和代码放在一起,在这种比较小的项目中虽然不会造成什么影响。但对于模块较大以及配置较多的项目中,可能会造成混乱,可以将所有配置文件都存放在一个文件夹中。

4.总结同类编程语言或项目在代码规范和风格的一般要求。

  •  命名

          函数、变量及属性都用小写单词拼写,只见用_连接,不遵循驼峰命名法

          类与异常应该首字母大写,不要用_连接

          变量要尽可能有意义

  • 空白

          和语法相关的每一层缩进都用4个空格表示,不能混用Tab和空格

          如果一行的字符超过80个时,应进行换行。

          赋值时等号两边都要有一个空格

          在使用函数进行函数式编程时,函数之间要空两行

          在类中的函数,函数之间应该空一行

          函数与类是同一个级别,则他们之间应该空两行

  • 语句

          判断变量是否为None、False或True时,要用is,例如,if a is None

          import语句应放在句首,导入时最好指定具体功能。

          检测容器不为空时,应使用if 容器名,例如,lists = [] if lists

  • 注释

          Python中的注释分为单行注释,多行注释。

          对某些重要的代码块的功能说明,应使用单行注释

          对整个模块功能的说明应使用多行注释



posted @ 2019-10-12 15:36  zhuang35  阅读(211)  评论(0编辑  收藏  举报