结对编程之效能分析

作业要求:现代软件工程 作业 文本文件中英语单词的频率
项目git地址:ASE-Pair-Programing-Project
第一次用博客园,而此篇文章是在csdn上写的,没有写出博客园的风格,所以排版别扭的可以查看 作业三,结对编程之效能分析

作业简介

  • step0-输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位
  • step1:输出单个文件中的前 N 个最常出现的英语单词。
  • step2: 支持 stop words
  • step3: 我们想看看常用的短语是什么, 怎么办呢?
  • step4: 把动词形态都统一之后再计数。
  • step5: 统计动介短语出现的频率
  • 效能分析

guideline

我们收到assigment后,便约了时间,一起讨论了这次的guideline,一直按照这个guideline进行

如何合作

此次结对编程,我们前期独立实现每步的功能,每天晚上19:00-22:30进行讨论,一是确保自己程序的正确性;二是交换各自的idea; 三讨论接下来的工作,与自己的感受。 后期我们整合了一个程序,三个人对其进行测试与效能分析,测试的结果写到腾讯的共享文件里,bug解决后 可以在后面标注已解决,不用删。

编程语言

由于我们三人中,2个人擅长python,2个人了解c/c++,加之人生苦多,我用python,同时为了更快的开发。So我们的开发环境:

  • 系统: win10
  • 语言:python
  • IDE:pycharm2017

代码风格

我们的代码命名使用驼峰命名法

  • 普通变量名:一个或多个单字连结在一起,首字母以小写开头,每个单词首字母大写(第一个单词除外)。
    例如: (注释是为了更好地说明命名规则,实际注释风格并非如此)

    wordsCountsDict  #存放词频的字典,key为单词,value为频率
    
  • 全局变量:一个或多个单字连结在一起,开头为为g_,每个单词首字母大写(第一个字母除外)。
    例如:

    g_wordsCountsDict  #存放词频的字典的全局变量
    
  • 函数名/类名: 一个或多个单字连结在一起,每个单词首字母大写
    例如:

    def CountLetters():  #用来统计字母的频率的函数
    class WordCount(object): 
    
  • 注释风格

    • 函数的说明
      写明函数名称,功能输入,输出,作者,日期。
    ###################################################################################
    #Name:StopWordProcessing()
    #function:Remove the words from the "stopwords.txt"
    #input: dict2List : A list transformed by a dict whose keys are words and values are frequencies
    # ouput: listProcs : A list after removing stopwords
    #Author: Enoch
    #Date:2018.10.22
    ###################################################################################
    
    • 某行注释
      注释在某行行末
    wordsCounts = StopWordProcessing(wordsCounts)  # Remove the words from the "stopwords.txt"
    

单元测试、代码覆盖率与回归测试

对于单元测试、代码覆盖率与回归测试这些概念,可以参考邹老师的博客,在此简要说一下。
现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试
单元测试:写完某个模块后,假想一下各种情况,测试文件的正确性。
代码覆盖率:这其实在单元测试的时候已经做了,代码覆盖率都不是100%,那么此程序肯定不是只为此公共功能服务。
回归测试:便是高版本兼容低版本,不是之前实现了统计字母的频率,在实现了可以统计单词频率后,统计字母就出bug。
我们这三部分并不独立,我们把所有的测试合并成一个文件。如下所示

from CountLetters import CountLetters 
from CountPhrase import CountPhrases 
from CountPrephrase import CountVerbPre 
from CountWords import CountWords 
from CountDir import OperateInDir 
 
if(__name__=='__main__'): 
    #test letters #测试统计字母的频率
    CountLetters('test.txt',10,None,None)  #测试统计字母有没有正常工作,test文件是个20个字的短文。
    CountLetters('gone_with_the_wind.txt',-10, None, None) #测试输出前-10时,程序能正确处理
    CountLetters('gone_with_the_wind.txt',10,'stopwords.txt','verbs.txt') #测试程序是否正确处理stopword和verb.txt
    CountLetters('empty.txt', 10, None, None) #测试程序是否正确处理空文件
    CountLetters('blanks.txt', 10, None, None) # blank.txt里面全是字符
    #test words #测试统计单词的频率
    CountWords('test.txt', 10, None, None) 
    CountWords('gone_with_the_wind.txt',10,'stopwords.txt',None) 
    CountWords('gone_with_the_wind.txt',10,None,'verbs.txt') 
    CountWords('gone_with_the_wind.txt', 10, 'stopwords.txt','verbs.txt') 
    CountWords('empty.txt', 10, 'stopwords.txt','verbs.txt') 
    #test phrase #测试统计短语的频率
    CountPhrases('test.txt', 10, None, None, 2) 
    CountPhrases('gone_with_the_wind.txt',10,None,'verbs.txt',2) 
    CountPhrases('gone_with_the_wind.txt', 10, 'stopphrase.txt', 'verbs.txt', 2) 
    CountPhrases('blanks.txt', 10, 'stopphrase.txt', 'verbs.txt', 2) 
    # test dir # 测试遍历目录与子目录
    OperateInDir(CountWords, 'examples', 10, 'stopwords.txt', 'verbs.txt', True) 
    OperateInDir(CountPhrases, 'examples', 10, 'stopwords.txt', 'verbs.txt', None, 2) 
    # test verbpre #测试统计动介短语的频率
    CountVerbPre('empty.txt', 10, None, 'verbs.txt', 'prepositions.txt') 
    CountVerbPre('empty.txt', 10,'stopverbpre.txt', 'verbs.txt', 'prepositions.txt') 
    CountVerbPre('test.txt', 10, None, 'verbs.txt','prepositions.txt') 
    CountVerbPre('gone_with_the_wind.txt', 10, 'stopverbpre.txt', 'verbs.txt', 'prepositions.txt') 

如何搭建环境可以参考博客 性能分析与代码覆盖率测试 里面的例子也是引用本次作业的例子,应该通俗易懂吧,哈哈。

little bug

在单元测试的时候发现了一些little bug,放到共享文件里,之后进行了改正
腾讯共享文件之little bug
在这里插入图片描述

coverage的html的测试报告。

在这里插入图片描述

效能分析与提升

效能的定义可以点击 现代软件工程讲义 2 开发技术--效能分析了解,
针对此次任务我们的效能分析为 :本次作业的效能分析

My teammates

杨涛:极强的领悟能力与快速学习能力,热爱科研,对待各项任务都投入极大的热情,看待问题独到而全面,善于运用各种strange tips。就喜欢坑我,刚约了网课就拉我去讨论。
张贺: 超强的逻辑思维与敏锐的洞察力,善于总结与能把握进度,相见恨晚。
在这里插入图片描述

总结

此次编程,体会了人生苦短,我用python的感慨;首次对程序进行了单元测试,代码覆盖率与回归测试。用效能分析提升了程序的性能。这次的获益匪浅真不违心。

原文地址:https://www.cnblogs.com/enshengshi/p/9894665.html