软工第三次作业

news/2025/10/10 16:37:08/文章来源:https://www.cnblogs.com/IrErV/p/19133351

软工第三次作业 - 结对编程

一、结对信息

  • 姓名1:伊尔番·艾山
  • 学号1:3123004762
  • 姓名2:梁子恒
  • 学号2:312300746
  • GitHub仓库:https://github.com/IrErV123/Primary-Math-Exercise-Generator

二、PSP表格

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

三、设计实现

3.1 需求分析

本项目旨在开发一个小学四则运算题目生成器,主要功能包括:

  1. 生成指定数量的四则运算题目
  2. 支持真分数运算
  3. 避免重复题目
  4. 控制数值范围
  5. 自然语言处理生成题目

3.2 架构设计

采用模块化设计,主要包含以下模块:

  • 题目生成模块:负责生成各类运算题目
  • 分数处理模块:处理分数运算和化简
  • 重复检测模块:确保题目唯一性
  • 输入输出模块:处理命令行参数和文件输出

3.3 核心算法

分数生成算法

def generate_fraction():"""生成真分数"""denominator = random.randint(2, 10)numerator = random.randint(1, denominator - 1)return Fraction(numerator, denominator)

题目去重算法

采用表达式标准化方法,将不同形式但结果相同的表达式识别为重复。

3.4 类图设计

主要类包括:

  • ExerciseGenerator:题目生成器主类
  • FractionHandler:分数处理类
  • ExpressionValidator:表达式验证类

四、测试用例

4.1 单元测试

测试用例1:分数运算正确性

def test_fraction_calculation():# 测试分数加法result = calculate_fraction("1/2 + 1/3")expected = Fraction(5, 6)assert result == expected# 测试分数减法result = calculate_fraction("2/3 - 1/4")expected = Fraction(5, 12)assert result == expected

测试用例2:重复检测

def test_duplicate_detection():expressions = ["1 + 2", "2 + 1", "3 - 1"]unique_expressions = remove_duplicates(expressions)assert len(unique_expressions) == 2

测试用例3:数值范围控制

def test_range_control():exercises = generate_exercises(range_limit=10, count=100)for exercise in exercises:numbers = extract_numbers(exercise)assert all(0 <= num <= 10 for num in numbers)

4.2 集成测试

测试场景1:命令行参数处理

  • 输入:python myapp.py -n 10 -r 20
  • 期望输出:生成10道题目,数值范围不超过20

测试场景2:文件输出功能

  • 输入:指定输出文件路径
  • 期望输出:题目正确写入文件

4.3 性能测试

  • 大数据量测试:生成10000道题目,耗时控制在30秒内
  • 内存使用测试:确保内存占用不超过100MB

五、项目小结

5.1 项目收获

  1. 技术技能提升

    • 掌握了Python分数运算库的使用
    • 学会了表达式解析和评估
    • 提高了算法设计能力
  2. 团队协作经验

    • 学会了Git协作开发流程
    • 提高了代码review的能力
    • 加强了沟通协调能力
  3. 软件工程实践

    • 体验了完整的软件开发生命周期
    • 学会了需求分析和设计文档编写
    • 掌握了单元测试和集成测试方法

5.2 遇到的问题及解决方案

  1. 分数运算精度问题

    • 问题:浮点数运算存在精度误差
    • 解决:使用Python的Fraction类进行精确分数运算
  2. 题目重复检测难题

    • 问题:"1+2"和"2+1"本质相同但形式不同
    • 解决:实现表达式标准化算法,统一表达式格式
  3. 大数据量性能问题

    • 问题:生成大量题目时效率低下
    • 解决:优化算法,使用集合进行快速去重

5.3 改进建议

  1. 功能扩展

    • 增加更多运算类型(乘方、开方等)
    • 支持更复杂的表达式结构
    • 添加图形化用户界面
  2. 性能优化

    • 使用多线程提高生成效率
    • 实现更高效的去重算法
    • 添加缓存机制
  3. 用户体验

    • 增加进度条显示
    • 提供更友好的错误提示
    • 支持批量操作

六、目录结构

Primary-Math-Exercise-Generator/
├── README.md                 # 项目说明文档
├── requirements.txt          # 项目依赖包
├── myapp.py                 # 主程序入口
├── src/                     # 源代码目录
│   ├── __init__.py
│   ├── generator.py         # 题目生成核心模块
│   ├── fraction_handler.py  # 分数处理模块
│   ├── validator.py         # 表达式验证模块
│   └── utils.py            # 工具函数模块
├── tests/                   # 测试代码目录
│   ├── __init__.py
│   ├── test_generator.py    # 生成器测试
│   ├── test_fraction.py     # 分数运算测试
│   └── test_validator.py    # 验证器测试
├── docs/                    # 文档目录
│   ├── design.md           # 设计文档
│   └── api.md              # API文档
├── examples/                # 示例文件
│   ├── Exercises.txt       # 示例题目文件
│   └── Answers.txt         # 示例答案文件
└── .gitignore              # Git忽略文件

七、运行说明

7.1 环境要求

  • Python 3.7+
  • 依赖包:见requirements.txt

7.2 安装步骤

git clone https://github.com/IrErV123/Primary-Math-Exercise-Generator.git
cd Primary-Math-Exercise-Generator
pip install -r requirements.txt

7.3 使用方法

# 生成10道题目,数值范围不超过20
python myapp.py -n 10 -r 20# 生成题目并指定输出文件
python myapp.py -n 50 -r 100 -o exercises.txt

GitHub仓库链接:https://github.com/IrErV123/Primary-Math-Exercise-Generator

完成时间:2025年10月10日

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

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

相关文章

全球化部署几种方案

目录背景跨国混合部署的挑战商城和履约解耦的挑战定时任务。跨系统集成的复杂性。商城和中台分离的架构设计参考资料 背景 跨国混合部署的挑战系统和其他系统可能不在一个国家/地区。 比如把数据采集相关的服务部署到海…

10.WPF布局 - 实践

10.WPF布局 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Co…

066_尚硅谷_运算符优先级

066_尚硅谷_运算符优先级1.运算符优先级

基于MATLAB的路面裂缝检测识别

一、系统架构设计 1. 功能模块划分 graph TDA[图像采集] --> B[预处理模块]B --> C[裂缝检测引擎]C --> D[特征提取]D --> E[分类识别]E --> F[结果可视化]F --> G[数据存储] 2. 硬件配置建议模块 推…

HDU6794:Tokitsukaze and Multiple

实质上是最多能找到多少个连续子段和为 \(p\) 的倍数 太聪明了

当下环境通缩分析

📅 通缩的起点与当前态势 关于这次通缩周期的起点,根据多个宏观经济指标的表现,可以梳理出以下时间线:关键指标持续下行:本次通缩压力是逐步累积的结果。一个非常重要的观察点是生产者价格指数(PPI),它至2025…

使用qt读取系统字体库,并进行英文名称映射

映射函数:// 创建中文字体到英文名称的映射表 QMap<QString, QString> createFontMapping() {QMap<QString, QString> mapping;mapping[QString::fromLocal8Bit("宋体")] = "simsun.ttc&q…

gitlab配置aws的s3作为docker镜像的存储

编辑 /etc/gitlab/gitlab.rb 文件external_url http://192.168.60.118 registry_external_url http://192.168.60.118:5005 gitlab_rails[registry_enabled] = true gitlab_rails[registry_host] = "192.168.60.…

阿克曼函数

点击查看代码 #include <iostream> using namespace std; int ack(int x,int y) {if (x==0){return y + 1;}else if (x > 0 && y == 0){return ack(x - 1, 1);}else if (x > 0 && y > …

shell脚本监控ssl证书到期时间

一、需求 说明:(1)读取域名列表文件。(2)获取域名到期时间,进行告警后邮件提醒。 #!/bin/bash ## 第1步 配置文件 # 颜色定义 RED=\033[0;31m GREEN=\033[0;32m YELLOW=\033[1;33m BLUE=\033[0;34m PURPLE=\033…

AI如何通过卫星图像识别刺猬栖息地

剑桥大学研究人员利用卫星图像和机器学习技术,通过识别黑莓灌木丛来绘制刺猬潜在栖息地地图,为保护这种濒危物种提供创新解决方案。AI如何通过卫星图像识别刺猬栖息地 你不能从太空中直接发现刺猬,但通过寻找黑莓灌…

04-补充mybatis-plus的Service接口

04-补充mybatis-plus的Service接口$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");常用方法查询相关方法以前是我们自己实现的Service接口和方法先在mp给我们…

LeetCode热题100-75、跳跃游戏

LeetCode热题100-75、跳跃游戏给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回…

rust 模块和引用

rust的模块声明有两种方式: 1、mod.rs文件方式 在 2018 年后的版本中已逐渐被新的模块系统取代,Rust 官方文档中已删除对 mod.rs 的介绍,主要因为该功能在 Rust 1.30 版本后被新的模块命名约定替代。 目录结构为: …

moectf2025-reverse-wp

moectf2025-reverse-wp upx 壳是什么?upx是什么?upx可以用来干什么?用自己的upx脱壳 upx -d +文件地址然后就去ida里面编译但是找不到main函数 我们直接shift+F12查看字符串然后点进去鼠标移到这里 按X 然后定位到主…

国标GB28181网页直播平台EasyGBS如何构建智慧社区一体化视频监控方案?

国标GB28181网页直播平台EasyGBS如何构建智慧社区一体化视频监控方案?随着科技的飞速发展,智慧社区的概念逐渐深入人心。智慧社区旨在通过先进的信息技术手段,实现社区的智能化管理和服务,提升居民的生活质量和社区…

完整教程:【论文阅读】纯视觉语言动作(VLA)模型:全面综述

完整教程:【论文阅读】纯视觉语言动作(VLA)模型:全面综述2025-10-10 16:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

TypeScript Declaration Merging(声明合并)使用说明

最近在进行前端开发的时候,为了拓展引用,使用了TS声明合并的特性,完整的了解了一下该特性,特此记录成笔记。 声明合并指在TypeScript里面,编译器将两个或者多个独立的相同名称的声明合并到一起。合并后的定义同时…

第七章 手写数字识别V5

# 优化: # 新建Model类,将神经网络的结构定义、训练流程(前向/后向)和预测逻辑统一封装起来 # 何将权重更新的职责从网络层(Linear)中分离出来,交给优化器(SGD)来完成 # 使用动量梯度下降优化算法(MSGD) # …

关于根据距离列表排序sql

关于根据距离列表排序sql//第一种 根据经纬度排序 $map = "1=1 ";if ($loadCode && $unloadCode) {$map .= " AND load_city_id = $loadCode and unload_city_id = $unloadCode";}…