1.  预计时间

  ● 对问题总体的理解、规划:10 min

  ● 设计编写程序:5 h

  ● 调试: 分模块-40 min; 总体-40min

  ● 测试(性能分析)、改进:1 h

2.  实际用时

  ● 对问题总体的理解、规划:10 min

    总的理解了一下题意,打算用C#写。程序数据结构不复杂,没有打算用OOP。

  ● 设计编写程序:

    i) 模式判断:读参数,确定是哪种模式(普通、e2、e3)。

      这部分比较简单。10min左右完成。

    ii) 读出所有子文件:采用递归的方法。

      这部分查了一下C#文件方面的类和接口的用法。40min左右完成。

    iii) 分词:把文件的单词划分出来。

      这部分比较坎坷。在做simple mode的时候,学习了一下正则表达式的书写,完成大约用了1h 10min。先做了Simple mode的统计词频,然后再做extend mode的时候,原本是以为只需要选择不同的正则表达式即可,然而C#的正则的Matches方法是非重叠匹配,在做2词、3词连续时匹配就不适用了。后来重写了2词、3词连续时分词的方法,但是逻辑有点繁琐复杂,限于时间凑合用了。算上查正则的时间,可能用了2.5h吧。

    ix) 词频统计:统计某个词(词组)出现的频率。

      这部分用的方法也有点蠢,因为在统计时不敏感大小写,但是输出时要考虑原有的ACII值排序,所以比较麻烦,用的方式是先对分词的结果(一个ArrayList)进行自带的Sort排序。这样得到的结果是字典序,大写在后。然后再遍历ArrayList,记录前一个单词,对比当前的单词。因为相同的单词都是相邻的,所以可以进行比较、处理。最后得到一个Dictionary记录单词与出现频率。

    x) 排序输出:(统计出现频率最高的词组)按ASCII值排序并输出到文件。

      这部分也是意想不到的挑战。之前以为按值排序应该蛮简单的,但是加上ASCII值的要求又麻烦了一些。还去学写了IComparer,不过后来发现用StringComparer.Ordinal就可以了。虽然花了意外的时间,但是也有很大的收获。

  ● 调试:

    我的习惯是写完一个模块就会做一些基本的测试。所以调试的时间比较零碎了。估计总计在2h左右。

  ● 测试(性能分析)、改进:

    这里最大的坑是我的性能分析工具。因为电脑上空间不太足,又已经有安装VS2010,去查了一下2010也有性能分析的功能,就打算就用2010了。谁知最后一天做分析时,自己的2010不知道为何一分析就崩溃。下载2013后结果空间不足不能安装,又用分区工具捣鼓了下。但是安装时间太长,眼看着就要到deadline……于是接了同学的电脑,他的VS2010能用分析,让我妥妥地泪奔了。但是时间实在太短,没来及做很多改进了,主要是分析。这个装工具的时间就不知道该怎么算了……工作了估计不到2h。

3.  性能分析

  这是我作死的大坑……

  来看“大数据”的处理吧:包含2.27G的文件夹,主要是找的一些程序安装的文件夹什么的。

  

  CPU的使用率不理想啊……然后导出到excel函数独占率:

  

  看来WordFren,也就是词频统计占了大头,ReadWord,也就是分词也不少。后面分析两词、三词的结果也是类似,就先不放上来了。

  不过呢我也没想到优化这里的比较好的方面(主要没时间了)。

  后面有机会再补充吧。

4.  测试用例

  1)空文件夹

    输出为空,没问题。

  2)嵌套文件夹

    这也是最基本的了,没问题。

  3)【单】词模式

    测试了输出格式,“3个英文字符打头”等要求,出现频率,及按ASCII排序输出。

  4)【双】词模式

    类似,并测试了“仅一个空格间隔”的要求。

  5)【三】词模式

    类似。

  6) 迷惑的单词模式

    输入含File、file的文件,测试输出时能够按ASCII值选择名字。

  7) 迷惑的双词、三词模式

    输入类似file File File file FILE的文字,测试是否正确统计重复输出。

  8) 丰富的后缀

    测试了除txt外的格式文件。

  9) 压力测试-1

    测试了大约1M的文件。

  10)压力测试-2

    测试了大约2.27G的文件。(性能分析中的分析组)

5.  感想

  现在也在忐忑,到底程序还有没有bug。0 point 还是有点吓人的。一个很大的教训是过于放心自己,开始的太晚了。以致最后工具出现问题,导致对性能的改进没有时间了。

  从这个项目也收获了很多,一是更熟悉了C#,二是学习了正则表达式,三是学到了性能分析这个功能。

  当然!最后的程序自己还是很不满意的,因为不算漂亮,这也是限于时间的原因,查C#类和接口的资料也占了很多时间。

  总之,希望下一次自己能做得更好。

Record for Individual Project ( Word frequency program )的更多相关文章

  1. Individual Project - Word frequency program by HJB

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;us ...

  2. Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering

    11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...

  3. Individual Project - Word frequency program - Multi Thread And Optimization

    作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...

  4. Individual Project - Word frequency program——12061154Joy

    Description&Requirement: http://www.cnblogs.com/jiel/p/3978727.html 项目时间估计 理解项目要求: 1h 构建项目逻辑: 1h ...

  5. SoftwareEngineering Individual Project - Word frequency program

    说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...

  6. Individual Project - Word frequency program

    1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...

  7. THE First Individual Project - Word frequency program

    第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...

  8. Individual Project - Word frequency program-11061171-MaoYu

    BUAA Advanced Software Engineering Project:  Individual Project - Word frequency program Ryan Mao (毛 ...

  9. Project: Individual Project - Word frequency program----11061192zmx

    Description & Requirements http://www.cnblogs.com/jiel/p/3311400.html 项目时间估计 理解项目要求: 1小时 构建项目逻辑: ...

随机推荐

  1. C#生成真值表

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. Alpha冲刺! Day1 - 磨刀

    Alpha冲刺! Day1 - 磨刀 序章 Alpha冲刺开始的比印象中的计划早,翻回去看系统设计那篇作业博客的实践时间安排表格发现不!见!了!! 因为计划提前,但又必须在编码开始之前把所有逻辑讨论清 ...

  3. Python 操作 Excel,总有一个模块适合自己

    最近在写性能相关的测试脚本,脚本已经完成,最终怎么体现在报告上,要想让报告看起来漂亮些,我们是先创建一个模板(格式和公式已全部制作好),只需要性能测试完成后往对应的sheet页中填充数据,数据完成后最 ...

  4. ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序;ASP.NET WebForm和MVC总体请求流程图

    ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序 1.BeginRequest  開始处理请求 2.AuthenticateRequest 授权验证请求 ...

  5. clearRect清除html5画布

    html5 canvas 清除可以使用clearRect() 方法 clearRect() 方法的作用是清空给定矩形内的指定像素.JavaScript 语法:context.clearRect(x,y ...

  6. PHP批量抓取远程网页图片并存到本地实现方法和源码

    做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢.有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不 ...

  7. 如何使用openscad绘制一个简单的键帽.

    1 新建空项目 2测数据 测量得出数据.这个长方体的长宽高分别是1.6.4.6.8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备) 3画图 写代码 导入模型 为了方便以后 ...

  8. 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

    首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...

  9. 拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了

    作者:周平章链接:https://www.zhihu.com/question/52008623/answer/187927508来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  10. AI 线性代数

    1.标量.向量.矩阵和张量 1)标量(scalar),一个数,例如自然数和实数. 2)向量(vector),一列有序数.可以看作只有一列的矩阵. 3)矩阵(matrix),二维数组.转置(transp ...