第三次作业

 

Github项目地址

 https://github.com/umoonn/WordCount.git

结对伙伴的作业地址

 https://www.cnblogs.com/junandlin/p/10630746.html

我的博客地址

 https://www.cnblogs.com/IUidol/

作业链接

 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882

一.结对过程

描述结对的过程,提供非摆拍的两人在讨论的结对照片(一起工作编码时的照片)。

 

这是我和我的室友詹林非一起结对编程,讨论分工各自编写一部分的函数功能,然后一起制定了此次项目的代码规范。

 

二.PSP表格

PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30分钟      25分钟

· Estimate

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

 1590分钟     1295分钟

Development

开发

 1260分钟     1170分钟

· Analysis

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

 40分钟      60分钟

· Design Spec

· 生成设计文档

 30分钟      35分钟

· Design Review

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

 30分钟      20分钟

· Coding Standard

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

 20分钟      20分钟

· Design

· 具体设计

 60分钟      55分钟

· Coding

· 具体编码

1200分钟      900分钟

· Code Review

· 代码复审

 120分钟      30分钟

· Test

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

 60分钟      50分钟

Reporting

  报告

 150分钟      125分钟

· Test Report

· 测试报告

 60分钟      55分钟

· Size Measurement

· 计算工作量

 60分钟     40分钟

· Postmortem & Process Improvement Plan

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

 30分钟     30分钟
 

合计

 1800分钟     1230分钟

一个功能完备的程序不是一蹴而就的。通过将词频统计的需求划分为4个部分,可将一个大任务划分为可操作的小任务,同时最好按照任务难度或紧急程度指定各个任务的完成次序。因此,在动手开发之前,要先估计将在程序各模块开发所需耗费的时间,以及完成整个项目所需的时间,将这个[估计值]记录下来,写成PSP 的形式。
PSP的目的是:记录工程师如何实现需求的效率,和我们使用项目管理工具(例如微软的Project Professional,或者禅道等)进行项目进度规划类似。

 

三.解题思路描述

 最开始看题目很长,会有点晕,所以我们决定按照步骤进行编码。仔细读题后,我们最开始决定先分别在一个类里面写出四个功能,最后再在主函数中调用输出写入TXT文件中。最后在进行封装的时候我们又重新思考,决定用dll文件,于是就把四个部分的函数方法拆分成四个组件,最后在主函数中引用四个组件进行创建对象然后调用方法,最重要的是体会封装的过程,并且熟悉和提高对重要函数方法的代码进行封装的思想。培养这种思想。

 

 

四.设计实现过程

设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?

我们设计了四个函数countchar(),countword(),countlines(),frequency(),它们分别独立,写成了四个组件,在主函数中可以进行独立调用。我和同伴分别负责了两个部分,最后她把组件发给我,进行代码合并得到最终的功能函数。

 

单元测试

断点测试:

五.代码规范

5.1代码规范:

目的:此次结对编程项目是和其他同学合作,分工合作编写功能代码以及测试代码等,为了方便后续方便操作以及代码互审等,一起商量并约定了编写代码的一些规范。这里只一起制定了最常涉及到的部分的代码规范,更多涉及详细的代码规范约定参考并遵守下面的链接

https://wenku.baidu.com/view/e35e7c6626284b73f242336c1eb91a37f11132c3.html

1.命名规范:

①类型(类、结构)、字段、属性、方法命名:

优先使用对应的英文单词命名属性方法等,如果没有合适的英文,可以使用拼音命名,不要用缩写命名。注意约定方法等第一个英文字母大写。如:

public void countword(){}

②变量的命名:

优先使用对应的英文单词命名变量,变量命名都用英文小写字母。

避免使用长名字,不能超过15个字母。

 char word;

③除for()循环以外,不能使用一个字母来命名表示变量。

2.注释规范:

①要给写的函数方法进行注释,注释其所实现的功能。

  public int countlines(string word)//统计行数

②要注释不易懂的变量,解释变量所表示的含义,

int linesnum = 0;//行数

③注释不宜过长,能简单表达意思就行。

3.编码规范:

①先定义所有变量或全部实例化后,再进行编码。

②代码每一行不能过长。

③if()和else()语句后无论是一句代码或者没有,也一定要跟花括号,如:

else{}

5.2代码互审

在互相完成自己所做的功能后,互审了对方的代码。对发现的问题及解决方案如下:

 

问题:在给方法命名的时候没有优先使用英文单词表示,提出后进行了修改,提高了代码的可读性。还有在输出的时候并没有按照规定的格式输出,然后给同伴提出,进行了修改。 

解决方法:用相应的易懂的英文单词替代了方法名,又对输出格式进行了修改,严格按照输出格式进行编写代码。严格要求自己。并在以后的编码过程中,应该严格按照代码规范进行编写,提高易读性,健壮性等。

 

六.改进记录

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

 

最终修改好后提交:

 

七.代码说明

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

此次我和同伴一起分工,进行写函数功能,我负责的是从文件读入以及最后输出到文件,还有对字符个数进行统计和总共行数进行统计。

其他单词统计以及单词频率功能见同伴博客。此部分我负责的关键代码如下:

1.从TXT文件读入数据:

 string word = File.ReadAllText(@"C:\Users\hdkj\Desktop\test.txt").ToLower();//将输入的英文字符全部转换为小写字符

2.统计字符个数:

          public void countChar(string word)//统计字符个数
          {
              int num = 0;
              char[] word1 = word.ToCharArray();//将接收的英文存入字符数组方便统计个数
              for (int i = 0; i < word1.Length; i++)
              {
                  if (word[i] >= 0 && word[i] <= 127)
                  {
                      num++;
                  }
              }
return num;
}

3.统计行数以及写入txt文件:

 p    ublic void Countlines()//统计行数
         {
             string[] line = File.ReadAllLines(@"C:\Users\hdkj\Desktop\test.txt");
             int lines = line.Length;
             string result1 = @"F:\WordCount\201731062204\wordcount\wordcount\result.txt";
             FileStream fs = new FileStream(result1, FileMode.Append);
             StreamWriter wr = null;
             wr = new StreamWriter(fs);
             wr.WriteLine("lines:" + lines);
             wr.Close();
             fs.Close();
         }

最终运行截图:

我这次主要负责字符个数的统计以及行数的统计,在设计这两部分的时候,也有过几个疑问。首先在统计字符的时候,一直疑惑数字,标点符号算不算字符,进行统计,我也进行查询了资料,以及询问同学,最后解决了这个问题。在统计行数的时候,我发现遇到一个问题,就是只有我读入换行符的时候行数才会计数一次,可是在我的测试的TXT文件里面并没有写换行符号,最后统计出来0行,最后我咨询同学以及网上查找,最后决定用File.ReadAllLines()的方法直接按照行数读取,在进行统计,最后解决了问题。

.心路历程及收获

感悟:在此次的结对编程过程中,真实地体会到了1+1>2的感觉。两个人合作的确比一个人合作有趣并且轻松的很多,一起分工合作,一起进步,一起讨论在合作中出现的问题,对两个人的提升都有很大的帮助。在这次编程过程中,我发现自己的代码量真的很缺乏还不够,应该多练习练习才行,并且对一些功能步骤很不熟悉,不能很好的运用。这次结对编程让我更加熟悉并理解了对函数代码进行封装以及性能测试等功能。而且经过上次的练习,已经能够很轻松的掌握GitHub的push功能等,也决定自己下来多了解熟悉GitHub的使用方法等,能够精通熟练地使用GitHub进行学习。

posted @ 2019-03-31 11:55  香蕉泡芙奶  阅读(341)  评论(0编辑  收藏  举报