PopQuiz项目最终报告:智能小测验系统开发与应用详解

《PopQuiz项目最终报告》

一、项目概述

PopQuiz 项目旨在利用人工智能技术,针对任何内容快速生成智能小测验,以简便的方式检验听众是否专注于演讲内容。该项目涵盖了前端与后端的开发,提供了丰富的功能,支持用户进行登录注册、课程管理、演讲操作、题目创建与作答、文档上传以及评论等操作。

二、项目背景

在教育和培训场景中,及时了解听众对内容的理解和关注程度至关重大。传统的测验方式往往效率低下且缺乏灵活性,PopQuiz 项目应运而生,借助 AI 技术实现快速、智能的小测验生成,为教育者和组织者提供了便捷的工具。

三、项目目标

  1. 提供便捷的用户体验:实现简单易用的登录注册流程,方便用户快速进入系统。
  2. 支持多样化的课程和演讲管理:允许组织者(可以是任何人)创建课程和演讲,听众能够轻松加入或退出课程。
  3. 智能生成题目:结合演讲文档和语音,利用 AI 技术自动生成相关题目。
  4. 实时交互与反馈:支持演讲者手动创建题目,听众能够实时作答并查看结果,同时提供评论功能促进交流。
  5. 数据统计与分析:为教师和学生提供统计数据,协助他们了解学习情况。

四、项目功能实现

(一)用户管理

  • 登录注册:用户可以通过注册账号并登录系统,获取唯一的用户 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);
}

(三)测试覆盖范围与局限性

目前的测试主要聚焦在控制器层的单元测试,对业务逻辑和数据库交互进行了必定程度的验证。不过,测试覆盖范围仍有提升空间,例如可以增加对服务层和数据访问层的集成测试,以确保各个组件之间的协作正常。此外,对于一些复杂的业务场景和异常情况,可能需要进一步完善测试用例。

七、项目优势

  1. 智能化题目生成:利用 AI 技术根据演讲内容自动生成题目,提高了出题效率和准确性。
  2. 实时交互性:支持演讲者和听众的实时交互,增强了学习的趣味性和参与度。
  3. 数据统计与分析:为教师和学生提供详细的统计数据,有助于了解学习情况,优化教学策略。
  4. 多文件支持:支持上传 PDF、PPT 和音频文件,方便用户整理和利用演讲资料。

八、项目挑战与解决方案

(一)AI 题目生成准确性

  • 挑战:AI 生成的题目可能与已有题目重复,或者不符合要求。
  • 解决方案:在生成题目时,过滤掉与已有题目类似的问题,并设置严格的题目生成规则,确保题目质量。

(二)文件处理与解析

  • 挑战:不同格式的文件(如 PDF、PPT)需要进行解析,提取文本内容。
  • 解决方案:使用 Apache POI 等工具对 PPT 文件进行解析,对于 PDF 文件可以使用第三方库进行文本提取。

(三)实时性要求

  • 挑战:演讲过程中需要实时进行语音转文字和题目生成,对系统的性能和响应速度提出了较高要求。
  • 解决方案:采用异步处理和缓存技术,优化系统性能,提高响应速度。

九、项目未来展望

  1. 扩展 AI 功能:进一步优化 AI 题目生成算法,提高题目的多样性和难度层次。
  2. 增加社交功能:支持用户之间的互动和交流,如小组讨论、排行榜等。
  3. 多语言支持:支持多种语言,扩大项目的应用范围。
  4. 移动端适配:开发移动端应用,方便用户在移动设备上使用。

十、总结

我们的PopQuiz 项目通过整合前端和后端技术,实现了一个功能丰富、智能化的小测验系统。满足了教育和培训场景中对快速、便捷检验学习效果的需求,具有较高的实用性和发展潜力。通过全面的测试,确保了系统的稳定性和正确性。在未来的开发中,可以进一步完善功能,提升用户体验,为更多用户提供优质的服务。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共1条

请登录后发表评论