第三次作业-结对编程(wordcount)

GIT地址 https://github.com/gentlemanzq/WordCount.git
GIT用户名  gentlemanzq
结对伙伴博客地址
博客地址  https://www.cnblogs.com/gentlemanzq/
作业链接 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882

这一次结对编程,怎么说呢。带来了一次不一样的编程体验,很难说清楚。具体后面再说,先看作业


  • 一.结对过程

照片如下:(一直很疑惑为什么后台更改的照片,前端不会更改,百度了也没有解决办法。将就看吧)


  • 二.PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30  20

· Estimate

· 估计这个任务需要多少时间

 30  20

Development

开发

 670  740

· Analysis

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

 180  180

· Design Spec

· 生成设计文档

 20  10

· Design Review

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

 20  20

· Coding Standard

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

 30  30

· Design

· 具体设计

 60  60

· Coding

· 具体编码

180  200

· Code Review

· 代码复审

 60  80

· Test

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

 120  160

Reporting

报告

 85  105

· Test Report

· 测试报告

 45  60

· Size Measurement

· 计算工作量

 20  15

· Postmortem & Process Improvement Plan

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

 20  30
 

合计

 785  865


  • 三.解题思路

  1.首先拿到题目仔细阅读,理清题意。大致需要完成的功能都是关于字符操作和计数排序的操作。根据这几点需求,我们决定使用泛型Dictionary来完成这一系列操作。

  2.关于如何解题,是根据作业要求来的,首先需要将文件读入成一个字符串,然后对其进行操作,如果是统计字符数量和行数,需要借助Regex函数通过正则表达式 ‘’.‘’来统计除换行符之外的字符,最后加上换行符。(此处要注意换行符是两个字符)

  3.判断是否是单词的时候,先使用for循环将大小写统一转换为小写,重新定义一个新的Dictionary,然后使用笨办法if语句进行判断单词长度是否超过4个并且前四个是否是英文,如果满足条件则重新赋给新的dictionary。

  4.输出频率最高的10个词,如果频率最高则按字典序输出这个地方。将新的dictionary先用frequencies函数进行统计判断,然后将结果首先按照value值进行排序,然后再按照key值进行排序

  5.对每一个功能项进行封装,方便后面增加功能。

  6.考虑到以上涉及的知识,所以我们在编码前,首先参考了字典的用法,如何进行单词判断,如何按照key值和value值进行排序(参考这两篇博客【1】【2】)。其次是关于regex,正则表达式的使用(参考这篇博客【3】)。

  【1】:https://www.cnblogs.com/wt-vip/p/5997094.html

  【2】:https://blog.csdn.net/ybhjx/article/details/69668442

  【3】:https://blog.csdn.net/u012102536/article/details/85160138


  • 四.代码设计

  1.首先对于每一个功能大致设置一个类,初步设计六个类,将除了program类其余放入function文件夹中,具体关系后面说明(PS:增加功能之后再添加)

  2.类与类之间的调用关系具体为:program类中调用path,linescount,asccount类。在asccount类中会调用linescount参与部分计算。wordcount调用ynword进行判断

  3.启动主函数在program类里面,如果要计算有多少个字符就调用ascount里面的agelife方法,如果要统计有多少行,就调用linescount中的lines方法。同理其余都是一样。

  4.基础功能的难点在于判断是否是单词,并且需要按照次数,字典序排序,在wordcount函数中先进行是否单词判断,此处调用ynword。具体设计见流程图

  5.单元测试设计,主要测试function文件夹中的功能函数,类图如下 (PS:单元测试代码后见代码说明)


  • 五.代码规范

  1.   不要冗余无用代码,过于冗余的代码可以清理一下,一些已经注释掉的代码可以删除

  2、不变的值,尽量写个常量类。

  3、尽量使用if{}else,不要一直if去判断。

  4、减少循环调用方法;减少IO流的消耗资源。

  5.   当一行代码太长时,将其截断成两行写。

  6.   常用缩进和换行,使代码层次清晰,明了。

  7.   注释的量不应该少于代码量的三分之一。ps(变量统一使用例如/// <param name="s">文件读入路径</param>的注释方式)

  8.   定义变量名字和方法名字的时候尽量使用英文缩写,或者拼音缩写,便于识别。

  9.   对泛型进行循环时,都采用foreach而不使用for。

  11. 对于功能函数写入一个function文件夹中,便于以后功能升级。

  12. 一屏原则:一个方法体的代码幅应该在一屏比较和合理;逻辑复杂的代码可以抽离出方法体;

猜你喜欢

转载自www.cnblogs.com/gentlemanzq/p/10647267.html