一.预计工程设计时间

  明确要求: 15min;

查阅资料: 1h;

学习C++基础知识与特性: 4-5h;

主函数编写及输入输出部分: 0.5h;

文件的遍历: 1h;

编写两种模式的词频统计函数: 1.5h;

单词排序部分: 0.5h;

程序调试与测试: 1-2h;

程序优化:2h;

预计总共时间:12-13h;

二.实际工程完成时间

明确要求: 15min;

查阅资料: 1.5h;

学习C++基础知识与特性: 7h;

主函数编写及输入输出部分: 0.5h;

文件的遍历: 0.5h;

编写两种模式的词频统计函数: 1h;

单词排序部分: 1h;

程序调试与测试: 2h;

程序优化:3h;

实际总共完成时间:17h

三.程序优化

由于是第一次使用vs2012,因此对它的操作还没有很熟悉。刚开始分析程序采样时,总是显示数据无法采样,后来上网查询原因后,的只是由于自己的测试用例太小了,因此找同学借了一个大小为10M左右的英文小说文件夹来测试。

文件夹截图如下所示:

性能分析报告:无任何警告或错误

总体上来说,程序的时间效率还是有些低,希望这次作业后能和老师和同学们讨论关于这道题时间复杂度最低的算法,互相促进,共同进步。

   

通过以上两张图,我们可以发现main函数的主要耗时是花费在WordCounter函数上了,占到了99.8%,而WordCounter函数中的绝大多数时间则是花费在了operator>>上,即大量的字符操作处理上。因此下一步的优化重点可以放在简化字符操作处理上面,现在暂时还没有想到更好的方法。

这次排序中用到的是<algorithm.h>下的sort函数,只要定义好了其中的比较规则cmp函数,就可以按照自己的意愿排序wordmap中的单词。存储单词及其个数时用到的是map关联容器,这种C++特有的数据结构大大的简化了插入操作,更新操作的实现,也使后续的排序工作方便了许多。

文件的遍历输入采用的方法是使用system函数输入命令行,这样就可以递归地得到某目录下的所有需要的文件。该命令行为

dir filepath*.txt filepath*.cs filepath*.cpp filepath*.h /b /s

其中filepath指代的是命令行中输入的目录。(切记一定要以\\结尾)

文件的输出则是使用的pair变量迭代器挨个取map中的元素进行打印。

四.测试用例

1.空文件夹进行边界测试

2.大容量文件夹,进行压力测试

3.多层文件夹嵌套测试

4.文件中存在特殊字符测试

5.简单模式下对形如File,file等字符串的个数统计与大小比较

6.复杂模式下所要求的比较,例如windows7,windows8,windows

7.空文件进行边界测试

8.支持读文件类型后缀名测试

9.字典序测试

10.不合法单词是否被统计测试

五.感悟与收获

这次词频统计程序作业是我第一次接触C++编程,还好有过C和Java的程序设计经验,因此学习的时候只是看了一下C++特有的数据结构和语法,然后就可以开始编程了。

这次作业带给我的最大感悟就是不要把计划想得太理想。因为在现实实现的过程中,你可能会遇到各种意想不到的突发情况,因此你在事先计划的时候,一定要留出一定的余量并且做好良好的心理准备。这次作业时写代码其实并不是最耗费时间的一项工作,最耗费时间的反而是完成代码后的debug和代码优化。我想这也正是软件工程课的目的,它并不是一门普通的程序设计课或算法课,他要教给我们的是编写软件所要经过的所有必备流程以及必备方法。只有了解了这些流程和方法,才能将我们编写的普通小程序升级为软件。

还有一点,就是要常常吸取别人好的想法。比如编写这次作业时,文件的遍历处理过程当然可以使用深度优先搜索或广度优先搜索来完成,但是,如果你使用一行命令行代码的话,你会发现这将大大减小你的编码难度以及减少你程序的运行时间。这种好想法可能你永远也不会想到,因此多多倾听别人的想法,必然是有着大大的益处。

软件工程第一次个人项目——词频统计by11061153柴泽华的更多相关文章

  1. 个人项目-词频统计(语言:C++)

    词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...

  2. 作业3-个人项目<词频统计>

    上了一天的课,现在终于可以静下来更新我的博客了.       越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”.                词频统计 单词: 包含有4个或4个以上的字 ...

  3. 个人项目----词频统计WEB(部分功能)

    需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...

  4. 结对项目— 词频统计2(语言C++)

    结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...

  5. 结对项目— 词频统计(语言C++)

    结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...

  6. task4:结对项目-词频统计

    结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...

  7. HW—词频统计

    第一次个人作业——词频统计 第一次做这种大作业,明显感觉陌生,各种规范和技能也是第一次使用,希望自己好运. 目录:一.基本要求 二.需求分析及时间估计 三.实现思路及过程 四.测试用例.时间性能分析及 ...

  8. USTC《现代软件工程》春季学期——第一次个人作业:词频统计

    截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...

  9. C# 词频统计 东北师范大学 软件项目管理 第一次作业

    一.作为杨老师的学生第一次听杨老师讲课,印象最深的就是:工程中所有步骤之间是乘法,如果任何一步为0,工程就做不出来了.以前所有老师讲到的都是不要太在乎结果,努力的过程很重要,但是这在软件工程中不合适了 ...

随机推荐

  1. twitter bootstrap 2.x 3.x区别

    栅格系统 (Grid system)说个我认为比较重要的,相对于RC 1中的3层,现在有4层了 We now have .col-xs (phones), .col-sm (tablets), .co ...

  2. Drawable(5)关于从资源文件构造的Drawable不显示

    要给它设置个bounds才可以 TextView noticeHeaderView; TextView headerRefreshText; ProgressBar headerRefreshPgrs ...

  3. 【设计模式】—— 单例模式Singleton

    前言:[模式总览]——————————by xingoo 模式意图 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有公开的调用方法. 模式结构 ...

  4. NuGet在2015中的使用

    NuGet Package Restore  https://docs.nuget.org/Consume/Package-Restore 以https://github.com/andburn/hd ...

  5. awk当中使用外部变量

    1.awk命令使用双引号的情况下 此时在awk命令里面使用\"$var\"就可以引用外部环境变量的var的值 $ var="BASH";echo "u ...

  6. linux 压缩/解压命令大全

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...

  7. 基于XMPP的即时通信系统的建立(四)— 组件介绍

    服务端 服务器 许可证 操作系统 是否支持任意客户端登录 备注 ejabberd 开源 Elang 是 支持虚拟主机和集群 Openfire Apache Java 是 Tigase GPLv3 Ja ...

  8. Discuz 7.2 /faq.php SQL注入漏洞

    测试方法: 提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!   Discuz 7.2 /faq.php SQL注入漏洞   http://www.xxx.com/faq.php?a ...

  9. 8 种 NoSQL 数据库系统对比

    导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只 ...

  10. NSIS 2.0界面快速入门

    NSIS 2.0 版本支持定制的用户界面.所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统.MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS ...