一。
结对项目地址: https://github.com/xuyixiaowoaini/WordCount.git
结对伙伴作业地址:https://www.cnblogs.com/TakeRabbit/p/10637605.html
- 描述结对的过程,提供非摆拍的两人在讨论的结对照片(一起工作编码时的照片)。
我与我的结对同学先把项目需要完成的功能划分为几个模块,再一起填写psp表格进行分工,我们各自完成分配的任务,中途遇到问题再一起查资料解决,最后我们将两部分互相审查好的代码合并起来。
PSP表格。
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
5min |
5min |
· Estimate |
· 估计这个任务需要多少时间 |
5 |
5 |
Development |
开发 |
720 |
810 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
120 |
· Design Spec |
· 生成设计文档 |
10 |
10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
10 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
10 |
· Design |
· 具体设计 |
30 |
60 |
· Coding |
· 具体编码 |
360 |
360 |
· Code Review |
· 代码复审 |
60 |
60 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
180 |
180 |
Reporting |
报告 |
130 |
190 |
· Test Report |
· 测试报告 |
60 |
120 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
60 |
60 |
|
合计 |
855 |
1005
|
计算模块的 设计
拿到题后,我和小伙伴先对项目作出来分析,
这个项目有五个基本功能点:计算Input文件的字符数、单词总数、有效行数、单词出现次数并排序,以及输出到Result文件。
这些功能总体由三个类来完成:
(1)WordIO(实现输入文件以及输出文件的功能)
(2)WordTrie(实现计算单词出现次数并排序的功能)
(3)WordCalculate(实现计算字符数、单词总数、有效行数的功能)
大致结构如图:
代码复审过程。
1、代码规范
参考https://wenku.baidu.com/view/b5be911b6bd97f192279e9bd.html。
2、代码互审情况、发现的问题
我们完成这个项目时基本是在一起讨论编程的,因此最后没有发现什么大的问题,只是合并时改了不同的参数,以及对代码规范的问题进行了一些修改。
性能分析
代码详情:
见队友链接: https://www.cnblogs.com/TakeRabbit/p/10637605.html
单元测试:
共实现了四个测试内容:1.单词以英文字母开头
2.单词以分隔符分割
3.统计有效行数
4.字母后可跟数字
代码详情:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using WORDCOUNT;
namespace TestWORDCOUNT
{
[TestClass]
public class UnitTest1
{
[TestMethod()]
public void MainTest01()
{
string test;
Program.Result trueres = new Program.Result();
string reason;
test = "123abcd";
trueres.charactersnumber = 7;
trueres.wordsnumber = 0;
trueres.linesnumber = 1;
reason = "测试用例1";
UnitTest(test, trueres, reason);
}
[TestMethod()]
public void MainTest02()
{
string test;
Program.Result trueres = new Program.Result();
string reason;
test = "abcd abcd@abcd";
trueres.charactersnumber = 14;
trueres.wordsnumber = 3;
trueres.linesnumber = 1;
reason = "测试用例2";
UnitTest(test, trueres, reason);
}
[TestMethod()]
public void MainTest03()
{
string test;
Program.Result trueres = new Program.Result();
string reason;
test = "abcd\n\nabcd";
trueres.charactersnumber = 8;
trueres.wordsnumber = 2;
trueres.linesnumber = 2;
reason = "测试用例3";
UnitTest(test, trueres, reason);
}
[TestMethod()]
public void MainTest04()
{
string test;
Program.Result trueres = new Program.Result();
string reason;
test = "abcd123";
trueres.charactersnumber = 7;
trueres.wordsnumber = 1;
trueres.linesnumber = 1;
reason = "测试用例4";
UnitTest(test, trueres, reason);
}
public void UnitTest(string test, Program.Result trueres, string reason)
{
FileStream fs = null;
StreamWriter sw = null;
bool result = false;
string pathinput = "F:\\Demo.txt";
Program.Result testres = new Program.Result();
result = false;
fs = new FileStream(pathinput, FileMode.Create);
sw = new StreamWriter(fs);
sw.WriteLine(test);
sw.Close();
fs.Close();
testres = Program.Maintest();
result =
(testres.charactersnumber == trueres.charactersnumber) &&
(testres.wordsnumber == trueres.wordsnumber) &&
(testres.linesnumber == trueres.linesnumber);
Assert.AreEqual(true, result, reason);
}
}
}
心得体会:
1由于编程不熟悉,以及在实际的开发过程中遇到种种问题的阻挠,使得完成这个项目实际花费的时间远远大于预估计划的时间,并且一些功能也没有完善的很好,我感受到以后的学习还有很长的路需要去努力。
结对感受:第一次结对完成作业,在与小伙伴的交流和共同努力过程中,让我体会到了协作的重要性,并且在互审过程中彼此更容易发现错误,及时交流与该正,在这次的实际操作过程中,也让我对结对编程的认识更进了一步。