软工第四次作业

结对编程

github项目地址
伙伴作业链接

一:结对过程

结对编码过程:我与结对编码的同伴,首先是各自分别阅读项目条件,之后开始讨论各自对于这次作业的理解。随后我们把自己要做的工作细致的分工,最重要的一点是缺点二人代码的连接方式,以便尽可能少的对代码进行不必要的修改,最后把写好的代码互相交换来审阅达到找出错误的目的。最后紧行代码的汇总调试,得到想要的结果。

二:PSP表

- ———————————————————————————————
- |预估(分钟)\实际分钟|
- 计划:10\15
- 预估项目耗时:190 \ 275
- 开发: 30 \ 90
- 需求分析:12 \ 15
- 生成设计文档:18 \ 20
- 设计复审:5  \ 5
- 代码规范:5  \ 5
- 具体设计:5  \ 15
- 具体编码:30 \ 35
- 代码复审:10 \ 15
- 测试:20 \ 20
- 报告:10 \ 10
- 测试报告:10 \ 10
- 计算工作量:5  \ 5              
- 事后总结:20 \ 20                   
- 合计:190 \ 275                 
- ———————————————————————————————

三:思路

我们将作业分成两个部分,即文件操作以及字符的识别与计数。我负责的是对文件的操作以及指出同伴编码的错误。对于字符的计数,为了节约内存打算使用动态的内存申请,通过遍历链表来判断是否是新字符以及增加次数,同时用结构体来进一步的简化代码。首先是关于c++的空间申请,因为从未学习所以在博客园上寻找相关的知识内容;对于文件操作,通过打开文件,使用文件类的getline函数,将文件里面的字符储存到数组里面,然后开始进行操作。因为事先还未学习,便在上面画了大量时间学习,找到一个合适的函数或方法能够很好的录入文件内容。

四:设计实现过程

为了使得字符与字符数量紧密结合与代码简化,我们决定使用结构体来经行工作,同时建立一个类来捆绑相关函数的使用同时确保数据的安全性,其私有成员是字符总数与一个指向结构体的指针(其作用为头指针)。函数分为指针初始化函数,字符计数函数,与链表打印函数。字符计数函数形参为字符数组,完成与文件操作的交接。

五:编码规范

- 对于命名除了无关变量之外其余全部使用英文命名,如果存在多个英文则使用' _ '字符隔开,其余空格与缩进完全遵循vs2019自动隔开。
- 代码互审:在完成一个模块后互相审核与测试,其中代码错误有链表头指针为空,文件地址不正确,数组的数据溢出。

六:性能分析

  • 消耗最大函数:
int fun(char b[])
    {
        int a;
        set();
        for (a = 0; b[a] != '\0'; a++)
        {
            char_counter(b[a]);
        }
        return 0;
    }
- 代码改进:最开始是打算把识别与计算分开后来发现这么一来会遍历两次链表,造成效率降低,后来使用if语句来实现是否为新字符,以此来进行操作。

七:关键代码

- 对字符及其操作封装为一个类来,包含链表创建,字符计数与识别和打印。保护数据与实现代码简洁。
class way_to_char
{
public:
    int set()
    {
        use = new struct zifu;
        use->next = NULL;
        if (use == NULL)
        {
            cout << "分配内存失败" << endl;
        }
        cout << use << endl;
        return 0;
    }
    int char_counter(char b)
    {
        if (use == NULL)
        {
            return 0;
        }
        struct zifu* p;
        for (p = use->next; p != NULL; p = p->next)
        {
            if (p->word == b)
            {
                p->number++;
                char_number++;
                return 0;
            }
        }
        p = new struct zifu;
        p->word = b;
        p->number = 1;
        p->next = use->next;
        use->next = p;
        char_number++;
        return 0;
    }

    int show()
    {
        if (use == NULL)
            return 0;
        struct zifu* p;
        char stead;
        cout << "总的字符数为" << char_number  << endl;
        for (p = use->next; p != NULL; p = p->next)
        {
            if (p->word >= 65 && p->word <= 90)
                stead = p->word + 32;
            else
                stead = p->word;
            cout << "字符为" << stead << "出现次数为" << p->number << endl;
        }
        return 0;
    }
    int fun(char b[])
    {
        int a;
        set();
        for (a = 0; b[a] != '\0'; a++)
        {
            char_counter(b[a]);
        }
        return 0;
    }
private:
    struct zifu* use;
    int char_number = 0;
};

八:心路与收获

结对编程最开始的难题不是项目,而是两人的配合问题,针对同一个任务意见上总会产生分歧,导致迟迟没进展。但随着时间推移,两人步调渐渐一致,能互相理解对方代码的意图并进行审核,提升了代码质量。一旦编码有纰漏另一方总能指出,效率相比一人提升了不少。
posted @ 2019-10-16 10:34  PrinzViolet  阅读(119)  评论(1编辑  收藏  举报