结对编程心得

news/2025/10/27 23:15:51/文章来源:https://www.cnblogs.com/yunhehan/p/19170376

电梯调度系统项目文档

项目仓库地址:https://z.gitee.cn/zgca/repos/zgca/elevator_arrange/blob/develop/
队友博客参考:CSDN 博客链接


1. 项目简介

本项目作为《现代软件工程》课程核心大作业,由三人团队采用结对编程形式开发了一套完整的高性能电梯调度系统。系统以 Python 为核心语言,结合 Elevator-Saga 模拟器接口,构建了“优化版调度算法 + Web 可视化监控”的双层架构。

核心目标

多电梯、多楼层、高并发乘客请求场景下,实现:

  • 乘客等待时间最小化
  • 电梯运行效率最大化

架构设计

  • 算法层:专注调度决策,不耦合展示逻辑
  • 监控层:独立拉取数据,实时渲染状态
    → 二者可独立替换,又能高效协同

2. PSP 时间管理(预估 vs 实际)

模块 预计时间 实际时间 差异原因
需求分析 2h 2h 需求清晰,仅需确认接口适配规则,无额外沟通成本
架构与设计 3h 4h 新增“动态分区”与“预判调度”功能,需额外设计分区逻辑与高峰时段判定规则
编码实现 5h 8h 原计划用基础 SCAN 算法,实际优化为“多维度评分派梯”,需实现评分模型与能耗计算
测试调试 2h 8h 发现“高峰时段分区冲突”“乘客等待时间统计偏差”等问题,需针对性修复
重构与优化 3h 6h 为实现“算法与监控解耦”,重构数据交互逻辑(算法传数据 → 监控拉数据)
合并讨论 2h 6h GUI 界面设计方案存在多轮激烈讨论与取舍
提交验收 1h 2h 远程仓库流水线测试需适配环境变量,调试接口兼容性

差异分析总结

  1. “开头第二步”最难:需求看似简单,但架构设计阶段需反复权衡调度策略与可视化呈现方式。
  2. 实现 ≠ 设想:原以为仅需添加判断逻辑,实际开发中频繁遭遇意料之外的边界错误与并发问题。
  3. 持续讨论与迭代:团队成员思维差异带来多元视角,不断推翻并优化原有方案,导致时间超支。

3. 核心架构:松耦合设计

为实现“算法与监控可独立替换”,采用 “数据分离 + 接口标准化” 思路,分两版迭代:

3.1 初版:基础分离(数据暂存)

  • 算法层:监听模拟器事件,将状态暂存于本地字典
  • 监控层:定时读取字典更新界面
  • 问题:监控依赖算法运行,无法独立启动

3.2 优化版:彻底解耦(监控主动拉取)

  • 算法层:仅通过 OptimizedElevatorController 控制电梯,不处理任何展示逻辑
  • 监控层:通过 WebMonitorSystem 每秒轮询服务器,直接拉取原始数据,独立解析与渲染

优势

  • 算法可替换为 FCFS、LOOK 等任意策略
  • 监控可切换为 PyQt5 等其他前端,只需保持 /api/data 接口一致

4. Web 监控系统:可视化 + 实时性

4.1 界面设计(三区布局)

区域 内容说明
电梯状态区 卡片式展示:编号、楼层、方向(↑/↓)、负载(如 3/10)、目标楼层列表,状态颜色标识
统计面板区 实时数据:总呼叫数、完成行程数、平均等待时间、各电梯能耗
系统日志区 倒序事件日志,按 info / warning / error 分色,便于排查问题

4.2 技术实现

  • 后端:Python HTTPServer 提供:
    • / → 返回 HTML 页面
    • /api/data → 返回 JSON 状态数据
  • 前端ElevatorMonitor 类每秒轮询,仅更新变化内容,减少 DOM 操作
  • 交互体验:方向箭头脉冲动画、进度条加载反馈

4.3 MVC 模式落地

层级 职责
Model 从模拟器拉取的原始状态数据
View 动态生成的 HTML 元素
Controller ElevatorMonitor 负责数据处理与视图触发

5. 结对编程:三人协作模式

在传统“驾驶员-导航员”基础上,新增 “审核员” 角色,形成闭环协作:

角色 职责
驾驶员 编码实现(如评分计算)
导航员 把控逻辑(如提醒考虑早高峰场景)
审核员 检查规范与边界(如满载时是否仍派梯)

🔁 每 2 小时轮换角色,确保全员深度参与。

协作亮点

  • ✨ 利用 GPT-5 / 豆包 生成基础框架(如 HTML 结构),节省 50% 编码时间
  • 📝 即时文档同步,避免重复开发
  • 💬 采用 “三明治沟通法”
    肯定成果 → 提出改进(如硬编码问题) → 鼓励收尾

同伴优点

  • 做事非常认真仔细
  • 积极承担任务,非常负责
  • 沟通很舒服

同伴缺点

  • 过度依赖AI
    微信图片_20251027223920_111_379

6. 项目收获与反思

能力提升

  • 🛠️ 熟练使用 Git 进行团队协作开发
  • 🤖 学会精准向 AI 描述需求(如分模块请求建议,而非整体生成)

经验教训

  • 📈 一个较大的项目一定要先自己了解整体架构和逻辑,不能直接完全交给AI

7. 总结

本项目不仅实现了高效调度实时监控,更在 工程思维团队协作 上带来双重成长:

  • 通过多维度评分模型,理解了“场景化设计”的价值;
  • 通过松耦合架构,掌握了“可扩展系统”的构建方法;
  • 通过三人结对编程,很多时候同伴能一下指出自己看不出的问题,深刻体会到“协作共赢”的力量。

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

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

相关文章

关于结对编程的一些感悟

为期一个月的结对编程落下帷幕。 看到其他组的合作,了解到了团队合作的重要性。 助教京哥真的是相当负责,我是个新手,很多问题都请教了助教,助教总是帮助我解决了很多问题。 可惜结对编程没做太好,下面进行项目总…

关联子查询

关联子查询是一种依赖外部查询结果的子查询,它的核心特点是:子查询中会引用外部查询的表或字段,因此会针对外部查询的每一行数据,动态执行一次子查询,形成“内外联动”的关系。 关键特点:依赖外部查询:子查询的…

AI概念

LLM 大型语言模型(Large Language Model)的缩写。是一种通过海量文本数据训练,能够理解和生成人类语言的人工智能系统token AI大模型调用中,模型处理文本的基本单位。各家算法切字逻辑,但是大致一个token约等于一个…

工控modBus TCP, 服务端或客户端, 均可以与PHP 通讯

一. 搭建socket服务器,地址是:192.168.18.83,端口是4444;二. 或TCP网络助手, 地址是:192.168.18.83,端口是:4444;三. 在PHP服务器中, cURL模拟发送POST, 请求参数为: {"a":"b"};四. 请求一次PHP, …

[Mirror] LinuxMirrors: Linux 一键换源项目

[Mirror] LinuxMirrors: Linux 一键换源项目$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 简介1.1 项目地址1.2 官方网站02 更换 Linux 镜像源03 安…

10月27日日记

1.今天学习java 2.明天工程实训 3.Spring 等框架中,依赖注入失败

20232326 2025-2026-1 《网络与系统攻防技术》实验三实验报告

一、实验内容与问题回答 1.1 实验核心内容 (1)使用msfvenom及编码器生成多格式恶意文件,验证编码免杀效果; (2)通过Veil-Evasion工具生成自定义免杀Payload; (3)手动编写C语言加载器执行Shellcode,实现底层免…

20232309 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容 1.1学习内容 1.msfvenom的使用 2.veil的下载和使用 1.2问题回答 1.杀软是如何检测出恶意代码的?特征码检测:通过比对文件或程序的静态特征(如特定字符串、哈希值、代码片段)与病毒库中的已知恶意代码特…

应急响应特洛伊挖矿木马

州弟应急响应|特洛伊挖矿木马 前言 被感染主程序会释放/tmp/随机命名挖矿文件 产生的crontab无法下载与删除 被感染的git程序环境:特洛伊挖矿木马事件排查 还记得我们上一次的挖矿环境吗,上一次算是最简单的挖矿环境…

20232429 马成栋 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容 问题回答: (1)杀软是如何检测出恶意代码的? 1.特征码检测,2.行为分析检测,3.启发式检测。 (2)免杀是做什么? 免杀本质是“让恶意代码绕过杀软检测的技术手段”,但需明确其合法边界。 (3)免杀的…

做题记录 #4

A. P11364 树上查询 (7) 一开始想着直接转 dfn 好处理一个区间的 LCA,因为编号区间可以直接变成区间最大最小 dfn 中最小 dep。但是若是想要维护,很难不上一些笛卡尔树和单调栈。玩一玩想一想发现根本想不到一个性质…

扩散模型

论文:《Denoising Diffusion Probabilistic Models》(DDPM, NeurIPS 2020) 简述: (大白话) 训练阶段:首先是将图片一步步进行加noise,将每一步加入noise生成的像素图片进行去噪,目标是预测噪声;预测阶段:从…

20232303 2025-2026-1 《网络与系统攻防技术》实验三实验报告

20232303 2025-2026-1 《网络与系统攻防技术》实验三实验报告 1. 实验内容 本次实验的名称为免杀原理与实践,通过本部分内容的学习,能够掌握免杀原理与技术,认识到杀软局限性,提高在工作生活中对于恶意软件防范能力…

《程序员修炼之道》阅读笔记2

书里反复强调,程序员不能把学习停留在 “够用就好” 的层面,因为技术行业的迭代速度太快了 —— 今天课堂上教的热门框架,可能几年后就会被更高效的工具替代;现在觉得 “用不上” 的底层原理,说不定哪天就成了解决…

算法分析--分治--1.二分搜索

难题被逐层拆解,每一次的拆解都使它变得更为简单。分而治之揭示了一个重要的事实:从简单做起,一切都不再复杂。 1.1 分治算法 分治 是一种非常常见的算法策略。 分:将整个问题划分为多个小问题。 治:从小问题开始…

衡量模型生成图片质量的指标

FID 是生成图像和真实图像在特征空间中的分布距离。(越小越好)1.FID 假设生成图像和真实图像在特征空间的分布都是高斯分布,然后计算这两个高斯分布的距离。 CLIP是什么?(对比语言图像预训练)它有image Encoder …

代码大全2 第一章 与第二章

看《代码大全 2》前两章,感觉像被人点醒了似的,之前对编程的理解太浅了。第一章直接说透,软件构建根本不是光敲代码就行,它跟前期琢磨需求、设计框架,还有后期测试都绑在一起,做得好不好直接影响软件能不能用久、…