第三次作业结对编

结对项目完成WordCount

合作者:201731062111 201731062130(学号)

代码地址:

本次作业链接:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882

搭档博客:https://www.cnblogs.com/dreamhch/p/10659666.html

参考链接:https://www.cnblogs.com/bingaa/p/9637677.html

                 https://www.cnblogs.com/aehyok/p/3418447.html

1.结对项目PSP编写

我们的项目于4月2日正式开始,在开始编写代码之前,我们先就对项目需求进行了一次商定与讨论,大体分析了一下需要我们做什么。结合自身课程情况,约定了一起进行结对编程的时间和地点,并且共同完成了PSP表格的填写:

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30  25

· Estimate

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

30  25

Development

开发

1095  1360

· Analysis

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

60  60

· Design Spec

· 生成设计文档

40  60

· Design Review

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

30  60

· Coding Standard

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

30  30

· Design

· 具体设计

60  100

· Coding

· 具体编码

800  900

· Code Review

· 代码复审

45  100

· Test

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

30  50

Reporting

报告

110  125

· Test Report

· 测试报告

 60  80

· Size Measurement

· 计算工作量

20  20

· Postmortem & Process Improvement Plan

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

30  25
 

合计

1235  1510

2.描述结对过程及照片

我们的项目于4月2日正式开始,共同对题目进行了分析,分别阐述了对题目的看法,并进行了任务分工以及制定代码规范,并且共同完成PSP表格的填写。按照项目要求,分别实现功能。遇到不懂的,两人互相帮助,查阅资料。在各自实现基本功能之后,按照制定的代码规范进行对程序的修改,将程序整合在一起,完成此次结对项目。

3.解题思路描述

 阅读题目过程后,发现需要实现的功能主要有以下几个方面:

  • 读取文件。
  • 统计文件的字符数。
  • 统计文件的单词总数。
  • 统计文件的有效行数。
  • 统计文件中各单词的出现次数。
  • 输出格式:
  • characters: number
    words: number
    lines: number
    <word1>: number
    <word2>: number
    ...

4.设计实现过程       

       在阅读完题目之后,开始查找资料,看需要完成的功能该如何更好的实现。读取文件有不同的方式,选取一种方式;查找资料,学习使用正则式匹配单词,c#编写代码,在主程序中调用  <字符统计> <有效行数统计><单词统计> <统计文件中单词出现次数>将代码剥离开,按要实现的不同功能将代码分成各个模块。

 由于第一次尝试画流程图,有很多思路不知道怎么用流程图的方式表达,希望以后有所好转。

5.代码规范及链接(代码互审,审查的模块名,发现的问题)

5.1代码规范   

      1.类型(类、结构、委托、接口)、字段、属性、方法、事件的命名:

        优先考虑使用英文(尽量使用英文),如果实在没有合适的英文进行描述,可以使用拼音。

      2.不使用缩写:

   所有类型、字段、属性、方法、事件尽量不使用缩写。

      3.不使用单个字母的变量:

    不使用单个字母的变量, 像 i、m、n,使用temp等来替换,用于循环迭代的变量除外。

      4.用Tab作为缩进,并设置缩进大小为4。

     

      5.注释:

       类型、属性、事件、方法、方法参数,根据需要添加注释。

      6.一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。

      7.调用类型成员内部其他成员,需加this,调用父类成员需加base。

      8.在一个类中,各个方法需用一空行(最好是一个空行)。

5.2代码互审

各自按照共同制定的代码规范对自己的代码进行修改更正后,彼此交换,看看是否已经按照制定好的规范进行完善,双方对各功能模块进行测试,在确定无误后,进行代码的拼接。拼接时由于两个人的编码方式不同,导致拼接完成的程序无法正常运行,在共同修改之后,完成单元的拼接。

6.效能分析

7.代码说明

有效行数统计

class GetLine //读取行数
    {
        public static int GetRows(string Filename)
        {
            string path = Filename;
            int lines = 0;
            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.ReadLine() != null)
                {
                    lines++;
                }
            }
            return lines;
        }
    }

单元测试

namespace WordCount.Tests
{
    [TestClass()]
    public class GetLineGetLineTests
    {
        [TestMethod()]
        public void GetRowsTest()
        {
            Line Line = new Line();
            string filename = @"E:\input.txt";
            string filename2 = @"E:\input2.txt";
            string filename3 = @"E:\input3.txt";
            string filename4 = @"E:\input4.txt";
            string filename5 = @"E:\input5.txt";
            string filename6 = @"E:\input6.txt";
            string filename7 = @"E:\input7.txt";
            string filename8 = @"E:\input8.txt";
            string filename9 = @"E:\input9.txt";
            string filename10 = @"E:\input10.txt";
            Console.WriteLine(Line.GetRows(filename));
            Console.WriteLine(Line.GetRows(filename2));
            Console.WriteLine(Line.GetRows(filename3));
            Console.WriteLine(Line.GetRows(filename4));
            Console.WriteLine(Line.GetRows(filename5));
            Console.WriteLine(Line.GetRows(filename6));
            Console.WriteLine(Line.GetRows(filename7));
            Console.WriteLine(Line.GetRows(filename8));
            Console.WriteLine(Line.GetRows(filename9));
            Console.WriteLine(Line.GetRows(filename10));
        }
    }
}

 字符统计

 class Character
    {
        public int GetChar(string Filename)
        {
            FileStream path = new FileStream(Filename, FileMode.Open);
            long size = path.Length;
            byte[] array = new byte[size];
            path.Read(array, 0, array.Length);
            path.Close();
            int count = 0;
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] >= 32 && array[i] <= 126)
                    count++;
            }
            return count;
        }
    }

 单元测试

namespace Wordcount.Tests
{
    [TestClass()]
    public class CharacterCharacterTests
    {
        [TestMethod()]
        public void GetCharTest()
        {
            Character character = new Character();
            string filename = @"E:\input.txt";
            Console.WriteLine(character.GetChar(filename));
            
        }
    }
}

结果

8.结对感受与收获

通过这次结对编程,发现两个人合作的效果是优于一个人编程的,在合作的过程中,体会到了交流沟通的重要性,同伴之间要经常的互动交流,才不至于在编写程序时,两人的思想构造差距太大。此外,在共同完成项目的过程中,彼此之间互相学习,取长补短,两个人,就有不同的思路,而这些思路在将来或许是可以借鉴吸收的。并且两人合作,使得代码完成效率提高,两人互相监督,共同进步。

猜你喜欢

转载自www.cnblogs.com/Abbas/p/10646661.html