软件工程第二次结对作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281
这个作业的目标 实现ProjectPartner
学号姓名 102201538黄志梁
结对成员学号姓名 102201531周炳辉
Github仓库地址 https://github.com/greatpeace39/emojifight

成员分工

黄志梁 周炳辉
主要功能实现 页面优化
前端功能后端功能开发 模块测试
网页功能开发 博客撰写
结对成员学号姓名 102201531周炳辉

PSP表格

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

解题思路描述与设计实现说明

代码实现思路,文字描述

项目发布

  • 功能:用户可以发布新的项目,包括项目名称、描述、所需技能等。
  • 实现思路
    • 前端提供项目发布表单,用户填写相关信息。
    • 前端将项目数据发送到后端API。
    • 后端验证数据的有效性,如项目名称是否为空、描述是否超过字数限制等。
    • 将项目信息保存到数据库中,关联发布者的用户ID。
    • 返回项目发布成功或失败的响应。

项目搜索

  • 功能:用户可以搜索和浏览其他用户发布的项目。
  • 实现思路
    • 前端提供项目搜索功能,用户可以输入关键词进行搜索。
    • 前端将搜索请求发送到后端API。
    • 后端查询数据库,根据关键词匹配项目信息。
    • 返回匹配的项目列表给前端。
    • 前端展示项目列表,用户可以点击查看项目详情。

项目加入

  • 功能:用户可以申请加入感兴趣的项目。
  • 实现思路
    • 前端提供项目详情页面,显示项目信息和成员列表。
    • 用户点击“加入项目”按钮,前端发送请求到后端API。
    • 后端验证用户是否有权限加入该项目。
    • 更新数据库中的项目成员列表,添加用户ID。
    • 返回加入成功或失败的响应。

实时通信模块

  • 功能:项目成员之间可以进行实时聊天,讨论项目进展。
  • 实现思路
    • 使用WebSocket建立前端和后端的实时连接。
    • 前端提供聊天界面,用户可以发送和接收消息。
    • 前端将发送的消息通过WebSocket发送到后端。
    • 后端将消息广播给所有项目成员。
    • 前端接收消息并显示在聊天界面中。

项目管理模块

  • 功能:项目负责人可以设置项目里程碑,跟踪项目进度。
  • 实现思路
    • 前端提供项目管理页面,显示项目里程碑和当前进度。
    • 项目负责人可以添加、编辑和删除里程碑。
    • 前端将里程碑数据发送到后端API。
    • 后端验证数据的有效性,更新数据库中的项目里程碑信息。
    • 返回操作成功或失败的响应。

安全与隐私保护

  • 功能:确保用户数据的安全性和隐私保护。
  • 实现思路
    • 使用HTTPS协议,确保数据传输的安全性。
    • 对敏感数据(如密码)进行加密存储。
    • 实现用户权限管理,确保只有授权用户才能访问和修改数据。
    • 记录操作日志,监控异常行为。

关键代码

控制器代码实现

服务端代码实现

持久层代码实现

流程图

目录说明和使用说明


使用说明见Github仓库中的README

单元测试

测试工具及方法

工具:JUnit 5、Mockito
方法:

  1. 初始化Mock对象

    • 使用@Mock注解创建ProjectMapper的模拟对象。
    • 使用@InjectMocks注解创建ProjectService的实例,并将ProjectMapper的模拟对象注入其中。
    • 使用@BeforeEach注解的setUp方法初始化Mock对象,确保每个测试方法在独立的环境中运行。
  2. 定义模拟行为

    • 使用when方法定义ProjectMapper的模拟行为,返回预设的数据。例如,定义findProjectsByOwner方法返回一个包含特定项目的列表。
  3. 调用服务层方法

    • 调用ProjectService中的方法,如createProject、findProjectsByOwner、findAllProjects和deleteById。
  4. 验证结果

    • 使用断言方法验证服务层方法的返回结果是否符合预期。
    • 使用verify方法验证ProjectMapper的相应方法是否被正确调用,以及调用的次数和参数是否正确。

主要代码

应对未来测试人员的刁难

  1. 全面覆盖
    • 确保测试用例覆盖所有可能的情况,包括正常情况、边界条件、异常情况和特殊情况。
  2. 自动化测试
    • 使用自动化测试工具,确保每次代码变更都能自动运行测试,及时发现潜在的问题。
  3. 代码审查
    • 定期进行代码审查,确保代码质量和测试用例的完整性。
  4. 持续集成
    • 使用持续集成工具,如Jenkins、Travis CI等,确保每次提交都能自动构建和测试。
  5. 文档记录
    • 详细记录测试用例和测试结果,方便后续的复审和维护。
  6. 异常处理
    • 在代码中增加异常处理逻辑,确保在遇到异常输入时能够优雅地处理,而不是直接崩溃。

代码模块异常及解决方法

1. 数据库连接失败

  • 原因:可能是由于数据库服务未启动、网络问题、配置错误等原因导致无法连接到数据库。
  • 解决方案
    • 检查数据库服务是否正常运行。
    • 确认数据库连接字符串(包括主机名、端口、用户名、密码等)是否正确。
    • 检查网络连接,确保服务器能够访问到数据库。

2. API请求超时

  • 原因:可能是由于网络延迟、服务器负载过高、请求处理时间过长等原因导致API请求超时。
  • 解决方案
    • 增加API请求的超时时间。
    • 优化服务器性能,例如使用缓存、减少数据库查询次数等。
    • 使用负载均衡技术分散请求压力。

3. 实时通信中断

  • 原因:可能是由于网络不稳定、服务器宕机、WebSocket连接关闭等原因导致实时通信中断。
  • 解决方案
    • 实现重连机制,当连接断开时自动尝试重新连接。
    • 监控网络状态,及时处理网络异常。
    • 记录通信日志,分析中断原因并进行优化。

Github代码签入

评价

  1. 积极态度
    • 面对挑战和压力,总是保持积极乐观的心态,从不轻易放弃。
  2. 团队合作
    • 在团队会议和讨论中,总是积极参与,提出有价值的建议,推动项目的顺利进行。
  3. 责任心强
    • 对于分配的任务,总是认真负责,按时保质完成,确保每个环节都能顺利推进。
posted @ 2024-10-10 22:10  spicy_pig  阅读(12)  评论(0编辑  收藏  举报