软工实践(四)——热词统计

课程:软工实践(链接)

作业:结对第二次—文献摘要热词统计及进阶需求 (链接)
Github基础需求项目地址(链接)
Github进阶需求项目地址(链接)
结对学号:221600219 221600212
作业目标:
一、基本需求:实现一个能够对文本文件中的单词的词频进行统计的控制台程序。
二、进阶需求:在基本需求实现的基础上,编码实现顶会热词统计器。

一、Github签入记录

基础需求

1472757-20190315181304372-543120753.png

进阶需求

1472757-20190315181335280-1525048216.png

自动测试

1507771-20190316112351543-2138520371.png

爬虫数据分析

1507771-20190316183459787-848746924.png

二、基础需求

项目结构

├── PairProject1-Java  
│   └── 221600219&221600212  
│       └── src  
│           ├── Main.java  
│           └── Lib.java  

类图

1507771-20190316113935927-1487586895.png

核心代码

1507771-20190316114054923-144510514.png

三、进阶需求

项目结构

├── PairProject2-Java  
│   └── 221600219&221600212  
│       └── cvpr
│           ├── Main.java  
│           └── result.txt  
│       └── src  
│           ├── Main.java  
│           └── Lib.java  

类图

1507771-20190316113313637-1494939792.png

核心代码

1507771-20190316114237791-148204994.png

使用Junit 进行了单元测试:

1507771-20190316113604927-658605041.png

1507771-20190315212726457-623981704.png

单元测试的覆盖率:

1507771-20190315212848161-206159777.png

使用Jprofiler进行性能测试

本次性能测试的数据都是爬虫爬取到的result.txt数据,一共502篇论文

1507771-20190316130213383-732693934.png

优化前各项的耗时情况

1507771-20190316130908567-1358239475.png

1472757-20190315183721376-2106184186.png

分析:

我们发现早期的性能瓶颈是因为对文件进行了多次读取,并在每次读取都进行了排序,所以导致Lib.sortWordMap时间占用长。
1507771-20190316131327686-1479088603.png
1507771-20190316131401204-294991252.png

对于这样的耗时情况,是不能接受的:

我们推翻的之前的方法,通过商讨,摒弃的之前较慢的字符串处理,而是采用了更快的二进制字节处理,同时原本的多次读取文件也改为了一次读取,多次使用。
main调用只读取一次文件:
1507771-20190316133800445-214416108.png
收集单词使用二进制判断:
1507771-20190316133832224-351448822.png

优化后各项的耗时情况

从原本的87s左右降低到了仅有3s,大幅度的提升了程序的运行速度:
1472757-20190315184757170-365847990.png

爬虫

爬虫部分使用java编写,结合了Jsoup,先匹配CVPR网站上的ptitle类,然后查找类中的标签,获取论文链接。
1507771-20190316131612756-1639620094.png
1507771-20190316131919297-1427045538.png

python编写的自动测试工具

为了方便对基础代码进行自动测试,我使用了python的subprocess库进行对Java代码的自动编译和执行,用unitest来对Java程序的运行结果进行测试,用HTML_Runner_Chart库来对测试结果进行呈现。

代码已经开源至Github仓库:https://github.com/numb-men/wordCountAutoTest

代码目录和核心代码

1507771-20190316132758680-1333426419.png

使用Python自动测试结果(动图加载可能较慢)

1507771-20190316134802457-1499626210.gif

四、附加题

我们使用Python的pyecharts、subprocess库,对Java的爬虫代码和WordCount进行了调用,对词组词数分别为1-5的情况进行了图表数据呈现。
github仓库地址:https://github.com/numb-men/cvpr2018DataAnalysis

当词组单词数为1时,发现最经常出现的词是learning,是啊,这是个learning的时代,一方面是机器学习、深度学习的火热,一方面是在这个时代IT不保持学习就会落后..

1507771-20190316181627545-931060143.png

当词组数为2时,neural networks(神经网络)、convolutional neural(卷积神经)都出现在了热词里...

1507771-20190316181712464-1943694366.png
1507771-20190316181742996-1023375282.png

词组数为3时,前二都是卷积神经网络

1507771-20190316181949095-59073176.png

我们对词组为2时进行了词云图分析

1507771-20190316183342759-482215426.png

五、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3010
  Estimate  估计这个任务需要多少时间3010
Development开发14002290
 Analysis 需求分析 (包括学习新技术)100100
 Design Spec 生成设计文档6030
 Design Review 设计复审3050
 Coding Standard 代码规范 (为目前的开发制定合适的规范)2020
 Design 具体设计180250
 Coding 具体编码8001000
 Code Review 代码复审110110
 Test 测试(自我测试,修改代码,提交修改)100150
Reporting报告120110
  Test Repor  测试报告3030
  Size Measurement 计算工作量3030
 Postmortem &
 Process Improvement Plan
 事后总结, 并提出过程改进计划6050
All合计15502410

六、遇到的困难与解决

  • 使用字符串来进行单词的频率计算,效率低下。后面使用二进制字节来进行了所有的检测流程,效率提高了,但是编码的难度也提高了,好在付出了更多的时间之后还是解决了这个问题。
  • 由于平时没有使用IDE,编写代码后都使用命令行运行,导致对IDEA并不熟悉,花了很多时间来进行程序的性能分析和单元测试覆盖率分析。

七、总结

  • 这次作业,小组遇到了不少的困难,但也收获了不少新的技能。这次在对需求的分析上,我们遇到了很多的障碍,其实很多需求在作业中已经给明了清晰的定义,只是我们在阅读需求文档的经验不足,导致不能够很敏锐的挖掘出这些潜在的信息。在这次作业里,我觉得我和我的队友都得到了很好的一次锻炼,也充分意识到了,在对需求没有一个清晰的理解下就动手编码,只会让作业的完成事半功倍。在以后的工作岗位上,我们一定会遇到更多的更苛刻的需求,所以很开心可以在这次作业中锻炼自己的这方面的阅读能力。
  • 除了掌握基本的算法知识之外,掌握一些额外的技能也是很重要的,如使用python来进行数据的分析和处理,然后图表化呈现、使用Jprofiler进行Java的性能分析,这些技能能更好的辅助我们进行代码的编写。

八、对队友的评价

221600212 :

感觉这次能和长平同学结对是一次很愉快的合作。在整个作业的分析,设计,开发,调试过程中,长平一直很认真的在对待,一起沟通问题解决问题。他较为丰富的开发经验以及对Bug的一丝不苟,保障了作业的高质量完成同时也少走许多歪路。真的是一位很可靠的搭档!

221600219:

和剑威结队的过程中,也是一个互相学习的过程,我们在电脑前一起讨论,一起找bug,有时候我也惊叹他的想法的独到之处,他常常指出我没想到的地方,而且非常认真负责的完成了分工,虽然他在编程上还有待提高,但他是一位能让人感到合作愉快的队友。希望之后和他的配合会越来越默契。

转载于:https://www.cnblogs.com/hengyumo/p/10539519.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值