个人作业总结

 

 
 

个人作业总结

沈三景 PB15061249 个人作业


 

实验要求

  1. 对源文件(.txt,.cpp,.h,.cs,.html,.js,.java,.py,*.php等,文件夹内的所有文件)统计字符数、单词数、行数、词频,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
  2. 使用性能测试工具进行分析,找到性能的瓶颈并改进。
  3. 对代码进行质量分析,消除所有警告。
  4. 设计10个测试样例用于测试,确保程序正常运行(例如:空文件,只包含一个词的文件,只有一行的文件,典型文件等等)。
  5. 使用Github进行代码管理。
  6. 撰写博客 。

 

前期准备

 

需求分析

  1. 该实验要求跨平台(Linux和Windows),所以代码要求有可移植性。
  2. 需要对整个文件夹的内容遍历、统计、计数,所以要选择合适的数据结构,加快运行速度。本实验最佳的数据结构为unordered_map(我用了map)。
  3. 需要用VS分析热行,提高代码执行效率。

 

代码规范

  1. 用有意义的变量名,如在统计字符数时定义的函数变量名为count_character,读入所有文件的函数名为GetAllFiles
  2. 在复杂的嵌套中要加上注释end if/for/while
  3. ‘{’和‘}’单独占一行
  4. 缩进为一个tab键
  5. 头文件均用#include

 

PSP表格

PSP2.1

任务内容

计划完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

30

30

 Estimate

估计这个任务需要多少时间,并规划大致工作步骤

30

30

Development

开发

700

795

Analysis

需求分析 (包括学习新技术)

30

15

Design Spec

生成设计文档

30

5

Design Review

设计复审 (和同事审核设计文档)

30

5

Coding Standard

代码规范 (为目前的开发制定合适的规范)

30

20

Design

具体设计

40

40

Coding

具体编码

400

600

Code Review

代码复审

40

10

est

测试(自我测试,修改代码,提交修改)

40

100

Reporting

报告

240

120

Test Report

测试报告

60

80

Size Measurement

计算工作量

30

10

Postmortem & Process

Improvement Plan

事后总结 ,并提出过程改进计划

150

30

Summary

合计

970

        945

 

设计思路

  • 将文件的路径名保存在一个vector中
  • 读取vector。中的每个路径对应的文件,用getline,同时统计行数,将结果存储在map >键为文件名,值为一个vector,里面按行存储了文件的内容。
  • 统计字符数,ASCII码在32到126之间,即对m->second[i][j]进行遍历,若在32到126之间则加一。
  • 统计单词数,单词的定义是以四个英文单词开头的字母数字符号,单词以分隔符分割,不区分大小写。即先找到两个相邻的分隔符,在判断加在中间的是否满足单词的定义。
  • 统计单词频率,构造一个队列,里面存当前出现频率最高的单词,以及单词数。
  • 统计词组频率,构造一个队列,里面存当前出现频率最高的词组,以及词组数。
  • -

 

代码实现

未命名文件.png-54.3kB


 

性能分析

  1. 字符串的链接str1 = str1 + str2占用太多时间,后来在同学的提醒下,在结合上网查的一些资料后,将代码改为str1 += str2
  2. 调用热键发现sameword花费太多时间,细看sameword发现大多数时间花在大小写转换上,现在任然不清楚有什么方法能够改善大小写转换所需时间,我用的函数为transform

 

测试样例

测试了十个样例,发现都是正确的(但是和老师给的测试集在字符数、行数、单词数上都有差距,至今不清楚原因),测试的样例包括了空文件,只包含一个词的文件,只有一行的文件,典型文件等等。


 

跨平台移植

这边参考了刘泽同学的博客(他的博客上有错误,现在应该已经改正了。)


 

总结

这次实验坑巨多,时间非常紧张,最后差点心态爆炸,但是与此同时也收获了许多新的知识,特别是代码调试和代码优化方面的技巧,学会了如何使用热键(虽然代码优化的很渣),学会了如何用github进行代码管理。最重要的一点是熟悉了整个软件开发的流程,从需求分析到编程,再到debug和优化。收获了许多。

posted @ 2018-03-30 16:58  ToumaKazusa3  阅读(350)  评论(1编辑  收藏  举报