个人总结------网络安全与软件工程综合实践
姓名:毛敏磊
角色:AI引擎开发、联调
一、回顾
1.1 目标达成
在本次课程实践中,我在以下方面达到了预期目标:
- 掌握RESTful API设计与实现:通过后端ChallengeController的开发,实现了AI对话接口(chatWithAI)和Payload提交接口(submitPayload),完成了前后端的数据交互流程。
- 深入理解Prompt注入攻击原理:通过设计PromptEngine核心算法,实现了validate()验证函数和checkInjectionSuccess()检测函数,深入理解了AI安全领域的关键技术。
- 熟练使用TypeScript进行后端开发:在server/src/engine/promptengine.ts中实现了完整的AI引擎逻辑,包括规则验证、注入检测和响应生成等核心功能。
- 掌握前后端联调技能:完成了前端Angular应用与后端Node.js服务的集成,解决了跨域、数据格式转换等联调问题。
- 学会使用Jest进行单元测试:为PromptEngine编写了测试用例,覆盖了核心函数的各种边界情况。
1.2 存在不足
在以下方面存在不足,需要改进:
- 自动化测试覆盖率不足:虽然编写了单元测试,但覆盖率仅达到60%,未能覆盖所有边缘场景,主要原因是时间管理不当,后期专注于功能开发而忽视了测试完善。
- 前端开发能力有待提升:作为后端开发人员,对Angular框架的理解不够深入,在联调过程中遇到了较多前端技术问题,影响了联调效率。
1.3 改进计划
针对上述不足,制定以下改进措施:
- 学习Jest高级测试技巧,提高测试覆盖率至80%以上,重点关注异常情况和边界条件的测试。
- 系统学习Angular框架,掌握组件化开发和RxJS响应式编程,提升前后端联调效率。
1.4 印象深刻的作业
最让我印象深刻的是AI引擎开发阶段:
挑战性:PromptEngine需要处理复杂的规则匹配和注入检测逻辑,涉及多模式匹配、字符串处理和异步响应生成等技术难点。
学习收获:深入理解了AI安全领域的Prompt注入攻击原理,掌握了TypeScript异步编程技巧和单元测试方法。
解决方案:通过查阅安全领域文献和与团队讨论,设计了基于模式匹配的验证算法,并使用Jest进行全面测试确保算法正确性。
【人机协作】
- 使用工具:ChatGPT、GitHub Copilot
- AI用途:帮助总结目标达成情况,生成测试用例模板,优化代码结构
- 采纳建议:AI建议使用策略模式重构PromptEngine的规则匹配逻辑,提高了代码可扩展性
- 拒绝建议:AI建议使用正则表达式进行所有规则匹配,但考虑到性能和可读性,我选择使用字符串匹配结合缓存机制
- 辅助效果评分:4分。AI在代码优化和测试设计方面提供了很好的思路,但在理解项目业务逻辑方面还有提升空间
二、耕耘
2.1 时间与产出统计
| 项目 | 统计数据 |
|---|---|
| 总学习时间 | 约120小时(12周,每周约10小时) |
| 代码量(LOC) | 约2500行(TypeScript) |
| 注释率 | 约15% |
| 代码提交次数 | 38次 |
2.2 关键产出物
- 代码仓库:GitHub - AI安全挑战插件后端服务(server/目录)
- 核心模块:PromptEngine(engine/promptengine.ts)- 负责Prompt注入检测和AI响应生成
- API接口:ChallengeController(controllers/challengecontroller.ts)- 提供AI对话和Payload提交接口
- 测试文档:Jest单元测试用例(test/engine/promptengine.test.ts)
- 技术文档:API接口文档和架构设计说明
【人机协作】
- 使用工具:ChatGPT、GitHub Copilot
- AI用途:生成代码统计表格格式,优化文档结构
- 采纳建议:AI建议使用表格展示数据,提高可读性
- 拒绝建议:AI建议生成复杂的折线图代码,但考虑到文档简洁性,选择使用表格
- 辅助效果评分:4分。AI在文档格式优化方面提供了很好的建议
三、收获
3.1 量化成果
- 用户量:团队内部测试使用,约30人次参与测试
- 代码影响力:项目代码已提交至团队仓库,作为AI安全教学案例使用
- 项目获奖:团队项目获得课程优秀项目提名
3.2 技能提升
技术能力:
- TypeScript后端开发:熟练使用Node.js + Express框架,掌握异步编程和Promise模式
- RESTful API设计:设计了符合REST规范的API接口,支持JSON格式数据交互
- 单元测试:使用Jest编写测试用例,理解测试驱动开发理念
- Git版本控制:熟练使用Git分支策略,参与代码审查和Merge Request流程
软技能:
- 敏捷会议参与:通过每日站会和Sprint计划会议,提高了团队协作效率
- 代码审查能力:参与团队代码审查,学会了如何给出建设性反馈
- 技术文档编写:编写API文档和架构说明,提高了技术写作能力
3.3 使用的软件/工具
- 开发工具:Visual Studio Code、Git、GitHub
- 框架技术:Node.js、Express、TypeScript、Angular
- 测试工具:Jest、Postman
- 协作工具:GitHub Issues、Discord、Notion
【人机协作】
- 使用工具:ChatGPT
- AI用途:帮助识别技能提升点,提供技能分类建议
- 采纳建议:AI建议将技能分为技术能力和软技能两类,使总结更加清晰
- 拒绝建议:AI建议添加更多技能条目,但我认为当前的分类已经足够全面
- 辅助效果评分:4分。AI帮助我系统地梳理了技能提升情况
四、结构化的理解
4.1 知识(Knowledge)
- MVC架构:来源于课程学习,理解了Model-View-Controller的分层设计思想
- RESTful API设计原则:来源于课程和项目实践,掌握了资源定位、HTTP方法使用等原则
- Prompt注入攻击原理:来源于安全课程和项目实践,理解了AI系统的安全漏洞类型
4.2 理解(Comprehension)
- 持续集成:是一种软件开发实践,通过自动化构建和测试,确保代码变更能快速集成到主干分支,提高开发效率和代码质量。在项目中,我们通过GitHub Actions实现了CI流程。
- 单元测试:是对软件中最小可测试单元的验证,通过隔离测试确保每个模块的正确性。在项目中,我为PromptEngine编写了单元测试,覆盖核心功能。
4.3 应用(Application)
-
使用Git分支策略管理多人协作:在团队项目中,我们采用main分支作为稳定分支,每个功能开发创建feature分支,完成后通过Pull Request合并。具体步骤:
git checkout -b feature/prompt-engine- 开发功能
git push origin feature/prompt-engine- 创建PR并进行代码审查
- 合并到main分支
-
使用Jest进行单元测试:为PromptEngine的validate()和checkInjectionSuccess()函数编写测试用例,覆盖正常输入、边界条件和异常情况。
4.4 分析(Analysis)
问题:PromptEngine的规则匹配性能瓶颈
成因拆解:
- 规则数量较多时,线性匹配效率低
- 每次请求都重新解析规则,没有缓存机制
- 字符串匹配算法复杂度较高
解决方案:
- 使用Trie树优化规则匹配,将O(n*m)复杂度降为O(m)
- 引入规则缓存机制,避免重复解析
- 使用正则表达式预编译提高匹配效率
4.5 综合(Synthesis)
在项目管理中,我使用WBS(工作分解结构)方法将AI引擎开发任务分解为以下子任务:
- 需求分析与设计(2天)
- PromptEngine核心算法实现(5天)
- API接口开发(3天)
- 单元测试编写(2天)
- 前后端联调(3天)
通过这种方式,将复杂的开发任务分解为可管理的子任务,便于进度跟踪和责任分配。
4.6 评价(Evaluation)
对比对象:同类AI安全挑战平台(如Hack The Box的AI挑战模块)
优势:
- 规则匹配算法效率较高,支持实时检测
- 前后端架构清晰,易于扩展新的挑战类型
- 代码结构良好,具有较好的可维护性
不足:
- UI交互较为简单,用户体验有待提升
- 缺少详细的文档和使用教程
感受:通过对比分析,我认识到在保证核心功能的同时,用户体验和文档完善也是项目成功的重要因素。
【人机协作】
- 使用工具:ChatGPT
- AI用途:提供布鲁姆分类法的示例,帮助理解各层次的要求
- 采纳建议:AI建议按照布鲁姆分类法的六个层次组织内容,使总结更加结构化
- 拒绝建议:AI提供的部分示例与我的实际经历不符,我根据自己的项目经验进行了修改
- 辅助效果评分:4分。AI帮助我理解了布鲁姆分类法的框架,但需要结合实际经验进行调整
五、属于我们的人月神话
经验一:需求频繁变更的应对
问题描述:项目初期需求变更频繁,导致开发进度延迟,代码返工率较高。
解决方案:引入需求冻结期机制,在每个Sprint开始前确定需求范围,Sprint期间不接受新需求,确保团队专注于当前任务。
实例佐证:引入需求冻结期后,代码返工率从40%下降到15%,开发效率显著提升。
经验二:跨团队联调的沟通
问题描述:前后端联调时,由于接口定义不明确,导致联调过程中出现大量沟通成本。
解决方案:在联调前编写详细的API接口文档,明确请求参数、响应格式和错误码定义,使用Postman进行接口测试。
实例佐证:通过提前定义接口文档,联调时间从预计的5天缩短到2天。
【人机协作】
- 使用工具:ChatGPT
- AI用途:提供"人月神话"相关的经典案例参考
- 采纳建议:AI建议结合具体实例说明经验,使总结更有说服力
- 拒绝建议:AI建议引用《人月神话》中的具体章节,但我认为直接结合团队实际经验更有价值
- 辅助效果评分:3分。AI提供的案例参考有一定帮助,但需要结合实际情况进行迁移
六、对团队的分析
6.1 团队发展阶段
我们的团队经历了四个阶段:
形成阶段
团队成员初次组队,进行分工讨论,确立了Git工作流和代码规范。我负责AI引擎开发模块。
磨合阶段
在PromptEngine规则阈值设置上产生争议,有的成员认为应该使用严格规则,有的认为应该宽松。最终通过分析测试数据,使用ROC曲线确定了最优阈值。
规范阶段
制定了代码审查清单,要求每次PR必须包含测试用例和文档更新,确保代码质量。
创造阶段
团队自主设计了混合水印方案,应对"复述-翻译循环攻击",展现了创新能力。
6.2 是否达到"创造"阶段
是。团队在项目后期展现了创造阶段的特征,自主设计了针对AI攻击的防御方案,体现了团队的创新能力和协作水平。
【人机协作】
- 使用工具:ChatGPT
- AI用途:帮助分析团队阶段特征
- 采纳建议:AI建议按照形成、磨合、规范、创造四个阶段进行分析
- 拒绝建议:AI对团队阶段的归类不完全符合我们的实际情况,我根据团队真实经历进行了调整
- 辅助效果评分:3分。AI提供了分析框架,但需要根据实际情况进行调整
七、证明学会了软件工程
7.1 研发符合用户需求的软件
用户调研记录:通过问卷收集了30位同学的反馈,主要需求包括:
- 希望有清晰的挑战说明
- 需要实时反馈攻击是否成功
- 希望有难度分级
真实用户反馈:某同学试用后建议增加批量检测功能,我们在后续迭代中进行了实现。
7.2 通过软件流程按时发布软件
迭代计划:采用Scrum敏捷开发方法,共进行3个Sprint:
- Sprint 1(2周):需求分析和架构设计
- Sprint 2(3周):核心功能开发
- Sprint 3(2周):测试和优化
版本发布:v1.0(基础功能)、v1.1(新增批量检测)
7.3 软件可维护和可继续发展
- 代码规范:制定了TypeScript代码规范文档,包含命名规范、代码格式、注释要求等
- 单元测试覆盖率:核心模块测试覆盖率达到65%,计划后续提升至80%
- API文档:使用Swagger生成了在线API文档,便于团队协作和后续维护
7.4 自评
- 掌握理论:学会了WBS任务分解、敏捷开发流程、RESTful API设计等理论知识
- 使用工具:熟练使用Git、Jest、Postman等工具
- 工程能力:完成了从需求分析到部署的全流程,具备独立开发和团队协作能力
【人机协作】
- 使用工具:ChatGPT、GitHub Copilot
- AI用途:协助生成测试用例和文档模板
- 采纳建议:AI建议使用Swagger生成API文档,提高了文档的规范性
- 拒绝建议:AI生成的测试用例部分不符合实际业务逻辑,需要进行修改
- 辅助效果评分:4分。AI在文档和测试方面提供了很好的辅助
八、建议
8.1 对下一届学生
- 问题:Git基础薄弱导致协作冲突
- 建议:尽早学习Git基础操作和分支策略,熟悉Pull Request流程
8.2 对大一的自己
- 问题:算法基础不够扎实
- 建议:重视数据结构和算法课程,多做编程练习,夯实基础
8.3 对课程改进
- 问题:缺少真实客户需求模拟
- 建议:增加真实客户需求模拟环节,让学生体验从需求分析到交付的完整流程
【人机协作】
- 使用工具:ChatGPT
- AI用途:提供建议方向
- 采纳建议:AI建议分对象提出建议,结构更清晰
- 拒绝建议:AI建议增加"对老师的建议",但我认为应聚焦于学生和课程改进
- 辅助效果评分:4分。AI帮助我组织建议结构,但具体内容需要结合实际经验