项目 | 内容 |
---|---|
课程 | 2022春季软件工程(罗杰 任健) |
要求 | 计划阶段要求-技术规格说明书 |
目标 | 制定技术规格说明书 |
当前版本:v0.3
版本号 | 发布日期 | 版本说明 |
---|---|---|
v0.3 | 2022/4/18 | 定义产品基础功能,形成alpha阶段预期 |
文章目录
一、技术栈
1.1 前端部分
-
主要框架:vue.js v2.96
-
UI库:vuetify v2.x
-
vue插件:vue-router、vuex v2.x
-
css扩展:sass
-
测试开发环境:windows 10,nodejs v16.14.2 , npm v6.14.10
-
实际部署环境:(未知)
1.2 后端部分
-
主要框架:SpringBoot v2.6.6 Mybatis v2.2.2
-
数据库:MySQL v5.6.51
-
测试开发环境:javav1.8 maven v4.0.0
-
实际部署环境:(未知)
二、软件的总体架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mppjDXXq-1650361222341)(G:\Aaron\semester_6\软件工程\博客:规格书\6.png)]
2.1 子系统
-
服务端:处理数据
-
客户端:展示数据
-
stomp框架:处理即时通讯
2.2 子系统内部
- 服务端:controller层负责与前端交互,处理请求转发并调用service层;service层负责对数据进行处理,数据库连接并对数据库操作
三、系统的开发目标
3.1 代码编写
前端模块
-
首先完成各个组件功能的vue编写
-
根据页面的布局设计,完成css调整
-
根据api文档的设计,完成javascript函数编写
-
测试时,需要编写单元测试代码
后端模块
-
首先完成数据库的搭建与连接
-
根据需求编写相应功能函数
-
根据api文档,完成函数设计
-
对每个功能函数进行单元测试
3.2 单元测试
前端模块
- 完成一个功能模块进行一次简单的UI手动测试,并记录操作,总结成Jest单元测试代码。完成一个功能,便实现一次回归测试。
后端模块
- 对每个实现的函数进行单元测试,看能否正常实现对数据操作,完成一部分后总结为测试代码以便后续进行回归测试
前后端Json交互格式
code:表示交互结果代码依据业界规范,我们将使用20000、40000、40001等代码表示i前后端交互
data:封装交互数据
message:返回系统提示信息
{
"code": 20000,
"data": {},
"message": ""
}
3.3 系统压力测试
-
压力测试的目标主要是以下几点
-
负载能力:在正常的响应时间中,系统能够支持的最多的客户端的数量。
-
响应能力:在各种负载压力情况下,系统的响应时间。
-
可靠性:在连续工作时间状态下,系统能够正常运行的时间。
-
-
具体指标:
-
响应时间:100毫秒以内
-
TPS(Transaction per Second):200-300
-
错误率:不高于0.6%
-
3.4 API设计规范
注意:
- 在apifox中,我们设置了四种接口状态。请开发人员使用接口时,及时更新状态。
待确定:前后端都未开发和使用。
开发中:后端已开发。
联调中:前端已使用该接口。
已发布:后端已开发且前端已使用。
APIfox缩略图:
- 若需修改或新建接口,应尽快在群里提出,并协商。后端开发人员可以先完成底层函数的开发,最后再开发接口,防止接口变动导致重新写接口。
数据库结构敏捷设计:
3.5 系统业务逻辑
系统层面:
运行环境
-
服务端运行环境:Ubuntu-latest
-
应用端运行环境:Chrome v100.0.4896.127
系统设计
-
代码设计
-
信息的隐藏和封装
- 将前后端各自封装,通过API进行交流,传递是json格式文件,这样不会暴露各自的内部细节。后端在代码实现的过程中的controller类、service类和Mapper类各自都是拥有私有的数据和公共的方法,很好地将信息进行了封装。
-
模块化
-
将前端的代码分为 assets, plugins, components 等文件夹,分别开发具有不同功能的代码,并且使用面向对象的设计思想,复用vue中的 template 实现功能的标准化,模块化。
-
后端的功能函数是进行封装的,各种操作被集合在service层的类中,如果需要修改接口或者增加需要只要对相应的类进行修改即可,controller层或是前端数据的传回都无需修改。
-
-
-
架构设计
-
前后端分离
-
前端采用 vue.js 编写,通过 https 以及 stomp等功能与后端进行数据交互,前后端两组人员各自编写代码,从而实现前后端分离。
-
后端使用SpringBoot作为整体框架,通过controller层来接收前端数据并传给service层进行处理。后端并不关心前端如何展示以及如何获取数据。
-
-
系统性能
-
对于将来数据IO操作较多的情况下可能会采用主从结构,一个主库负责写操作,从库负责读操作,从而分担读写的压力。但是采用主从结构可能会略微增加延迟,该点需要注意。
-
实际上我们系统的性能是相对较好的, 但由于我们所使用的服务器较小,在用户量过大的情况下支持性会较差,导致响应速度变慢。
业务流程层面
-
前端所传回的数据理论上是合法的,前端会检验用户输入数据的格式等是否符合要求,如不符合则反馈错误信息给用户。如果数据格式上符合要求并正确地传给后端,后端会进行判断,比如所添加好友的ID是否存在、所查找的群是否存在等,并返回相应数据给前端。
-
如果前端传回了错误的数据那么后端就无法利用该信息找到相应的对象,那么可以用try-catch模式给前端反馈错误信息,前端可以要求用户重新输入以便传回正确的数据。