软件工程第二次作业-结对项目

结对项目完成人员:

李家鑫 冯琰玮 

李家鑫主要负责代码编写及开发,冯琰玮辅助 。冯琰玮主要负责审查代码和对代码进行测试分析,李家鑫辅助 ,并负责项目相关情况记录。二人合力进行相关构思,以及解决开发过程中相关问题

一、代码开发过程:

1、代码仓库地址

https://gitee.com/nue-autumn-2023/lijiaxin-fengyanwei.git

 2、代码所实现功能

        a.生成题目数量可以指定。

        b.支持加减乘除4种运算。

        c.每道题包含两个运算符

        d.题目运算数均为100 以内的数字。

        e.所生成答案在 0..100 之间。

        f.配备有答题功能并可验证答案是否正确。

        g.可进行判分,并对历史成绩进行存储和查询。

        h.题目可避免重复。

        整体代码使用C++语言进行编写。

        用户运行代码后首先需输入用户名登录,之后选择查询历史成绩或进行运算练习,选择运算练习后可指定题目数量,之后系统生成指定数量的四则运算练习题,用户完成后系统给出分数。

3、代码编写思路

        用户运行代码后,为便于后续操作,应首先要求输入用户名,考虑到查询历史成绩与答题功能为两个不同功能,所以输入用户名之后用户应选择是进行答题还是查询历史成绩。用户选择答题后,应该可对题目数量进行指定,之后由程序按照用户要求,生成指定数量的题目。用户应在作答完本题并确认后程序可自动生成下一题,待全部完成后给出分数,成绩则以用户名-分数的形式存储到文件里。用户在开始输入用户名选择查询成绩后,程序给出上一次以此用户名作答的成绩。之后通过学习附录中资料,以及CSDN上相关文章,掌握一定的代码编写能力以及弄清楚如何设计程序框架,明白在这个过程中需要调用哪些函数,有什么功能需要定义函数实现,以及有哪些库在编码过程中需要调用,从而进行代码开发。

4、实际代码编写过程

        首先,对代码进行预处理,导入要用的函数,

        之后,进行变量定义,生成要用的随机数以及运算符,

        然后,分别进行运算,首先使用两个随机数与一个随机运算符进行处理,得到结果,之后利用此结果与第三个随机数和运算符进行处理,得到答案,并确保答案是否在0-100之间。

        首先,提示用户输入用户名,提示选择功能需求,若选择1,则要求输入要练习的题目数量,

        生成指定数量题目,并要求用户作答,并检验答案,计算分数,将得分存储到文件中

        若输入2,则遍历文件给出以该用户名作答的历史成绩

        定义checkAnswer函数和manageScores,可检验用户输入答案以及将分数存储到文件里。

5、里程碑规划

        本次代码编写过程中,用来规划的相关里程碑具体如下:

 6、代码完成过程

        按照里程碑内六个规划,在VS内逐步编写代码后提交到代码仓库中,

        在第六次提交时,为了进一步丰富程序的功能,在代码内加入了对练习时间进行计时的功能,具体程序如下:

        首先调用头文件time.h,并且定义clock_t的变量。

        #include "time.h"

        clock_t start,stop;

        然后可以使用clock()函数,在需要测量运行时间的程序运行前调用它,在程序运行结束后再次调用它,即可获得程序运行所消耗的时间。该函数返回的单位是clock tick,也就是时钟打点。

        start = clock();
        /*需要测量的代码*/
        stop = clock();
        CLK_TCK就是当前所用的机器时钟每秒所走的时钟打点数。程序运行所经过的是时钟打点数除以每秒时钟打点数,即可得到运行时间。

        duration = ((double)(stop-start))/CLK_TCK;

        最后输出即可

            cout << "您的练习时间是:" << duration << "S" << endl;

7、代码实际功能演示

        代码经VS检测后可生成解决方案并调试运行

        选择做题功能

        选择查询历史成绩功能

 

8、代码评审、审查及性能分析
(1)、代码评审

(2)、代码审查

 

 (3)、性能分析工具

        使用VS2022性能分析工具对代码进行性能测试,结果如下:

       由于水平有限,难以对代码从效能方面进行改进,只可尽可能提高代码运行效率,减少报错。

        改进部分:对计时程序进行初始化定义

        计时时间数据类型转换耗费时间,初始定义

        

二、过程记录

1、PSP展示
PSP记录
PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3030
· Estimate· 估计这个任务需要多少时间2020
Development开发31202700
· Analysis· 需求分析 (包括学习新技术)16801440
· Design Spec· 生成设计文档00
· Design Review· 设计复审00
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)00
· Design· 具体设计120120
· Coding· 具体编码57605040
· Code Review· 代码复审120240
· Test· 测试(自我测试,修改代码,提交修改)9601200
Reporting报告00
· Test Repor· 测试报告6060
· Size Measurement· 计算工作量600
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划60120
合计1199010970
2、学习日志

 学习日志记录

日期学习时段学习内容收获体会效率评价
10161630-1730
1900-2100
研究需求、代码编写、流程学习设计一个软件之前梳理需求,进行需求分析很有必要
1017
1900-2300
需求分析、学习函数编写、代码编写开发在代码编写过程中,要提升代码规范和相关算法熟练度一般
10180800-1010
1630-1730
1900-2100
代码编写开发、修改更新版本如果没有正确分析需求,后期代码更改起来会很困难一般
10191630-1730
1900-2100
代码编写开发、修改更新版本、开始撰写博客如果没有正确分析需求,后期代码更改起来会很困难一般
10201630-1730
1900-2100
开始各项测试、代码完善单元测试相当有难度,需要继续学习如何分析用例,如何编写测试程序一般
10210800-1000总结双人协作开发可以提升效率

三、学习总结

这次结队编程项目的开发让我们深刻体会到了队友的重要性。这次虽然只有两个人,但是我们彼此熟悉,交流起来很轻松。因此,整个项目开发相对比较顺利。不过,由于时间紧张,程序实现的功能比较简单。如果有更多的时间,我相信我们可以将其优化得更好。吸取上次个人项目的开发经验和教训,我们进行了需求分析,但在后期编程过程中还是存在需求分析不到位返工的情况,不过我们最终改正了这些问题。对于一些函数功能的实现,由于没有基础,我们在开发过程中学到了很多新知识。此外,程序的一个不足之处就是限制用户的输入,许多功能后期也要继续改进一下。总的来说,有了这一次结队编程项目的经验,相信以后的开发要顺利许多,毕竟熟能生巧。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值