当前位置: 首页 > news >正文

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

一、作业信息

github网址 https://github.com/easytime2000/MathApp
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/?page=3
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13470

李易时:3123004271
林烁:3123004274

二.PSP表格:

PSP2 1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 300 300
Estimate 估计这个任务需要多少时间 300 300
Development 开发 200 200
Analysis 需求分析(包括学习新技术) 60 60
Design Spec 生成设计文档 20 10
Design Review 设计复审 20 20
Coding Standard 代码规范(为目前的开发制定合适的规范) 30 20
Design 具体设计 60 50
Coding 具体编码 100 120
Code Review 代码复审 5 10
Test 测试(自我测试,修改代码,提交修改) 15 20
Reporting 报告 15 30
Test Report 测试报告 15 15
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 15 20
合计 375 395

三.效能分析
性能优化成果
通过性能分析工具,我们识别并优化了程序中的性能瓶颈:
3a42ceed57109ce7907b3c874d17d77e
6564a4d40e7d583086e7477e59b259d8

优化前性能数据:

f46e1e6f62a18cd225f6076788ca460c

generate_questions_and_answers 执行时间: 36ms

主要瓶颈: 重复检查算法、表达式生成策略

优化后性能数据:

generate_questions_and_answers 执行时间: 3.2ms

性能提升: 超过10倍

性能优化策略
缓存机制: 使用哈希缓存避免重复计算

预生成策略: 预生成操作符组合减少随机选择

快速约束检查: 提前终止无效表达式生成

简化重复检查: 使用哈希值比较替代复杂表达式分析

智能重试机制: 合理控制最大尝试次数

性能分析图:
ec6d52f79b20cc3bf895f79b8e2fc0ce

从性能分析图可见:

test_full_generation_and_write: 45.2% 执行时间

generate_questions_and_answers: 3.2% 执行时间(优化后)

其他工具函数: 占比均小于5%
设计实现过程
系统架构
text
四则运算系统
├── 命令行接口 (command_line.py)
├── 图形界面 (gui.py, main.py)
├── 核心引擎
│ ├── 题目生成 (question_generator.py)
│ ├── 分数处理 (fraction_utils.py)
│ ├── 评分系统 (grader.py)
│ └── 工具函数 (utils.py)

关键类与函数设计

  1. 题目生成模块 (question_generator.py)
    python

核心函数

  • generate_questions_and_answers(n, range_val) # 主生成函数
  • generate_valid_expression_fast() # 快速生成有效表达式
  • generate_number() # 生成数字(整数或分数)
  • is_duplicate_fast() # 快速重复检查
  1. 分数处理模块 (fraction_utils.py)
    python
  • parse_fraction() # 解析分数字符串
  • evaluate_expression() # 计算表达式值
  • fraction_to_str() # 分数转字符串
  1. 评分模块 (grader.py)
    python
  • grade() # 自动评分
  • write_grade_file() # 生成成绩文件
    关键算法流程图
    text
    开始生成题目

    输入参数验证 (n, r)

    循环生成直到满足数量或达到最大尝试次数

    生成操作符组合

    生成数字序列

    构建表达式并计算

    约束检查(负数、除法结果等)

    重复检查

    通过检查 → 添加到题目列表

    输出题目和答案文件
    代码说明
    关键代码片段
  1. 快速表达式生成(性能优化核心)
    python
def generate_valid_expression_fast(range_val, operators):numbers = [generate_number(range_val) for _ in range(len(operators) + 1)]expr_parts = [numbers[0]]current_value = parse_fraction(numbers[0])for i, op in enumerate(operators):next_num = numbers[i + 1]next_value = parse_fraction(next_num)# 快速约束检查 - 提前终止无效生成if op == '-' and current_value < next_value:return None, None  # 减法结果不能为负if op == '÷' and (next_value == 0 or current_value >= next_value):return None, None  # 除法结果应为真分数# ... 运算执行和验证
  1. 智能重复检查
    python
def is_duplicate_fast(expr, existing_exprs):"""使用哈希值的快速重复检查"""expr_key = hash(expr.replace(' ', ''))  # 移除空格作为keyif expr_key in _expression_cache:return True_expression_cache.add(expr_key)return False
  1. 分数表达式计算
    python
def evaluate_expression(expr):"""安全计算表达式,支持分数运算"""try:expr_safe = expr.replace('×', '*').replace('÷', '/')# 把分数 1/2 变成 Fraction(1, 2)expr_safe = re.sub(r'(\d+)/(\d+)', r'Fraction(\1, \2)', expr_safe)result = eval(expr_safe, {"Fraction": Fraction})return resultexcept Exception:return None

测试运行
测试用例设计

  1. 基本功能测试
    python

测试用例1: 生成10道题目,范围10

python command_line.py -n 10 -r 10
image

测试用例2: 生成分数题目

python command_line.py -n 5 -r 5
image

测试用例3: 判分功能测试

python command_line.py -e Exercises.txt -a Answers.txt
image

  1. 边界条件测试
    python

测试用例4: 最小范围测试

python command_line.py -n 3 -r 2
image

测试用例5: 大量题目生成测试

python command_line.py -n 100 -r 10
image

测试用例6: GUI界面测试

python main.py
image

  1. 错误处理测试
    python

测试用例7: 无效参数测试

python command_line.py -n 0 -r 10
image

python command_line.py -n 10 -r 1
image

测试用例8: 文件不存在测试

python command_line.py -e not_exist.txt -a not_exist.txt
image

  1. 题目质量测试
    python

测试用例9: 约束验证测试

验证生成的题目是否满足:
无负数结果
除法结果为真分数
运算符不超过3个
无重复题目

测试用例10: 性能测试

生成1000道题目测试系统稳定性
python command_line.py -n 1000 -r 20
image

测试结果验证
通过以下方式确保程序正确性:

自动验证: 程序内置约束检查确保题目质量

手动抽样: 随机抽查题目验证计算正确性

文件格式: 验证输出文件格式符合要求

性能基准: 确保生成时间在可接受范围内

项目小结
算法复杂度 :表达式规范化算法复杂度较高,可进一步优化
用户界面 :命令行界面不够友好,可考虑添加图形界面
内存占用:单生成大量题目时内存占用过大
改进优化方向
在项目初期可以制定更详细的开发计划和代码规范
增加自动化单元测试的覆盖率
在功能开发过程中可以增加更多的中间检查点

http://www.hskmm.com/?act=detail&tid=36189

相关文章:

  • 关于莫比乌斯函数的应用1
  • 用deepseek写的一个求原根的程序
  • 操作备忘:在AE中让视频中间部分变慢
  • 记一次精简系统Windows11英文版离线安装中文语言包的过程
  • 阿里巴巴数据库开发手册
  • AI元人文:赋能公共治理、司法与监管的价值权衡新范式
  • 基础的sql练习,全都理解你就是高手了!
  • nginx快速实现平滑版本升级
  • Luogu P11159 【MX-X6-T5】 再生 题解 [ 蓝 ] [ 前缀和 ] [ 组合计数 ]
  • 王浩宇 102500416
  • 程序员修炼之路:从小工到专家 读书笔记 2
  • 程序员修炼之路:从小工到专家 读书笔记 3
  • 中级问题
  • 2025.10.21
  • 解答在同步以太坊事件数据时,如何保证后端服务在 API/RPC 不稳定情况下的可用性
  • 程序员修炼之道:从小工到专家 读书笔记 1
  • 好想好想你
  • 10.21日学习笔记
  • 数据库概述
  • 第1天(简单题 基础语法 数据类型、条件判断 、循环 循环嵌套、位运算, ASCII 码)
  • 24信计2班 17曾向嵩 pytorch读书报告
  • 关于第一次作业的时长统计
  • Go 语言问题解释
  • Keil_v5的用法
  • day 8
  • OI 笑传 #21
  • Day1文本格式化标签
  • 【C语言学习记录】你好世界
  • 1021
  • 24信计2班 17曾向嵩 pytorch66页实验题