软件工程第二次结对作业
这个作业属于哪个课程 | 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
方法:
-
初始化Mock对象:
- 使用@Mock注解创建ProjectMapper的模拟对象。
- 使用@InjectMocks注解创建ProjectService的实例,并将ProjectMapper的模拟对象注入其中。
- 使用@BeforeEach注解的setUp方法初始化Mock对象,确保每个测试方法在独立的环境中运行。
-
定义模拟行为:
- 使用when方法定义ProjectMapper的模拟行为,返回预设的数据。例如,定义findProjectsByOwner方法返回一个包含特定项目的列表。
-
调用服务层方法:
- 调用ProjectService中的方法,如createProject、findProjectsByOwner、findAllProjects和deleteById。
-
验证结果:
- 使用断言方法验证服务层方法的返回结果是否符合预期。
- 使用verify方法验证ProjectMapper的相应方法是否被正确调用,以及调用的次数和参数是否正确。
主要代码
应对未来测试人员的刁难
- 全面覆盖:
- 确保测试用例覆盖所有可能的情况,包括正常情况、边界条件、异常情况和特殊情况。
- 自动化测试:
- 使用自动化测试工具,确保每次代码变更都能自动运行测试,及时发现潜在的问题。
- 代码审查:
- 定期进行代码审查,确保代码质量和测试用例的完整性。
- 持续集成:
- 使用持续集成工具,如Jenkins、Travis CI等,确保每次提交都能自动构建和测试。
- 文档记录:
- 详细记录测试用例和测试结果,方便后续的复审和维护。
- 异常处理:
- 在代码中增加异常处理逻辑,确保在遇到异常输入时能够优雅地处理,而不是直接崩溃。
代码模块异常及解决方法
1. 数据库连接失败
- 原因:可能是由于数据库服务未启动、网络问题、配置错误等原因导致无法连接到数据库。
- 解决方案:
- 检查数据库服务是否正常运行。
- 确认数据库连接字符串(包括主机名、端口、用户名、密码等)是否正确。
- 检查网络连接,确保服务器能够访问到数据库。
2. API请求超时
- 原因:可能是由于网络延迟、服务器负载过高、请求处理时间过长等原因导致API请求超时。
- 解决方案:
- 增加API请求的超时时间。
- 优化服务器性能,例如使用缓存、减少数据库查询次数等。
- 使用负载均衡技术分散请求压力。
3. 实时通信中断
- 原因:可能是由于网络不稳定、服务器宕机、WebSocket连接关闭等原因导致实时通信中断。
- 解决方案:
- 实现重连机制,当连接断开时自动尝试重新连接。
- 监控网络状态,及时处理网络异常。
- 记录通信日志,分析中断原因并进行优化。
Github代码签入
评价
- 积极态度
- 面对挑战和压力,总是保持积极乐观的心态,从不轻易放弃。
- 团队合作
- 在团队会议和讨论中,总是积极参与,提出有价值的建议,推动项目的顺利进行。
- 责任心强
- 对于分配的任务,总是认真负责,按时保质完成,确保每个环节都能顺利推进。