一、前言
本篇博客为对结对编程搭档李宛芸同学的个人项目(中小学数学卷子自动生成程序)的评价。首先感谢李宛芸同学, 她在编程过程中多次帮忙检查我的代码并指出不符合规范的地方, 省去了我很多查阅规定的时间.
其次, 我来对李宛芸同学的个人项目稍作评论, 争取做到取长补短, 共同进步.
二. 测试与评价
1. 黑箱测试
拿到项目文件后, 我首先进行了黑盒测试.从用户的角度评判程序的运行情况.
1) 界面设计较好, 每一步都有充足的文字提示. 用户可以清晰知道下一步应该做什么.
2 ) 生成题目前预设了用户文件夹不存在的情况, 即使删除用户文件夹也能正常生成.
3 ) 当用户多次生成后会显示题库数量不足, 无法正常出题, 没有做到真正的随机生成.
2. 白盒测试
由于李宛芸同学和我在完成个人项目之前就经常对彼此的项目交换看法并分享进度, 因此没有花费很多时间我就对”盒子”的结构和工作原理有了一个清晰的了解. 从而结合黑盒测试的表现, 发现内部的长处与不足.
1 ) 从整体的代码设计来看, 李宛芸同学的代码模块化设计良好, 严格遵循一个函数实现一个功能的原则, 所有的函数都控制在40行以内.
2 ) 李宛芸为了程序的可扩展性, 将用户数据保存在txt文件中, 每次登录时读取并查询. 如果以后拓展程序, 这会使修改比较方便.
1 void Login(Teacher* teacher){ 2 while(1){ 3 printf("---欢迎使用中小学数学卷子自动生成程序---\n"); 4 printf("请输入用户名和密码, 两者之间用空格隔开\n"); 5 bool flag = false; 6 char input_name[100],input_password[100]; 7 scanf("%s %s", input_name, input_password); 8 getchar(); 9 std::string newTeacherName=input_name, newTeacherPassword=input_password; 10 std::ifstream inputFile("users.txt"); 11 if (!inputFile.is_open()) { 12 PrintError("无法打开用户信息文件\n"); 13 exit(1); 14 } 15 16 std::string currName, currPassword; 17 int account_type; 18 while (inputFile >> currName >> currPassword >> account_type) { 19 if (!newTeacherName.compare(currName) && !newTeacherPassword.compare(currPassword)){ 20 flag = true; 21 teacher = CreateTeacher(currName,currPassword,account_type); 22 break; 23 } 24 } 25 inputFile.close(); 26 27 if (flag) break; 28 else printf("请输入正确的用户名和密码\n"); 29 } 30 31 printf("当前年级类型为 %s\n", (teacher->GetType()).c_str()); 32 EnsureValidNumQuestions(teacher); 33 }View Code
3 ) 分析李宛芸同学生成题目和查重的方法得知, 她并没有真正生成随机的题目而是选择了取巧的方法: 使用随机数从题库中抽取. 同时, 查重算法也只是简单遍历所经被抽取的题目. 因此, 当用户多次生成后就面临题库数量不足的危险, 而且判定查重的时间成倍增加.
1 bool CheckDuplicate(const std::string& question,Teacher* teacher) { 2 std::string checkPath = teacher->GetTeachername()+ "\\Allquestion.txt"; 3 4 // 检查文件是否存在 5 std::ifstream checkIn(checkPath); 6 if (!checkIn) { 7 PrintError("用户信息文件不存在\n"); 8 return false; 9 } 10 11 std::string existQuestion; 12 while (getline(checkIn, existQuestion)) { 13 if (existQuestion == question) { 14 checkIn.close(); 15 return false; 16 } 17 } 18 checkIn.close(); 19 20 // 追加写入文件 21 std::ofstream checkOut(checkPath, std::ios::app); 22 if (!checkOut) { 23 PrintError("无法打开用户信息文件\n"); 24 return false; 25 } 26 checkOut << question << std::endl; 27 checkOut.close(); 28 29 return true; 30 }View Code
1 std::string GenerateMathProblem(Teacher* teacher,int linecount,std::string filename) { 2 // 打开题库文件 3 std::ifstream questionFile(filename); 4 if (!questionFile.is_open()) { 5 PrintError("无法打开文件以保存试卷\n"); 6 exit(1); 7 } 8 int randomLineNumber = GenerateRandomNum(linecount); 9 int currentLine = 0; 10 std::string line=""; 11 // 遍历文件内容,查找指定行的问题 12 while (getline(questionFile, line)) { 13 currentLine++; 14 if (currentLine == randomLineNumber) { 15 return line; 16 } 17 } 18 19 // 没有找到匹配的问题 20 PrintError("未找到匹配的问题\n"); 21 return ""; 22 }View Code
以上就是白盒测试的全部内容, 再次感谢李宛芸同学的耐心讲解.
三. 总结
第一次尝试结对编程搭档互评代码,体验新奇,。本次任务的顺利完成让我对接下来的结对编程项目充满信心,倍感期待。
标签:std,string,个人,项目,李宛芸,用户,互评,input,teacher From: https://www.cnblogs.com/Nelist-4573qu/p/17718125.html