林丽(M23381101) 肖任楷(M23382603)
仓库地址:https://gitee.com/hezhiyong_edu/pair-programming-xl.git
PSP表格
PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 30 · Estimate · 估计这个任务需要多少时间 30 30 Development 开发 30 60 · Analysis · 需求分析 (包括学习新技术) 10 30 · Design Spec · 生成设计文档 20 20 · Design Review · 设计复审 20 20 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 40 40 · Design · 具体设计 50 60 · Coding · 具体编码 720 840 · Code Review · 代码复审 70 80 · Test · 测试(自我测试,修改代码,提交修改) 240 250 Reporting 报告 120 120 · Test Repor · 测试报告 20 30 · Size Measurement · 计算工作量 30 30 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30 合计 1430 1630
功能扩展及代码仓库使用
扩展功能要求:通过导出导入文本文件方式进行答题和判题。
设计思路:
##现有代码程序流程框图:
##扩展功能实现设计思路:创建一个文本文件caculate.txt,将生成的题目信息和用户答题结果导入到文本文件中,并且在最后判分阶段时把结果也导入到文本文件中。
功能实现情况:
代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
int compute(int a, int b, int c, int op)
{
int answer, result;
//打开文本文件
FILE* fp;
fp = fopen("caculate.txt", "w");
if (fp == NULL)
{
printf("File cannot open!\n");
exit(0);
}
switch (op)
{
case 1://全加运算
printf("%d+%d+%d=", a, b, c);
fprintf(fp, "%d+%d+%d=", a,b,c);
result = a + b + c;
break;
case 2://全减运算
if ((a > b) && ((a - b) > c))//保证结果为正数
{
printf("%d-%d-%d=", a, b, c);
fprintf(fp, "%d-%d-%d=", a, b, c);
result = a - b - c;
}
break;
case 3://全乘运算
printf("%d*%d*%d=", a, b, c);
fprintf(fp, "%d*%d*%d=", a, b, c);
result = a * b * c;
break;
case 4://全除运算
if ((b != 0) && (c != 0))//分母不能为0
{
printf("%d/%d/%d=", a, b, c);
fprintf(fp, "%d/%d/%d=", a, b, c);
result = a / b / c;
}
break;
case 5://加减混合运算
if ((a + b) > c)//保证结果为正数
{
printf("%d+%d-%d=", a, b, c);
fprintf(fp, "%d+%d-%d=", a, b, c);
result = a + b - c;
}
break;
case 6://乘加混合运算
printf("%d*%d+%d=", a, b, c);
fprintf(fp, "%d*%d+%d=", a, b, c);
result = a * b + c;
break;
case 7://乘减混合运算
if ((a * b) > c)
{
printf("%d*%d-%d=", a, b, c);
fprintf(fp, "%d*%d-%d=", a, b, c);
result = a * b - c;
}
break;
case 8://除加混合运算
if (b != 0)
{
printf("%d/%d+%d=", a, b, c);
fprintf(fp, "%d/%d+%d=", a, b, c);
result = a / b + c;
}
break;
case 9://除减混合运算
if (b != 0)
{
printf("%d/%d-%d=", a, b, c);
fprintf(fp, "%d+%d+%d=", a, b, c);
result = a / b - c;
}
break;
case 10://乘除混合运算
if (c != 0)
{
printf("%d*%d/%d=", a, b, c);
fprintf(fp, "%d*%d/%d=", a, b, c);
result = a * b / c;
}
break;
default:
printf("其它!\n");
break;
}
fprintf(fp, "%d\n", answer);
scanf_s("%d", &answer);//输入答案
if (result == answer)//答案正确返回1,错误返回0
{
return 1;
}
else
{
return 0;
}
}
//导出导入文本方式进行答题和判断*生成题目导入文本**答题时导出文本学生开始答题***答题结果存入文本
void print(int flag)
{
if (flag)
{
printf("回答正确!\n");
}
else
{
printf("回答错误!\n");
}
}
void menu()
{
printf("***欢迎进入小学生算术四则运算测试系统***\n");
printf("1.加法运算\n");
printf("2.减法运算\n");
printf("3.乘法运算\n");
printf("4.除法运算\n");
printf("5.加减混合运算\n");
printf("6.乘加混合运算\n");
printf("7.乘减混合运算\n");
printf("8.除加混合运算\n");
printf("9.除减混合运算\n");
printf("10.乘除混合运算\n");
printf("请选择考试内容:");
}
main()
{
int a, b, c, i, result, zfs = 0, zct = 0, op = 0, k, n;
menu();
FILE* fp;
fp = fopen("caculate.txt", "w");
if (fp == NULL)
{
printf("File cannot open!\n");
exit(0);
}
fprintf(fp,"请选择考试内容:%d\n",k);
scanf_s("%d", &k);
printf("请输入答题数量:");
fprintf(fp, "请输入答题数量:%d\n", n);
scanf_s("%d", &n);
for (i = 0; i < n; i++)//循环n次,每次计算1道题
{
a = rand() % 10;//随机生成三个100以内的数
b = rand() % 10;
c = rand() % 10;
if (k == 1) //判断输入的数
op = 1;
else if (k == 2)
op = 2;
else if (k == 3)
op = 3;
else if (k == 4)
op = 4;
else if (k == 5)
op = 5;
else if (k == 6)
op = 6;
else if (k == 7)
op = 7;
else if (k == 8)
op = 8;
else if (k == 9)
op = 9;
else if (k == 10)
op = 10;
else
op = rand() % 4 + 1;
result = compute(a, b, c, op);//调用四则运算函数,答案正确返回1,错误返回0
print(result);//调用判断回答是否正确函数
if (result)//计算总分
zfs = zfs + 10;
else
zct++;//回答错误题数+1
}
printf("分数=%d,回答错误题数=%d\n", zfs, zct);
fprintf(fp, "分数=%d,回答错误题数=%d\n", zfs, zct);
fclose(fp);
return 0;
}
功能实现后将更改后的代码commit到gitee仓库,完成push操作。
push结束后可以在仓库里对应的代码文件里看到代码的更改记录。
对于任务可扩展性和可维护性的评价分析
可维护性是指当需要修改程序的某个模块时,对其他模块的影响和修改的代价;可扩展性是指当需要为程序添加新的功能时,对其他模块的影响和添加的代价。
整体来看,我们本次结对编程作业的程序在面对维护和扩展需求时,它是有一定的可扩展性和可维护性的,但是还是有缺陷,主函数代码较冗杂,可在一定程度上将其模块化,以便程序的扩展和维护。
参考资料: