• 个人作业总结


     
     

    个人作业总结

    沈三景 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和优化。收获了许多。

  • 相关阅读:
    StringBuffer
    Mysql语法大全
    String类
    装箱拆箱
    修饰符
    杨辉三角
    基本变量类型
    随手快递app开发第五天
    随手快递app开发第四天
    随手快递app开发第三天
  • 原文地址:https://www.cnblogs.com/sanjing/p/8677281.html
Copyright © 2020-2023  润新知