第四次结对编程做业

项目地址 仓库地址
结队伙伴 陈宇红
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 40
Estimate 估计这个任务须要多少时间 480 600
Development 开发 40 45
Analysis 需求分析(包括学习新技术) 20 15
Design Spec 生成设计文档 60 60
Design Review 设计复审(和同事审核设计文档) 20 30
Coding Standerd 代码规范(为目前的开发制定合适的规范) 20 15
Design 具体设计 80 100
Coding 具体编码 240 300
Code Review 代码复审 120 120
Test 测试(自我测试,修改代码,提交修改) 240 200
Reporting 报告 30 30
Test Report 测试报告 60 60
Size Measurement 计算工做量 30 30
Postmortem & Process Improvement Plan 过后总结, 并提出过程改进计划 60 50
合计 1040 1095

解题思路

思路描述
1.细分题目,划分红一个个小任务以下图所示

2.由于c++尚未学到文件操做,因此我就先看了教材,大体学了下文件基本操做,再在网上查了文件操做的教程。
3.这次代码涉及到了排序,我就翻了数据结构关于排序方面的知识,以及如何写代码。html

设计过程

1.规划出大体方法
ios

2.概括整理函数,类及之间的关系
咱们通过协商大体把每个功能都设计成一个函数,这样比较整洁且比较有概括性,在调试过程也比较容易找到错处。而后是划分类,咱们把最基础的统计字符方面划分为一个类,再把关于单词的划分为一个类,最后把行数统计划分为一个类。函数与类之间最重要的是类中包含函数,由于咱们在设计的时候把每个须要实现的功能都设计成了一个函数,因此在类里面能够很容易想到把函数划分进去。c++

代码规范

因为这是我俩第一次用c++完成一个项目,因此咱们参考了网上的c++代码规范知否,知否git

代码复审

审查模块名
coutword_1github

1.主要问题数据结构

1.发现同伴在设计过程出现了一个功能上的遗漏,在限制单词条件时,遗漏了“以数字开头"不是单词这一条件函数

2.第二个问题是我在统计单词数所用的循环结构中,因为逻辑表达不当形成了死循环。
修改前:性能

void word_count2::read_str()
{
    char ch;//收集每个文件中字符
    string str_1;//记录每个规定的字符
    long pos;//记录f_in的位置
    int fir = 0;//判断第一个字符是否为字母
    f_in.clear();
    f_in.seekg(0, ios::beg);

    while (!f_in.eof())
    {
                int read=0;
        f_in.get(ch);
        
                
    
                read++;
                int k;
                f_in.seekg(pos);
                //f_in.get(ch);
                
                for ( k = 1; k < 4; k++)
                    {
                        read++;
                        f_in.get(ch);
                        if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break;
                    }
                if (k == 4)
                {
                    f_in.get(ch);
                    while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9'))
                    {
                        f_in.get(ch);
                        read++;
                    }
                    pos = f_in.tellg();
                    f_in.seekg(pos - read);
                    getline(f_in, str_1, ch);
                    store_str(str_1);
                    f_in.seekg(pos);

                }
        

            }
        
    }
}

修改后:单元测试

void word_count2::read_str()
{
    char ch;//收集每个文件中字符
    string str_1;//记录每个规定的字符
    long pos;//记录f_in的位置
    int fir = 0;//判断第一个字符是否为字母
    f_in.clear();
    f_in.seekg(0, ios::beg);

    while (!f_in.eof())
    {
        f_in.get(ch);
        fir++;
        if (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch))
        {
            
            int read=1;//记录规定字符创的长度。
                        //-------------------------------------------------->增长代码
            if (fir == 1)
            {
                pos = f_in.tellg();
                
            }
            else
            {

                pos = f_in.tellg();
                f_in.seekg(pos-1);//获得上一个字符
                f_in.get(ch);
            }
            
            if (('0' <= ch && ch <= '9') || ch== '" ')
            {
                f_in.seekg(pos);
                f_in.get(ch);
                while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch) || ('0' <= ch && ch <= '9'))
                {
                    f_in.get(ch);
                }
            }//-------------------------------------------------------------------------------------------------------------------
            else
            {
                read++;
                int k;
                f_in.seekg(pos);
                //f_in.get(ch);
                
                for ( k = 1; k < 4; k++)
                    {
                        read++;
                        f_in.get(ch);
                        if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break;
                    }
                if (k == 4)
                {
                    f_in.get(ch);
                    while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9'))
                    {
                        f_in.get(ch);
                        read++;
                    }
                    pos = f_in.tellg();
                    f_in.seekg(pos - read);
                    getline(f_in, str_1, ch);
                    store_str(str_1);
                    f_in.seekg(pos);

                }
        }

            }
        
    }
}

2.复审感悟学习

在写代码时,对于重要部分咱们必定要注释,否则会对代码复审形成很大的影响。甚至要从新想代码的思路.

性能改进

性能改进时间花费
大体是120分钟
改进思路
1.主要改进是将散乱函数封装成类

性能分析图

单元测试

.单元测试图

结队照片

异常处理

1.在进行单元测试时出现不少问题,以致于咱们单元测试这卡了好久。

第一个问题:附加依赖项添加错误:根据以前博客须要咱们添加obj文件,可是咱们进行单元测试时已经添加的头文件里面已经包含了obj文件里的全部内容,形成了单元测试时报错多个函数重复定义。


后来咱们把附加依赖项删除后就解决了这个问题。
第二个问题:是文件的相对路径上:文件明明已经存在但就是打不开,测试一直不经过。

后来发现咱们代码里用的是相对路径,可是要打开的文件与咱们运行的程序不在同一个文件夹里面,因此报错了。

相关文章
相关标签/搜索