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

news/2025/10/22 0:46:36/文章来源:https://www.cnblogs.com/vision6/p/19156734

一、作业信息

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.mzph.cn/news/942801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用deepseek写的一个求原根的程序

include include include include include using namespace std; // 快速幂算法:计算 (a^b) % mod long long fast_power(long long a, long long b, long long mod) { long long result = 1; a = a % mod; whil…

操作备忘:在AE中让视频中间部分变慢

目标效果:一个15秒的视频, 1-5秒的部分1倍速播放 5-10秒的部分以0.5倍速播放 10-15秒的部分1倍速播放。 操作如下: 1. 对素材或预合成启用时间重映射 2. 在5秒、10秒处打关键帧(开始变慢与结束变慢的位置): 3.…

记一次精简系统Windows11英文版离线安装中文语言包的过程

最近折腾上了超级精简的Win11系统,就是没有那些乱七八糟的服务的,也没有乱七八糟自带软件的系统,然后看了一圈,发现一个叫Nano11的精简系统非常不错,系统的项目以及下载地址:https://github.com/ntdevlabs/nano11…

阿里巴巴数据库开发手册

下载地址https://8ma.co/res/RMFS3J81.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px } .zsleft { float: le…

AI元人文:赋能公共治理、司法与监管的价值权衡新范式

AI元人文:赋能公共治理、司法与监管的价值权衡新范式 在当今复杂多元的社会环境中,公共治理、司法审判与行业监管领域面临着日益复杂的价值权衡挑战。经济发展与环境保护、个人权益与公共利益、创新活力与风险防控等…

数据结构之顺序队列

数据结构之顺序队列数据结构之队列 什么是队列队列是和栈一样操作受限的线性表,栈是只允许在线性表的一端进行入栈和出栈操作,而队列是会允许在线性表的一端进行入队,在另外一端进行出队操作队列的基本操作 bool in…

nginx快速实现平滑版本升级

1、解压并编译新版的nginx # 目前版本为1.18,解压一个1.21版本的nginx包 wget https://nginx.org/download/nginx-1.21.0.tar.gz tar -zxf nginx-1.21.0.tar.gz cd nginx-1.21.0/ [root@ubt-server nginx-1.21.0]# ls…

基础的sql练习,全都理解你就是高手了!

以下sql我都是亲测:大多数用法都会在面试当中被问到,切记一步一个脚印的去实现,结果不重要,重要的是你的实现过程的想法,第一步做什么然后第二步做什么等具体的详细过程!(学东西不能贪多,慢慢来) 先从单表查询…

Luogu P11159 【MX-X6-T5】 再生 题解 [ 蓝 ] [ 前缀和 ] [ 组合计数 ]

再生 笑点解析:一开始乘法原理推错式子胡了个依赖链长种类数 \(\le \sqrt n\) 的做法上去。 有了 \(top\) 数组,显然可以求出每个点所处的长链。对于长链上的点,如果链长为 \(x\),那么这条链有 \((x - 1)!\) 种可能…

王浩宇 102500416

这个作业属于:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13570 学号:102500416 姓名:王浩宇 书本作业 第一题第二题第三题第四题第五题第六…

102500416 王浩宇

这个作业属于:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13570 学号:102500416 姓名:王浩宇 书本作业 第一题第二题第三题第四题第五题第六…

程序员修炼之路:从小工到专家 读书笔记 2

《程序员修炼之道:从小工到专家》读书笔记(补充篇) 重读《程序员修炼之道》,除了此前感悟的核心原则,书中 “破窗理论”“原型验证”“责任承诺” 等理念,更让我看清从 “完成代码” 到 “掌控开发” 的进阶细节…

程序员修炼之路:从小工到专家 读书笔记 3

《程序员修炼之道:从小工到专家》读书笔记(进阶篇) 三读《程序员修炼之道》,书中 “知识负债”“自动化思想”“沟通协作” 三大被忽略的理念,终于让我触摸到 “专家” 的核心特质 —— 不仅是技术能力的精进,更…

程序员修炼之道:从小工到专家 读书笔记 1

《程序员修炼之道:从小工到专家》读书笔记 翻开《程序员修炼之道:从小工到专家》,没有复杂的代码堆砌,却满是对程序员职业成长的深刻洞察。这本书更像一位资深前辈的经验分享,指引着开发者跳出 “代码搬运工” 的…

解答在同步以太坊事件数据时,如何保证后端服务在 API/RPC 不稳定情况下的可用性

我来详细解答在同步以太坊事件数据时,如何保证后端服务在 API/RPC 不稳定情况下的可用性: 1. 以太坊事件同步的挑战 事件同步的特点 package mainimport ("context""fmt""log""t…

中级问题

我来详细解答这些区块链和 Go 后端开发的问题: 18. Merkle Tree 在区块链中的作用 Merkle Tree 定义 Merkle Tree 是一种二叉树结构,用于高效验证大量数据的完整性。 在区块链中的作用 // 区块链中的 Merkle Tree 应…

20251021周二日记

20251021周二日记这阅读量是怎么回事?有熟人看到吗,哈喽啊/ 今日: 1.早上睡到十点多,紧急去实验室继续报账,填系统,这次应该差不多了。 2.中午统一定的袁记,简单吃完下午上课去,帮报信和写题,下课回549了。 h…

好想好想你

喝了四两酒喝的酒 一股子我们在机场喝的人参酒味 眼前画面一帧一帧 脑子好像灌了水银 身体不由自主 很想你 我要是现在死掉就好了 让我们的故事成为一个完美的童话

10.21日学习笔记

HBase 增量迁移:TB 级历史表 0 停机上云 场景 本地 2.3 TB 的 msg_his 表 → 阿里云 HBase 2.0(LTS 版),要求白天业务可读可写,只容忍 5 min 最终切换窗口。 方案选型 采用“Snapshot + Replication 双轨 + 增量校…

第1天(简单题 基础语法 数据类型、条件判断 、循环 循环嵌套、位运算, ASCII 码)

打卡第一天 做8道简单题找回一些手感 第五题的异或运算卡了很久,离散数学没学好...看了解题方法还是不会(不用数学的解题思路✔) 数据库原理两道题,现学MySQL半小时就放弃了^^ 今日耗时≈两小时 明天继续