第三次作业-结对项目

news/2025/10/21 11:38:42/文章来源:https://www.cnblogs.com/JianjiaGuan/p/19154656

第三次作业-结对项目

个人项目

这个作业属于哪个课程 班级的链接
这个作业要求在哪里 作业要求的链接
这个作业的目标 训练个人项目软件开发能力,学会使用性能测试工具和实现单元测试优化程序

作者:关健佳3121004072

PSP2表格

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

系统设计报告

1. 代码组织结构

本项目的代码组织如下:

Four_arithmetic_operations/
├── main.py              # 核心代码文件,包含所有功能实现
├── Exercises.txt        # 生成的练习题文件
├── Answers.txt          # 练习题对应答案文件
├── Grade.txt            # 答案检查结果文件
└── README.md            # 项目说明文档

核心类设计:

  • ArithmeticExerciseGenerator: 四则运算题目生成器主类
    • generate_number(): 生成随机数(自然数或真分数)
    • format_number(): 格式化数字显示
    • parse_number(): 解析数字字符串为分数对象
    • generate_expression(): 生成包含指定运算符数量的表达式
    • evaluate_expression(): 计算表达式的值
    • is_duplicate(): 检查表达式是否重复
    • generate_exercises(): 生成指定数量的题目
    • save_exercises()save_answers(): 保存题目和答案到文件

辅助函数:

  • check_answers(): 检查答案文件中的对错
  • main(): 程序入口函数

2. 关键函数流程图

题目生成流程

graph TDA[开始生成题目] --> B{题目数量是否足够}B -- 否 --> C[随机选择运算符数量]C --> D[生成表达式]D --> E{表达式是否重复}E -- 是 --> BE -- 否 --> F[计算表达式结果]F --> G{结果是否有效}G -- 是 --> H[存储题目和答案]G -- 否 --> BH --> BB -- 是 --> I[结束]

表达式计算流程

graph TDJ[开始计算表达式] --> K[替换表达式中的分数]K --> L[标准化运算符]L --> M[使用eval计算结果]M --> N[转换为分数形式]N --> O[返回结果]

3. 算法关键与创新点

关键算法:

  1. 分数表示与计算

    • 使用Python内置的Fraction类进行精确的分数运算,避免浮点数精度问题
    • 实现了带分数的表示方法(如:1'1/2)和转换函数
  2. 题目去重机制

    • 通过标准化表达式(去除空格和括号,统一运算符)后比较字符串来判断重复
    • 保证生成的题目具有唯一性
  3. 负数和零值处理

    • 在减法运算中确保被减数大于减数,避免出现负数结果
    • 在除法运算中检查除数不为零,防止除零错误
  4. 表达式生成策略

    • 支持1-3个运算符的表达式生成
    • 随机生成自然数和真分数,增加题目多样性

创新点:

  1. 真分数支持

    • 完整实现了真分数的生成、解析、计算和显示
    • 支持带分数(如:1'1/2)的表示和运算
  2. 智能去重算法

    • 通过对表达式进行标准化处理后比较来检测重复题目
    • 相比简单的字符串比较更准确
  3. 灵活的命令行接口

    • 使用[argparse](file:///Users/guanjianjia/Gjj/software-engineering-2025/Four_arithmetic_operations/main.py#L3-L3)模块实现命令行参数解析
    • 支持生成题目和检查答案两种模式

4. 项目关键代码与解释

分数生成与处理

def generate_number(self):"""生成一个数字(自然数或真分数)"""if random.choice([True, False]):# 生成自然数return random.randint(0, self.range_limit - 1)else:# 生成真分数denominator = random.randint(2, self.range_limit - 1)numerator = random.randint(1, denominator - 1)# 简化分数frac = Fraction(numerator, denominator)if frac.numerator > frac.denominator:# 生成带分数whole_part = frac.numerator // frac.denominatorremainder = frac.numerator % frac.denominatorif remainder == 0:return whole_partelse:return f"{whole_part}’{remainder}/{frac.denominator}"elif frac.numerator == frac.denominator:return 1else:return f"{frac.numerator}/{frac.denominator}"

这段代码实现了随机数生成,能够平衡地生成自然数和真分数,其中真分数会自动简化并按需转换为带分数形式。

表达式计算

def evaluate_expression(self, expr):"""计算表达式的值"""# 替换分数def replace_fractions(match):frac_str = match.group(0)if "’" in frac_str:parts = frac_str.split("’")whole = int(parts[0])frac_part = parts[1]frac_parts = frac_part.split("/")numerator = int(frac_parts[0])denominator = int(frac_parts[1])return str(Fraction(whole * denominator + numerator, denominator))else:frac_parts = frac_str.split("/")numerator = int(frac_parts[0])denominator = int(frac_parts[1])return str(Fraction(numerator, denominator))try:# 处理带分数和分数expr = re.sub(r'\d+’\d+/\d+', replace_fractions, expr)expr = re.sub(r'\d+/\d+', replace_fractions, expr)# 替换运算符expr = expr.replace('×', '*').replace('÷', '/')result = eval(expr)return Fraction(result).limit_denominator()except Exception as e:# print(f"计算错误: {e}, 表达式: {expr}")return Fraction(0)

该函数负责计算表达式的值,通过正则表达式识别并转换分数,利用Python的eval函数计算表达式,并最终返回Fraction类型的精确结果。

题目去重

def normalize_expression(self, expr):"""标准化表达式用于查重"""# 移除空格和括号normalized = re.sub(r'[\s()]', '', expr)# 标准化运算符normalized = normalized.replace('×', '*').replace('÷', '/')return normalizeddef is_duplicate(self, expr):"""检查表达式是否重复简化版查重:仅检查标准化表达式是否相同"""normalized = self.normalize_expression(expr)return normalized in self.exercise_set

这两个函数实现了表达式的标准化和重复检查功能,通过移除无关字符并将运算符统一,使语义相同的表达式具有相同的标准化形式。

5. 测试用例与结果验证

功能测试

  1. 题目生成测试:

    python main.py -n 10 -r 10
    

    生成题目示例:

    1. 5 × 9 - 5 - 5 = 
    2. 5 × 5÷8 = 
    3. 3÷5 + 6÷7 + 1÷3 × 1÷5 = 
    4. 1÷3 ÷ 6 + 9 = 
    5. 1÷2 ÷ 6 = 
    6. 1 + 9 - 3 ÷ 7 = 
    7. 1÷4 ÷ 1÷4 × 8 + 7 = 
    8. 1÷2 × 7 = 
    9. 1÷2 × 0 ÷ 1÷4 × 3÷8 = 
    10. 5÷6 + 1÷4 = 
    

    对应答案:

    1. 35
    2. 3’1/8
    3. 1’11/21
    4. 9’1/18
    5. 1/12
    6. 9’4/7
    7. 7’1/2
    8. 3’1/2
    9. 0
    10. 1’1/12
    
  2. 答案检查测试:

    python main.py -e Exercises.txt -a Answers.txt
    

    检查结果保存在Grade.txt中:

    Correct: 10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    Wrong: 0 ()
    

边界条件测试

  1. 零值处理测试:

    • 表达式:1÷2 × 0 ÷ 1÷4 × 3÷8 =
    • 正确结果:0
  2. 最大范围测试:

    • 当设置范围为10时,生成的数字不会超过10
  3. 分数计算测试:

    • 表达式:5 × 5÷8 =
    • 正确结果:3'1/8

异常情况测试

  1. 除零保护测试:

    • 系统会在生成除法运算时确保除数不为零
  2. 负数避免测试:

    • 减法运算中会自动调整操作数顺序,确保结果非负

6. 结对开发经验总结

成功经验

  1. 分工明确

    • 一人负责核心算法实现,另一人专注于测试和边界条件处理
    • 定期交换角色,确保双方对整个项目都有深入了解
  2. 持续集成

    • 每完成一个功能就立即进行测试,避免积累过多问题
    • 使用版本控制系统记录每次重要变更
  3. 代码评审

    • 每个功能完成后都要经过另一人审查才能合并
    • 发现了不少潜在的逻辑错误和边界情况处理不当的问题

遇到的挑战

  1. 分数运算复杂性

    • 分数的表示、计算和格式化涉及到多个细节处理
    • 带分数的支持增加了额外的复杂度
  2. 题目去重难题

    • 初期采用简单字符串比较无法识别语义相同的表达式
    • 后续通过标准化处理解决了这一问题
  3. 命令行接口设计

    • 需要同时支持题目生成和答案检查两种模式
    • 使用argparse库很好地解决了这个问题

改进方向

  1. 增强去重算法

    • 当前的去重算法只能识别完全相同的表达式
    • 可以进一步实现基于运算规则的智能去重(如加法交换律)
  2. 优化表达式生成

    • 当前的表达式生成较为简单,可以引入更多复杂的表达式结构
    • 可以增加括号支持,提高题目难度层次
  3. 完善测试覆盖

    • 增加更多的自动化测试用例
    • 引入单元测试框架,提高测试效率和准确性

四、我的 GitHub 地址

https://github.com/JianjiaGuan

该作业备份仓库位置

https://github.com/JianjiaGuan/software-engineering-2025

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942136.shtml

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

相关文章

【2025-10-20】连岳摘抄

23:59大处着眼,小处着手,群居守口,独居守心。——曾国藩想到英语直播带货,那就试试看,反正成本不高。按我的理解,成功的可能性不大。你说到对家庭教育和心理学“感兴趣”。这对择业帮助不大。因为供给过剩。有个…

2025无人机在农业生态中的应用实践

一、开篇:无人机重塑农业生态的“高飞”时代 2025年,甘肃环县陡峭的山坡上,一架无人机吊运树苗精准落位,效率较人工提升10倍;新疆沙漠边缘,无人机播撒的草种让黄沙蜕变为绿洲。这些场景正是无人机技术赋能农业生…

阅读“生财有术”的zero的文章有感。

阅读“生财有术”的zero的文章有感。阅读了zero的精品文章《13天开通YouTube YPP,从0到1月入过万的自动化实操记录》,突然感觉这个世界上有两种人,一种是有知识的人,一种是有技术的人。什么是有知识的人呢? 就是充…

2025年10月注册公司服务评测榜:五家机构对比与排名全解析

一、引言 在“双创”政策持续深化、市场准入门槛不断降低的背景下,2025年10月成为全年创业注册高峰之一。对于首次创业者、异地扩张负责人以及需要快速落地项目的采购型老板而言,注册公司不再只是“拿一张执照”,而…

剪映效率提升:850 款高级感口播动态文字素材合集(含入场出场动画)

在短视频创作领域,口播视频的 “高级感” 往往离不开精致的文字字幕 —— 清晰的标题引导、同步的口播字幕、灵动的动画过渡,不仅能提升观众观感,更能强化内容传递效率。但多数创作者面临 “字幕设计耗时长、动画效…

ICPC2023 西安站

A. An Easy Geometry Problem tag: 二分Hash 我们令 \(A_i = A_i - i\times \frac k 2\) 那么我们可以发现: \( \begin{aligned}A_{i+r} - A_{i-r} &= A_{i+r} - (i+r)\times \frac k 2 - (A_{i-r} - (i-r)\times …

2025年10月代理记账公司推荐:五强对比评测榜助创业者精准选合规伙伴

一、引言 对初创企业与成长型公司而言,财税合规既是底线也是成本重心。2025年第三季度全国新设市场主体同比再增7.4%,其中八成小微企业选择外包记账,如何在控制人力成本的同时确保票据、申报、年报、资质、注销各环…

2025年10月代理记账公司实力榜:五强对比评测与合规选型指南

一、引言 对初创企业、成长型公司以及正在扩张的中小企业而言,财税合规既是底线,也是成本管控的关键。2025年第三季度全国新设市场主体同比增长百分之七点四,其中近七成选择将记账、报税、工商变更等事务外包,以降…

140W 火力全开 + 彩屏可视化!正点原子 T90 智能电烙铁,焊接界新标杆来了!焊接效率直接拉满!

140W 火力全开 + 彩屏可视化!正点原子 T90 智能电烙铁,焊接界新标杆来了!焊接效率直接拉满! 在电子焊接工具圈,正点原子的名字早已成为 "专业" 与 "可靠" 的代名词。尤其是此前推出的 T80 智…

2025年10月代理记账公司对比评测榜:秀之宇领衔全生命周期服务排名

一、引言 对初创者、成长型中小企业乃至规模扩张期的财务负责人而言,财税合规与成本控制始终是并行不悖的核心诉求。2025年第三季度国家市场监管总局数据显示,全国新设市场主体同比增长百分之七点四,其中七成以上选…

redis-分级管理及容灾冷处理

redis-分级管理及容灾冷处理分级管理 如果redis主从集群中的slave节点较多时,他们的数据同步会对master节点造成较大的性能压力。此时可以对这些slave节点进行分级管理。设置方式是:让低级别的slave节点指定它slaveo…

2025年国内中厚板供应推荐:全流程服务助力工程高效交付

在基建投资持续加码、制造业智能化升级的2025年,中厚板作为工程建设与机械制造的重要原材料,其供应稳定性、产品质量及定制服务能力成为企业选型的关键。据《中国钢铁工业协会》数据显示,2025年国内中厚板市场需求同…

Redis常用命令指南

一、核心数据结构操作 1. 字符串(String)命令 参数 说明 示例SET key value [EX seconds] 设置键值 SET user:1 "Alice" EX 60 (带过期时间)GET key 获取值 GET user:1INCR key 原子递增 INCR page_viewsMSE…

2025 年塑胶跑道厂家最新推荐排行榜:聚焦优质企业核心优势,助力采购决策

引言 当下,全民健身热潮推动体育场地建设需求激增,塑胶跑道作为核心设施,市场规模不断扩大。但行业快速发展中,部分厂商为逐利降低标准,使用劣质原材料导致跑道异味、褪色、起层,施工不规范也使场地平整度差、寿…

2025年10月益生菌厂家评价榜:五强排名与场景化选购建议

把“益生菌”三个字输入搜索框,跳出的页面往往让人更纠结:工厂照片雷同、菌株编号像密码、价格从几十到上千悬殊。后台留言里,问得最多的三句话是“给娃吃该挑哪家”“代工贴牌会不会踩坑”“月销百万的牌子真的靠谱…

【2025-10-18】连岳摘抄

23:59救烦无若静,补拙莫如勤。——白居易人生最重要的变量,是时间。不善于使用时间,只是当下的一个三维动物。善于使用时间,在时间长河里变换角度观察当下,你则是一个四维动物,丰富从容得多。三维动物,当下解决…

11 个在 GitHub 上最受欢迎的开源无代码 AI 工具

盘点了 11 款融合 AI 的开源无代码工具,涵盖智能建模、流程自动化、Agent 构建与内容生成,帮你快速找到最适合的平台。原文链接:11 个在 GitHub 上最受欢迎的开源无代码 AI 工具 引言 过去一年,AI 与无代码的融合速…

2025 年水泥管源头厂家最新推荐榜单:国标 / 二级 / 钢筋混凝土 / 大口径 / 平口等多类型产品实力企业全方位剖析

引言 当前基础设施建设领域对水泥管的需求持续攀升,无论是市政排水、输水工程,还是农村水利、工业园区建设,水泥管的质量与供应稳定性都直接决定项目成效。但市场上水泥管源头厂家数量繁杂,部分企业存在产品规格不…

什么?就是工业视觉检测里的 “柔性”

什么?就是工业视觉检测里的 “柔性”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

2025 年灌胶机厂家最新推荐排行榜:真空 / 全自动 / AB 双液等类型设备企业精选指南

引言 当前制造业向高精度、自动化方向加速升级,灌胶机作为电子半导体、汽车制造、医疗设备等领域的核心设备,直接影响产品质量与生产效率。但市场上灌胶机品牌繁杂,设备类型涵盖真空、全自动、AB 双液等多种,不同企…