《PopQuiz项目最终报告》
一、项目概述
PopQuiz 项目旨在利用人工智能技术,针对任何内容快速生成智能小测验,以简便的方式检验听众是否专注于演讲内容。该项目涵盖了前端与后端的开发,提供了丰富的功能,支持用户进行登录注册、课程管理、演讲操作、题目创建与作答、文档上传以及评论等操作。
二、项目背景
在教育和培训场景中,及时了解听众对内容的理解和关注程度至关重大。传统的测验方式往往效率低下且缺乏灵活性,PopQuiz 项目应运而生,借助 AI 技术实现快速、智能的小测验生成,为教育者和组织者提供了便捷的工具。
三、项目目标
- 提供便捷的用户体验:实现简单易用的登录注册流程,方便用户快速进入系统。
- 支持多样化的课程和演讲管理:允许组织者(可以是任何人)创建课程和演讲,听众能够轻松加入或退出课程。
- 智能生成题目:结合演讲文档和语音,利用 AI 技术自动生成相关题目。
- 实时交互与反馈:支持演讲者手动创建题目,听众能够实时作答并查看结果,同时提供评论功能促进交流。
- 数据统计与分析:为教师和学生提供统计数据,协助他们了解学习情况。
四、项目功能实现
(一)用户管理
- 登录注册:用户可以通过注册账号并登录系统,获取唯一的用户 ID。
- 用户角色判断:根据用户与演讲的关系,判断用户是学生、演讲者还是组织者。
(二)课程与演讲管理
- 课程操作:组织者可以创建课程,学生可以加入或退出课程。
- 演讲创建:组织者能够新建演讲,为演讲设置相关信息。
- 文档上传:支持上传演讲的 PDF 和 PPT 文件,以及音频文件。
(三)题目管理
- 手动创建题目:演讲者在演讲过程中可以手动创建题目,设置题目内容、选项和答案。
- AI 生成题目:系统根据演讲的录音、PDF 和 PPT 文本,利用 AI 技术自动生成题目。
(四)作答与反馈
- 学生作答:学生可以在规定时间内对题目进行作答。
- 结果查看:作答结束后,学生能够查看正确答案和自己的作答结果。
(五)评论功能
- 演讲评论:用户可以对演讲进行评论,促进交流和反馈。
- 题目评论:用户可以对题目进行评论,分享自己的见解和疑问。
(六)数据统计
- 教师统计:教师可以查看学生的作答情况、正确率等统计数据。
- 学生统计:学生可以了解自己的学习情况,如答对题目数量、正确率等。
五、项目架构
(一)前端架构
采用 React 框架构建用户界面,使用 Ant Design 组件库提供美观、易用的界面设计。通过 jotai进行状态管理,实现数据的共享和交互。前端与后端通过 API 进行通信,使用 $fetch 进行数据请求。
(二)后端架构
后端采用 Java 语言开发,使用 Spring Boot 框架搭建项目。通过 MyBatis 实现数据库操作,与 MySQL 数据库进行交互。利用 OpenAI 客户端调用 AI 模型,实现题目生成功能。
六、项目测试
(一)测试概述
项目进行了较为全面的单元测试,覆盖了多个核心控制器,包括 CommentController、QuestionController、UserController 等。通过使用 JUnit 5 和 Mockito 框架,模拟了不同的业务场景,确保了各个功能模块的正确性和稳定性。
(二)测试用例举例
1. 评论控制器测试(CommentControllerTest)
测试了用户添加问题评论成功的情况,模拟了插入评论到数据库的过程,并验证了返回结果和方法调用次数。
// 测试添加问题评论成功的情况
@Test
public void testAddQueCommentSuccess() {
// 创建一个 CreateQueCommentRequest 对象,并设置问题ID、用户ID和评论内容
CreateQueCommentRequest commentRequest = new CreateQueCommentRequest();
commentRequest.setQuestion_id(1);
commentRequest.setUser_id(1);
commentRequest.setComment("Test comment");
// 创建一个 Question_comments 对象,并设置相应的属性
Question_comments questionComments = new Question_comments();
questionComments.setQuestion_id(commentRequest.getQuestion_id());
questionComments.setUser_id(commentRequest.getUser_id());
questionComments.setComment(commentRequest.getComment());
// 模拟插入成功后自动生成的ID
int generatedId = 1;
questionComments.setId(generatedId);
// 模拟 CommentMapper 的 insertQueComment 方法返回 1,表明插入成功
when(commentMapper.insertQueComment(any(Question_comments.class))).thenAnswer(invocation -> {
Question_comments argComments = invocation.getArgument(0);
argComments.setId(generatedId); // 模拟 MyBatis 自动填充 id
return 1;
});
// 调用 CommentController 的 addQueComment 方法添加评论,并获取返回结果
int result = commentController.addQueComment(commentRequest);
// 验证返回的结果是否为插入后生成的ID
assertEquals(generatedId, result);
// 验证 CommentMapper 的 insertQueComment 方法是否被调用了一次
verify(commentMapper, times(1)).insertQueComment(any(Question_comments.class));
}
2. 用户控制器测试(UserControllerTest)
测试了用户既是学生又是演讲者的边界情况,模拟了数据库查询,验证了用户类型判断的结果和方法调用次数。
// 测试用户既是学生又是演讲者的情况(边界情况)
@Test
void testGetTypeofUser_StudentAndSpeaker() {
int userId = 1;
int speechId = 1;
Course_listener courseListener = new Course_listener();
courseListener.setId(1);
courseListener.setCourse_id(1);
courseListener.setUser_id(userId);
Speech speech = new Speech();
speech.setId(1);
speech.setTitle("Test Speech");
speech.setSpeaker_id(userId);
speech.setCourse_id(1);
when(userMapper.findCour_Listener(userId, speechId)).thenReturn(courseListener);
when(userMapper.findCourseById(userId, speechId)).thenReturn(null);
when(userMapper.findSpeechById(userId, speechId)).thenReturn(speech);
int result = userController.GetTypeofUser(userId, speechId);
// 根据业务逻辑,优先判断为学生
assertEquals(1, result);
verify(userMapper, times(1)).findCour_Listener(userId, speechId);
verify(userMapper, times(1)).findCourseById(userId, speechId);
verify(userMapper, times(1)).findSpeechById(userId, speechId);
}
(三)测试覆盖范围与局限性
目前的测试主要聚焦在控制器层的单元测试,对业务逻辑和数据库交互进行了必定程度的验证。不过,测试覆盖范围仍有提升空间,例如可以增加对服务层和数据访问层的集成测试,以确保各个组件之间的协作正常。此外,对于一些复杂的业务场景和异常情况,可能需要进一步完善测试用例。
七、项目优势
- 智能化题目生成:利用 AI 技术根据演讲内容自动生成题目,提高了出题效率和准确性。
- 实时交互性:支持演讲者和听众的实时交互,增强了学习的趣味性和参与度。
- 数据统计与分析:为教师和学生提供详细的统计数据,有助于了解学习情况,优化教学策略。
- 多文件支持:支持上传 PDF、PPT 和音频文件,方便用户整理和利用演讲资料。
八、项目挑战与解决方案
(一)AI 题目生成准确性
- 挑战:AI 生成的题目可能与已有题目重复,或者不符合要求。
- 解决方案:在生成题目时,过滤掉与已有题目类似的问题,并设置严格的题目生成规则,确保题目质量。
(二)文件处理与解析
- 挑战:不同格式的文件(如 PDF、PPT)需要进行解析,提取文本内容。
- 解决方案:使用 Apache POI 等工具对 PPT 文件进行解析,对于 PDF 文件可以使用第三方库进行文本提取。
(三)实时性要求
- 挑战:演讲过程中需要实时进行语音转文字和题目生成,对系统的性能和响应速度提出了较高要求。
- 解决方案:采用异步处理和缓存技术,优化系统性能,提高响应速度。
九、项目未来展望
- 扩展 AI 功能:进一步优化 AI 题目生成算法,提高题目的多样性和难度层次。
- 增加社交功能:支持用户之间的互动和交流,如小组讨论、排行榜等。
- 多语言支持:支持多种语言,扩大项目的应用范围。
- 移动端适配:开发移动端应用,方便用户在移动设备上使用。
十、总结
我们的PopQuiz 项目通过整合前端和后端技术,实现了一个功能丰富、智能化的小测验系统。满足了教育和培训场景中对快速、便捷检验学习效果的需求,具有较高的实用性和发展潜力。通过全面的测试,确保了系统的稳定性和正确性。在未来的开发中,可以进一步完善功能,提升用户体验,为更多用户提供优质的服务。



















- 最新
- 最热
只看作者个人评分
张骏:36%
朱志恒:36%
王庆宇:28%