结对编程之效能分析_delphi中countletters在哪-程序员宅基地

技术标签: python  ASE  结对编程  

作业三 文本文件中英语单词的频率

作业要求:现代软件工程 作业 文本文件中英语单词的频率
项目git地址:Assigment3_of_ASE

作业简介

  • 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
在这里插入图片描述

本次的html的测试报告。

在这里插入图片描述

效能分析与提升

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

My teammates

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

总结

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36097393/article/details/83619661

智能推荐

PWN 栈溢出-程序员宅基地

文章浏览阅读937次。Beginning如果想用栈溢出来执行攻击指令,就要在溢出数据内包含攻击指令的内容或地址,并且要将程序控制权交给该指令。攻击指令可以是自定义的指令片段,也可以利用系统内已有的函数及指令0x01函数调用栈是指程序运行时内存一段连续的区域,用来保存函数运行时的状态信息,包括函数参数与局部变量等。称之为“栈”是因为发生函数调用时,调用函数(caller)的状态被保存在栈内,被调用函数(ca..._pwn 栈溢出

文件下载时文件后缀与contentType对应表_application/x-msdownload对应的文件类型-程序员宅基地

文章浏览阅读6.4k次,点赞2次,收藏9次。文件类型如下:".*"="application/octet-stream"".001"="application/x-001"".301"="application/x-301"".323"="text/h323"".906"="application/x-906"".907"="drawing/907"".a11"="application/x-a11""._application/x-msdownload对应的文件类型

系统更新及疑难处理-程序员宅基地

文章浏览阅读345次。系统更新及疑难处理利用WSUS部署更新程序微软公司的主要补丁类型nHotfix是针对某一个具体的系统漏洞或安全问题而发布的专门解决该漏洞或安全问题的小程序,通常称为修补程序n微软公司会及时地将软件产品中发现的重大问题以安全公告的形式公布于众,这些公告都有一个惟一的编号,即“MS”,如MS04-011n还有一种形式为KB(2003年4月份后用此编号)的编号,这个编..._允许来自internetmicrosoft更新服务位置的签名更新

【论文】ROS系统的无人小车自动跟随方案研究-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏45次。本文基于ROS操作系统介绍了一种运动与跟随系统的设计及实现,该跟随系统包括以激光雷达进行全方位角度的距离测量,使用Python语言编写脚本,通过编写激光雷达话题的订阅以及运动话题的发布,完成对目标的运动控制以及对被跟随目标的感知和产生跟随相应的动作。本系统中无论被跟随目标位于跟随机器人的任何方位,均能实现机器人的跟随,无需额外的基站、标签等定位设施,可以减少整个跟随系统成本。基于ROS系统使开发简单快速,适用范围广,具有良好的可移植性和通用性。_ros系统的无人小车自动跟随方案研究

几十款游戏的简单分析_游戏分析-程序员宅基地

文章浏览阅读1.3k次。笔者曾在多个游戏平台上玩过众多游戏,包括fc红白游戏机游戏、网页游戏、单机游戏、客户端游戏、手游等。在游戏过程中,笔者常常从多个角度对游戏进行分析,包括游戏的优缺点、改进方法、数值设计、音效、画面等方面。本篇文章简要但关键地记录了笔者在游戏体验和策略分析方面的一些心得体会。综合以上所述,一款成功的游戏需要满足一些基本要素。首先,它必须是新颖的、有趣的、易于上手的,同时游戏数值、画面、音效等方面也要在合理区间。_游戏分析

circular waveguide_wr137 circular waveguide datasheet-程序员宅基地

文章浏览阅读1.3k次。 Figure 1 Bessel function of first kindFigure 2 Derivative of Bessel function of first kindFigure 3 E field of TE11 modeFigure 4 H field of TE11 modeFigure 5 E field w.r.t. time_wr137 circular waveguide datasheet

随便推点

H3C模拟器配置vlan-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏7次。Valn 11组网需求• 交换机GE_2上的VLAN 5 和VLAN 10 为Primary VLAN,其上层端口GigabitEthernet1/0/1需要允许VLAN 5 和VLAN 10 的报文携带VLAN Tag 通过。• 交换机GE_2 的下行端口GigabitEthernet1/0/2 允许Secondary VLAN 2 通过,GigabitEthernet1/0/3 允许Sec..._新华3模拟器vlan配置

img撑满全屏的方法(img非背景图)_img 铺满-程序员宅基地

文章浏览阅读4.7w次,点赞8次,收藏15次。我有一个模板,想按常规做一个div里面放置一个img图片,并且让图片铺满容器,自适应容器大小。HTML结构代码如下(在这个盒模型上,我已经放置了一些不重要的样式)。div style="height:270px;width:400px;border:2px black solid;"> a href="http://www.paipk.com">img src="..." alt="拍_img 铺满

UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb0 in position 5: invalid start byte_ebpf bcc unicodedecodeerror: 'utf-8' codec can't d-程序员宅基地

文章浏览阅读947次。UnicodeDecodeError: 'gbk' codec can't decode byte 0xfa in position 4669: illegal multibyte sequenceUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 5: invalid start bytewith open('进线汇总20201211.csv',encoding='utf8') as f: t = f._ebpf bcc unicodedecodeerror: 'utf-8' codec can't decode byte 0xb0 in positio

使用条件序列GAN改进NMT_improving neural machine translation with conditio-程序员宅基地

文章浏览阅读1.3k次。使用条件序列GAN改进NMT原文《Improving Neural Machine Translation with Conditional Sequence Generative Adversarial Nets》课程作业,因为要导出pdf所以粘贴到CSDN了,34章是笔者翻译的部分。当一篇post吧,求别喷,有问题请留言我一定改,一定改。摘要本文提出了一种将GANs应用于NMT领域的方..._improving neural machine translation with conditional sequence generative ad

产品周报第33期|完善铁粉规则,优化原创保护策略,升级创作中心的数据展示,开放业界专家自定义域名权益……_创作者中心铁粉数0-程序员宅基地

文章浏览阅读5k次。目录一、博客产品功能完善1、完善铁粉说明规则2、创作中心专栏数据升级3、发文助手新增「添加模版」指引4、免费开放业界专家自定义域名权益5、其他优化二、问答产品体验优化1、回答链接和链接详情页调整2、PC端提问页优化3、创作中心页面的问答列表优化三、首页热榜及优质内容推进方面的改进四、吐槽提建议直通车,直达CSDN各产品与运营人员查看往期改进hello,大家好,这里是「CSDN产品周报」第33期。本次更新主要涉及博客、问答及首页,欢迎大家详细了解和使_创作者中心铁粉数0

自建网盘之 NextCloud 终极记录-程序员宅基地

文章浏览阅读1.7k次。自建过许多网盘,试过 可道云、Seafile、FileRun、Nextcloud,但Nextcloud的如下特性吸引了我:完整、好用的客户端,包括 windows、mac、android、ios ...强大的插件扩展,如 Talk, Contacts, notes, Maps ...完整的第三方扩展,支持 Amazie S3, OneDrive, ..._可道云 nextcloud seafile