114
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2025福大软件工程实践W班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
| 这个作业的目标 | 回顾课程全生命周期、总结个人技术突破、深度思考软件开发模式 |
| 其他参考文献 | 《敏捷软件开发:原则、模式与实践》 《软件工程:实践者的研究方法》 |
尝试解答的“坑”:
起初,我编写了一个如 assert(parse("奶茶20元") == {"category":"餐饮", "amount":20}) 的测试用例。结果发现,AI可能返回 {"category":"饮品", "amount":20}。在传统框架下,这被判定为“失败”,但实际上AI的理解在业务上是可接受的。我的测试框架在频繁“误报”中失效。
继续分析的具体步骤:
{"奶茶","咖啡","饮品"} 均映射为 "餐饮" 大类。测试断言从严格的相等,变为“检查结果是否在可接受集合内”。新的具体问题:
尝试解答时的具体困境:
在V1.0版本,我在集成阶段报告了47个Bug。其中超过30个是“接口字段缺失/命名不一致”、“未处理空数组”等低级契约问题。修复它们花了3天,重新测试又花2天,项目延期,团队弥漫着“都是测试太慢”的抱怨。
继续分析的具体行动:
新的具体问题:
总结的具象化成长:
我从一个仅会执行测试用例、在终点线挥舞红旗的裁判,转变为一个在起跑线就与队员一起检查装备(设计评审)、在训练中提供标准靶子(契约Mock)、并通过实时数据看板(质量状态)服务整个团队的质量工程师。我的工具从单一的测试脚本,扩展为契约文档、自动化Mock、共享测试工具和可视化看板这一套组合体系。
1. 需求阶段:获得“翻译与提问”的能力
最大的收获是意识到需求不是被给予的,而是被发掘和定义的。我学会了用“业务目标五问法”追溯表面需求背后的真实问题。例如,当产品提出“需要一个更精准的记账分类AI”时,通过提问我们明确其核心痛点是“用户因分类不准而放弃应用”,从而将需求重点从“提升算法精度”修正为“在分类不准时提供流畅的纠错体验”。这让我深刻理解,明确一个问题的边界,比急于寻找解决方案更重要。
2. 设计阶段:理解“文档即契约”的工程意义
我过去认为设计文档是“参考资料”。在实践中,我最大的收获是认识到清晰的设计文档(特别是API契约)是一个具有约束力的多方协议,是后续所有并行工作的基石。在一次因接口字段歧义导致的重大返工后,我们强制推行了使用OpenAPI规范编写契约,并通过工具自动生成Mock Server和客户端桩代码。这使前后端、测试得以在无实际代码时并行工作,将设计阶段的歧义消灭在编码之前。
3. 实现阶段:掌握“为可测性而设计”的实践
收获最大的是 “可测试性”应作为编码时的核心设计考量之一。例如,在实现记账服务时,我会有意识地将“AI模型调用”、“业务逻辑处理”、“数据持久化”三者严格分离。通过依赖注入,在测试时可以将不稳定的AI组件和数据库替换为Mock。这使得单元测试可以快速、独立地运行核心逻辑。我认识到,易于测试的代码,其模块化、松耦合的程度也更高,本身就是更健壮的代码。
4. 测试阶段:构建“分层评估与防护”体系
面对AI系统的不确定性,我最大的能力提升是 从“确定性断言”思维,转变为“分层评估与监控”的体系构建思维。我不再追求单个测试用例的绝对通过,而是建立了:单元测试层(验证确定性逻辑)、集成契约层(验证服务间约定)、统计评估层(用黄金数据集评估AI效果)、混沌实验层(验证系统韧性)。测试活动从“找Bug”演变为为系统不同层面的质量特性提供持续、量化的证据。
5. 发布阶段:建立“发布即开始”的运维视角
最重要的认知转变是:代码部署上线并非终点,而是真实价值验证和持续优化的起点。我学会了在发布前就必须规划好“可观测性”方案:在关键链路上埋点,定义核心业务指标(如“记账成功率”)、性能指标和错误告警。首次发布后,我们通过监控发现,凌晨时段“扫码记账”的失败率异常高,经排查是网络依赖服务不稳定,从而快速增加了重试机制和降级方案。这让我深刻体会到,没有度量与监控的发布,无异于在黑暗中航行。
总结而言,“做中学”让我领悟到,软件工程的核心知识点并非孤立存在。它们贯穿于从精准定义问题、到用契约锁定设计、为实现可测性编码、建立分层质量防护、直至最终通过数据驱动持续优化的完整闭环中。每个阶段的关键能力,都是确保这个闭环能够可靠、高效运转的必需齿轮。
个人项目
在个人项目中,我主要专注于学习C++后端与前端开发的基础知识。虽然最终没有在团队项目中使用C++,但这个过程让我:
1.理解了后端开发的基本概念(HTTP协议、数据库操作、API设计等)
2.培养了自主学习的能力
3.为后续学习其他技术栈打下了基础
团队项目
在团队项目中,我担任测试的工作,这让我:
1.理解了团队协作的重要性
1.1每个人都有自己的专长和角色
1.2有效的沟通是团队成功的关键
1.3文档和规范的重要性:清晰的接口文档让前后端协作更顺畅
2.体验了真实的开发流程:
1.从需求分析到最终上线的完整流程
2.版本控制和代码管理(Git)
3.问题跟踪和任务分配
核心心得:
软件工程,本质上是一门关于多人协作以持续、可靠地构建并维护复杂系统的学科。个人项目教会我独立解决问题的韧性;结对编程让我深刻体验到实时沟通、即时反馈和共同所有权的重要性;而团队项目则像一场全景模拟,让我真正理解了从需求到运维的全生命周期中,规范、契约、透明度和可观测性是如何成为维系多人协作、降低认知负荷、保障系统稳定的基石。最大的转变是心态:从一个只想写好自己代码的工匠,成长为一个关心价值流动、关注团队效能、守护系统健康的工程师。
目标1:职业道德与社会影响理解【85/100】
目标2:需求分析与建模能力【90/100】
目标3:全过程开发与设计能力【88/100】
目标4:技术评测与创新设计能力【87/100】
目标5:规范文档与交流能力【89/100】
目标6:团队协作与组织能力【90/100】
目标7:项目管理初步能力【75/100】
概述:微信小程序自动化集成测试框架是针对大学生个人记账小程序的组件交互、数据流、API接口进行全面验证的技术方案。作为连接测试工程师,我选择miniprogram-automator作为核心技术,因为它能模拟真实用户操作,验证小程序各模块间的数据流和状态一致性。技术难点在于异步操作同步、页面跳转时机控制、微信API模拟以及测试环境与生产环境的隔离。
1.1 项目简介
我们团队开发了一个微信小程序记账应用,主要功能包括:
记账功能:用户可以记录收入和支出
分类管理:支持自定义分类,区分收入和支出
统计分析:提供图表展示,帮助用户了解消费情况
AI分析:集成AI服务,提供智能记账建议和消费分析
储蓄目标:用户可以设置月度或年度储蓄目标
1.2 主要技术栈
后端:Spring Boot 3.5.7, Java 17, MySQL, JPA
前端:微信小程序
AI服务:支持多个AI服务提供商(Groq、OpenRouter、智谱AI等)
部署:HTTPS配置
1.3开发过程中的关键决策
技术栈选择:
选择Spring Boot而非C++,考虑到快速开发和团队技术栈匹配
选择MySQL作为数据库,考虑到数据一致性和团队熟悉度
架构设计:
采用RESTful API设计,前后端分离
使用JPA进行数据库操作,提高开发效率
统一的异常处理和响应格式
AI服务集成:
设计统一的AI服务接口,支持多个服务提供商
实现服务提供商的动态切换,提高系统的灵活性
1.4遇到的挑战和解决方案
前后端连接问题:
1.挑战:前端调用后端API经常失败
解决方案:建立测试接口,编写详细的测试文档,配置CORS
多环境配置:
2.挑战:开发环境和生产环境的配置差异
解决方案:使用Spring Boot的profile机制,建立配置文档
AI服务稳定性:
3.挑战:不同AI服务提供商的响应格式和错误处理不同
解决方案:设计统一的接口,实现适配器模式,统一错误处理
我们团队采用敏捷开发模式,主要体现在:
迭代开发:分5个短周期(1-2周/迭代)
日常实践:
优点:
缺点:
对我们项目的影响:
三种模式对比:
选择建议:
实践经验:
给类似项目的建议:
总结:
我们项目的敏捷实践基本成功,帮助我们在有限时间内交付了可用的记账小程序。关键在于保持灵活性和持续改进,而不是死板遵循流程。