结对编程(第7组)

回眸只為那壹抹淺笑 提交于 2020-01-08 12:52:44

1、Github项目地址:https://github.com/Ahusbj/PairProject2018

2、PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

180

 

· Estimate

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

   

Development

开发

120

180

· Analysis

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

10

10

· Design Spec

· 生成设计文档

   

· Design Review

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

20

20

· Coding Standard

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

   

· Design

· 具体设计

20

20

· Coding

· 具体编码

80

120

· Code Review

· 代码复审

   

· Test

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

20

20

Reporting

报告

   

· Test Report

· 测试报告

10

10

· Size Measurement

· 计算工作量

   

· Postmortem & Process Improvement Plan

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

50

60

 

合计

330

440


思路:3、解题思路描述

(1)对于统计字符和行数来说,首先通过遍历文档找中每一个字符(符合特定ASCII范围)和换行符的个数,从而进行统计。

(2)统计单词个数的时候,首先遇到字符的时候,考虑其是不是首个字母(直接与分隔符相连),如果是的话,则开始计算在遇到下一个分割符的时候,中间相隔几个字符(从而判断是否符合单词的长度定义)

(3)当确定单词之后,在将其存入到Hashmap中,从而获取单词的出现的频率。

4、设计实现过程

考虑到如下五个主要的核心功能:统计有效行数、统计字符数、统计单词数、统计文件中各单词的出现次数,最终只输出频率最高的10个、按照字典序输出到文件。

(1) Compoment design schema

软件构件的设计设计如下三个构建:

WordCountCore构件用于实现系统的核心功能:统计有效行数、统计字符数、统计单词数、统计频率最高的TopTen单词。

OutputModule输出部分作为一个单独的构件进行设计。

UnitTestModule考虑到单元测试,该模块作为一个单独的构件设计用于来充分对WordCountCore的四个核心功能进行针对性测试。

(2) Class design

WordCountCore构件可以以动态库dll的形式完成,其实现通过WordOperation类来进行实现。

四个核心功能在类中设计为public函数,方便其他模块的调用,并同时考虑到重用。

其他支持性功能在类中设计为private函数。

5、记录在改进程序性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017的性能分析工具自动生成),并展示你程序中消耗最大的函数。

6、代码说明,展示出项目关键代码,并解释思路与注释说明。

(1)通过逐行读取文档中字符的内容,以换行符为标记获取行数,此外,在读取每行的字符内容的过程中,进行字符的判断,判读其是否属于我们所设定的字符范围内,以便进行字符个数的统计。

(2)在字符统计的过程中,首先判断在每个单词中,首字母(该字符的前一个字符是分隔符)的位置,然后获取结束字符的位置(该字符的下一个字符是分割符),然后进行两次判断:

A、判断结束字符与首字符之间的间隔小于4个字符长度,则直接忽略(不是我们需要的单词),接下来执行下面的步骤B;

B、然后判断这个“单词”是不是以连续的四个英文字符开头,符合要求则是我们需要的单词,然后将其存储到hashmap中,否则,直接忽略,直接进行下一个的单词判断。

 

C、通过对hashmap中的单词进行sort排序,从而输出频率出现最多的m个单词信息。

7、结合在构建之法中学习到的相关内容与结对项目的实践经历,撰写解决项目的心路历程与收获。

通过此次的结对编程,深刻理解到了两人结对对工作效率的重要性,相对于单个人的编程,在面对于较大的工作量的时候,有时候便难以胜任,通过两人的合作,一个人编写,另一人监督指导,既可以减少在代码书写过程中的错误,也可以进行一些思想思路上的帮助(当遇到编程思路障碍的时候)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!