「MOSS - 06」MOSS队:技术规格说明书

「MOSS - 06」MOSS队:技术规格说明书

项目内容
这个作业属于哪个课程2023年北航敏捷软件工程
这个作业的要求在哪里团队项目-Alpha阶段项目计划
我们在这个课程的目标是熟悉敏捷开发的方法论,并通过实际开发产品进行实践
这个作业在哪个具体方面帮助我实现目标通过明确技术规格说明书,凝聚开发技术共识,以便于在紧张的敏捷开发中使用相同且趁手的工具,专注于业务,高效协作。

Author: MOSS队

Date: 2023.04.05

Part 1 技术栈

1.1 程序设计语言

  • 前端:html+js+css
  • 后端:python

1.2 应用开发框架

  • 前端:使用Vue框架,并使用Vuex,Vue-router,Axios,Element-ui组件、Vuetify组件等。具体而言,通过v-model双向数据绑定,v-slot插槽动态填充表格。前后端分离时,我们将前端中与后端交互的api封装为接口,前端使用这些api接口与后端交互。
  • 后端:使用Django设计后端,利用其提供的ORM(Object Relational Mapping)框架等进行开发。同时,使用Django REST framework(DRF)插件快速开发RESTful样式的接口。

1.3 运行环境

  • 前端:Node.js 是一个开源和跨平台的 JavaScript 运行时环境,Node.js 可以在浏览器之外运行 V8 JavaScript 引擎。而 npm 是 Node.js 的包管理工具,用来安装 Node.js 的各种扩展。我们使用 npm 来维护运行环境,包括使用的框架、第三方库等等。
  • 后端:python 3.9 + django 3.2.18

2 软件总体架构

总体架构图

在这里插入图片描述

2.1 子系统

本项目主要包含前端、后端、部署三个子系统。

2.2 前端

  • 功能:提供交互界面和功能
  • 包含模块:
    • Vue.js 框架

2.3 后端

  • 功能:提供核心功能计算支持
  • 包含模块:
    • django框架
    • djaogo REST frame API框架
    • MySQL数据库
  • 内部工作模式:django框架和django REST frame交互,共同支持提供API;django框架和MySQL数据库交互,提供高可用的数据库服务支持

2.4 部署

  • 功能:提供公网访问及项目上云
  • 包含模块:
    • 腾讯云轻量应用服务器

2.5 子系统间关系与工作模式

  • 前端和后端通过django REST frame进行交互
  • 后端可由django框架向前端直接提供服务
  • 前端和后端通过部署在腾讯云服务器实现上云

Part 3 系统开发目标

3.1 需要完成哪些代码编写

前端

产品主要分为 4 个模块。

每个模块对于学生、辅导师、管理员三种角色的视图均不完全相同。

  1. 问题广场
  • 对于学生用户,可以在广场中浏览他人的提问及助教回答,可以根据关键词或标签检索问题。

  • 对于辅导师用户,可以看到目前自己所负责学科待回复或待审核的问题,可以浏览后选择接受。

  • 对于管理员用户,可以看到目前所有待回复或待审核的问题、以及问题存在时间,从而选择加悬赏分数。

  1. 问题发布与互动
  • 对于学生用户,可以实名或匿名发布提问;可对辅导师回答提出申诉;可以修改或删除自己提出的问题;可以收藏问题。
  • 对于辅导师用户,可以实名回答同学问题,给问题添加标签;审核其它辅导师的回答通过或不通过;根据审核结果修改自己的回答。
  • 对于管理员用户,可以以实名形式看到所有问答,删除不当问题和回复。
  1. 个人信息管理
  • 对于学生用户,可以浏览自己收藏的和提出的问题。
  • 对于辅导师用户,可以浏览自己回答过的问题和自己的审核记录。
  • 对于管理员用户,可以查看全部学生名单及提问情况、辅导师工作量统计数据。
  1. 消息通知
  • 对于学生用户,若提问收到辅导师回答,会收到邮件和平台同时通知;若有不当提问被管理员删除,会在平台收到通知。
  • 对于辅导师用户,当回答被其他辅导师审核完成,有回答被学生申诉,有不当回复被管理员删除时,会在平台收到通知。

更具体地,每个模块详细功能定义如下:

问题广场
  • 公共功能
    • 广场为登录平台后进入的默认界面,以“学科”为第一关键字,“单元”为第二关键字组织现有问题。用户可以浏览已被解答的提问。
    • 广场界面顶部有搜索栏。用户可同时使用简单的题目关键字检索,和高级标签检索功能(语法:“tag:xxx|yyy”)检索问题。
  • 学生用户
    • 在学生视图有“发布提问”的醒目按钮,可一键进入问题编辑弹窗。
  • 辅导师用户
    • 有“待解答”和“待审核”两个入口按钮。
    • 通过“待解答”可查看自己负责学科目前有哪些未回答的问题,带有悬赏的问题将有特殊标记。点击问题可进入查看和填写回答。
    • 通过“待审核”可查看自己负责学科目前有哪些待审核的回答。点击问题可进入查看和选择“通过”或“不通过”。
  • 管理员用户
    • 有“待解答”和“待审核”两个入口按钮。
    • 通过“待解答”可查看各个学科目前所有未回答的问题。点击问题可以查看详情、存在时间并设置悬赏。对于不合规的问题可以将其删除。
    • 通过“待审核”可查看各个学科目前所有未审核的回答。对于不合规的问题和回复可以将其删除。
问题发布与互动
  • 公共功能
  • 学生用户
    • 学生可以选择实名或匿名(对其它学生用户而言)发布提问,学生发布时仅需要选择所属学科,不需要添加标签。
    • 收到辅导师回答后,若学生不满意回答质量,还可提出申诉,问题将重新进入“待解答”池中,等待下一位辅导师回答。
    • 学生修改或删除自己提出的问题。
    • 学生可以收藏自己或他人提出的问题。
  • 辅导师用户
    • 辅导师实名回答同学问题,并且需要给问题添加标签。
    • 辅导师需要审核其它辅导师的回答,给出通过或不通过,审核过程双方互相匿名。
    • 若回答不通过,辅导师可根据审核结果修改自己的回答,重新进入“待审核”池中。
  • 管理员用户
    • 管理员可以查看以实名形式显示的任何问题和回复,以及审核记录,可以将不当的问题和回复删除,被删除问题或回复的发布者将 收到平台消息提示。
个人信息管理
  • 公共功能
    • 进入平台前,用户需要输入用户名和密码。全部学生、辅导师、管理员账号已预先通过系统导入。
    • 用户可在个人信息界面修改自己的密码、邮箱和头像。
  • 学生用户
    • 学生可以在收藏夹浏览自己收藏的问题。
    • 学生可以在提问历史中查看自己提出过的问题。
  • 辅导师用户
    • 辅导师可以在回答历史中浏览自己回答过的问题。回复分为审核已通过和未通过两栏展示,辅导师可从未通过一栏直接进入问题修改自己的回答。
    • 辅导师可以在审核历史中浏览自己的审核记录。
  • 管理员用户
    • 管理员可以在学生统计数据中查看全部学生名单,以及个人的提问和违规情况。
    • 管理员可以在辅导师统计数据中查看全部辅导师名单、负责学科,以及每个人的工作量统计数据。
消息通知
  • 公共功能
    • 用户可从个人中心界面进入消息列表。列表分为“已读”和“未读”显示。
  • 学生用户
    • 学生的提问若新收到辅导师回答,会收到邮件(如果学生在个人信息中填写了邮箱)和平台同时通知。
    • 学生若有不当提问被管理员删除,会在平台收到通知。
  • 辅导师用户
    • 辅导师的回答当被其他辅导师审核通过/不通过时,会在平台收到通知。
    • 辅导师有回答被学生提出申诉时,会在平台收到通知。
    • 辅导师有不当的回复被管理员删除时,会在平台收到通知。
后端
模型设计

使用Django提供的ORM框架。

需要完成以下几个实体抽象的编写:

  1. 用户(User) 、 权限(Privilege)
  2. 事项(Issue) 、 评论(Comment)
  3. 学年(Year) 、 科目(Subject) 、 章节(Chapter)
  4. 标签(Tag)
  5. 举报(Report) 、通知(Notification)
API设计

对于每一个模型的完整性验证等,在模型中进行约束。

对于各个对象的状态转变等,在模型中进行约束。

对于模型对象表示为json的方法实现,在Serializer中实现。

对于提供给前端调用的API部分,在APIView中实现。

以上可实现高内聚、松耦合和模块化的特性。同时,可以充分利用django REST framework的框架进行实现。

错误机制及处理办法

通用错误和特定错误的编写。

初步定义API的json格式为

 {
     success: ,
     code: ,
     message: ,
     data: ,
 }

其中,code为错误码(若正确,则返回0,即SUCCESS),data为与前端交互的数据部分。

通用错误码
 SUCCESS = 0
 # 基本异常
 COMMON_ERROR = -1
 # 全局异常
 SYSTEM_ERROR = 1
特定错误码

针对每一种类型的错误,定义错误。

规定如下:

  1. 对每一类错误,递增定义。如1xx, 2xx, 3xx…
  2. 对每一类错误中的小错误,递增定义。如x00, x01, x02…

如用户登陆错误码:

 ALREADY_LOGGED_IN = 100
 NOT_LOGGED_IN_YET = 101
 WRONG_PASSWORD_OR_USERNAME = 102
 ...

3.2 需要完成哪些单元测试

前端

由于前端基于Vue框架,拟采用**Vue Test Utils 集成测试工具进行测试,前端测试时需要涉及以下几点。**

  1. 组件测试:测试组件的功能,包括输入和输出的行为,事件处理和渲染。
  2. Vuex 状态管理测试:需要测试 Vuex 的行为,包括操作和访问状态,触发和处理动作等。
  3. 路由测试:需要测试路由的行为,包括路由的导航和状态管理等。
  4. HTTP请求测试:需要测试HTTP请求的行为,包括异步请求和响应处理等。
  5. 表单测试:需要测试表单的行为,包括验证,提交和重置。
后端

需要进行单元测试的部分主要为API相关代码。

测试将采用Django框架的unittest模块进行编写,测试各个API的正确性和代码覆盖率。同时,相关单元测试将会配置于CI/CD,实现自动化测试。

3.3 需要完成哪些系统压力测试

  • 前端:应该不涉及压力测试

  • 后端:压力测试计划使用Python-requests脚本发送请求进行压力测试。

    具体压力指标主要为两项:

    • 吞吐率(rps), req/s

    • 用户平均请求等待时间(RTT), ms

3.4 需要完成那些真实测试?具体测试细节是怎样的?

前端

使用 Nightwatch.js实现端对端的真实测试。

对Web应用来说,端到端测试意味着需要打开浏览器、加载页面、运行JavaScript,以及进行与DOM交互等操作。为了在开发过程中自动进行端到端测试,Nightwatch诞生了。

Nightwatch.js是一个基于Node.js的端到端(e2e)测试方案,使用W3C WebDriver API,将Web应用测试自动化。它提供了简单的语法,支持使用JavaScript和CSS选择器,来编写运行在Selenium服务器上的端到端测试。

Selenium相当于一个自动化的浏览器,是用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

参考链接:https://www.cnblogs.com/wheatCatcher/p/11342821.html

后端

真实测试指对真实情况进行模拟的测试,除去此前提及的单元测试与系统压力测试之外,还包括安全测试与功能测试。

安全测试主要模拟攻击,测试系统是否能正确防范,四种攻击如下:

  • SQL注入测试:模拟攻击者注入恶意代码,获取或修改数据库中的数据。
  • XSS测试:模拟攻击者对网站注入恶意脚本,获取用户的敏感信息。
  • CSRF测试:模拟攻击者利用用户已经登录的会话,在用户不知情的情况下执行未授权操作。
  • 文件上传测试:模拟攻击者上传恶意文件,获取系统权限或执行恶意代码。

功能测试主要站在用户的视角,测试基础功能实验与否:

例如在通知功能测试时,就需要模拟辅导师认领issue的行为,观察提问学生是否收到issue回复的通知。再例如,在issue复审前后,需要在对应目录的列表下观察issue的可见性是否发生变化。

3.5 需要完成哪些系统文档的编写?需要详细到什么程度?

  • 前端:需要完成前后端API接口文档的编写。
    • 需要明确接口的名字
    • 需要明确接口的类型
    • 需要明确接口的行为
    • 需要明确接口输入输出的字段及其对应类型
    • 需要考虑错误处理
  • 后端:
    • 数据模型设计文档:需要大致考虑到所有实体及所有联系,并经过多次审核。尽量不在开发过程中进行修改。
    • API交互文档:暂时考虑使用EoLink等API工具进行设计,若有更改需要,将进行更改并能够及时通知他人。
    • 代码设计和风格规范文档。尽量不花时间在这个文档的编写上。统一一下风格即可。
    • 错误码文档。根据上述说明进行设计。
    • git规范
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值