软工第一次个人作业 需求分析、模块规划与时间规划

目标功能

  1. 统计文件的字符数
  2. 统计文件的单词总数
  3. 统计文件的总行数
  4. 统计文件中各单词的出现次数
  5. 对给定文件夹及其递归子文件夹下的所有文件进行统计
  6. 统计两个单词(词组)在一起的频率,输出频率最高的前10个。

需求分解

  1.  能从命令行中获取参数。
  2. 对给定文件夹及其递归文件夹里的文件进行读取,并有一定的容错能力。疑问:递归是强制功能还是可选功能?)
  3. 能够判断单词的定义。
  4. 能够快速存取单词出现次数与词组次数。
  5. 对字符流中的字符按照不同规则进行统计。疑问:不同规则的统计是否要拆解成不同功能?)
  6. 对字符流中的单词进行统计。
  7. 对统计的出现次数进行排序,筛选出最高的10个。
  8. 对结果进行输出。

模块分解

  1. 文件的读取模块。具体需求:遍历给定文件夹,依次读取每个文件。
  2. 简单的字符和行数的统计功能,作为一个模块。具体需求:统计字符流的字符与行数。
  3. 将单词的判断条件封装为一个独立的类。具体需求:对于给定的字符,可以判断是否为单词、为哪个单词。
  4. 单词的统计功能。具体需求:统计字符流中的单词数、词组数。
  5. 表单功能。具体需求:提供查表功能,尽量快速地查找与修改每个单词的统计数目。另外提供查找最大值的功能。思路:使用stl,哈希表或字典树。查找最大值可以通过维护一个最大值表(较慢)、直接搜索(较慢)或者采用特定的数据结构(是否与前述矛盾?)疑问:3.4.5.模块是否划分过于细致?
  6. 输出模块。具体需求:从给定数据给出输出。
  7. 主模块。具体需求:从命令行读取数据,调用各模块完成工作。

疑问

各个字符、单词的统计是一次性、一起统计,还是多次访问文件、分别统计?若是前者,恐怕耦合严重。若是后者,读文件可能效率不高。假如用buff暂时存储字符串从而多次统计过于浪费资源,而且可能出现溢出,还会将字符流划分成多段,可能带来问题。为了方便编码,先使用后者多次读文件完成,后期进行效率优化。

进度规划

由于其他任务,今天才开始进行这个作业。因此之后必须加紧时间。

上述模块分解只是一个初步分解,仍然有很多不妥之处。个人打算先分别完成各个模块的初步功能,再根据问题进行调整。因此,进度规划只能大概规划,无法太细致。

进度计划:

模块1. 和7. 的命令行读取:较为简单,首先尽快解决,尽量增强健壮性。

模块6. :今天之内完成。完成这些之后,大体框架就能够运行了。

模块2. :今天之内完成。

模块3. :尽量今天之内完成。至少周一之内完成。

模块4. 5. :周一完成初步

模块5. :周一、周二更改方案,选择最合适的方案。

性能测试:周三进行。

语言:c++

平台:visual studio

单元测试:

vs有自带的单元测试模块,但是过于庞大,所以我打算自己写简单的单元测试类。

原文地址:https://www.cnblogs.com/jennawu/p/8645291.html