[T.6] 团队项目:技术规格说明书
[T.6] 团队项目:技术规格说明书
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 首页 - 2025年春季软件工程(罗杰、任健) - 北京航空航天大学 - 班级博客 - 博客园 |
| 这个作业的要求在哪里 | [T.6] 团队项目:技术规格说明书 |
| 我在这个课程的目标是 | 增长团队开发能力,学习敏捷开发的原则与方法 |
| 这个作业在哪个具体方面帮助我实现目标 | 明确团队开发过程中的技术规范,确定总体开发方向,提高开发效率 |
一、产品概述
本产品是一个基于微信小程序的新主楼导航(路径规划)工具,旨在为同学们提供新主楼的路径规划,减少迷路状况的发生。
二、技术栈
前端
- 前端主要的程序设计语言为TypeScript/JavaScript、css、html、WXML、WXSS;
- 为了实现微信小程序和web应用的兼容,我们主要依托Taro框架,结合Vue3框架以及微信小程序原生api进行开发;
- 为了实现小程序核心的地图显示功能,我们使用了轻量级交互式地图JavaScript库Leaflet,兼顾开发效率与移动端友好;
- 我们使用pinia库,以实现高效地实现状态管理;
后端
- 后端采用的主要程序设计语言为java,采用SpringBoot作为后端开发框架;
- 采用SpringBoot自带的功能进行单元测试;
- 数据存储使用MySQL;
- 寻路算法相关部分主要依托于NetworkX库,使用python进行编写。
服务器
我们服务器部署在阿里云ESC,云端部署环境为Ubuntu 24.04,服务器具体配置如下
- 2核2GB,40G ESSB 云盘存储,3Mbps网络带宽
三、软件架构

下面对其中的主要模块所承担的功能任务进行简要介绍
后端
- 后端主要由MySQL模块和SpringBoot模块组成;
- 在MySQL数据库中存储了部分新主楼地图的数据以及用户信息;
- SpringBoot框架存储了路径搜索的算法,用于处理前端的各种请求;
前端
- 前端使用了开放式跨端跨框架Taro。该框架对Vue3支持良好,让我们可以享受良好的js生态,在满足我们跨端需求的同时提高了我们的开发效率。
子系统之间的关系以及相互工作模式
-
后端通过SpringBoot和MySQL的交互来实现数据的存取控制;
-
后端主要通过SpringBoot框架实现数据的处理;
-
前后端之间通过RESTful api进行交互;
-
前端依托Taro和Vue3框架进行代码编写,并发行于微信小程序端;
-
前后端相关设施全部部署在阿里云服务器上。
四、软件设计和实现
功能设计示意图如下

如图所示,小程序的功能模块大致分为下述三类
- 地图交互:主要负责用户点击地图时的交互情况,要支持地图缩放、路径显示、楼层切换显示、显示图片评论等功能
- 路径搜索:负责具体的路径绘制实现,包括点击地点搜索、点对点(输入框)搜索、附近地点搜索
- 用户管理:该模块下的功能需要用户登录使用,其下包括地点收藏、用户上传实景图片、用户反馈等功能。
文档编写
出于开发时间较短,迭代较为频繁的显示考虑,我们尽可能地减少文档的编写数目,非必要不编写文档。
尽管如此,我们要求成员在编写代码时要保证一定的注释率,保证代码的可读性,为后续的迭代做好预备。
经过我们团队商议,以下几个文档为必须编写:
- 前后端api说明文档:由前端进行编写,在文档中说明api的url、类型、发送参数、期望的接受参数以及简要说明。后端对这些api进行实现。
- commit说明文档:对代码提交的commit信息进行一定的规范化,便于后续进行版本控制,减少无用功。
- 地图标注说明文档:我们的项目需要大量的新主楼地点信息,信息标注需要手工完成。而信息标注的准确与否将会很大程度上影响软件功能的正确性,因此我们认为地图标注说明文档是十分有必要的。
五、系统设计
- 抽象
- 接口抽象:前后端通过 RESTful API 进行交互,接口定义遵循资源化原则(如
/api/path表示路径资源)。前端仅关注参数传递与结果渲染,后端通过统一处理请求 - 功能抽象:我们将路径搜索算法封装为独立模块,通过策略模式支持不同算法的动态切换(如最短路径、乘坐电梯路径等)
- 接口抽象:前后端通过 RESTful API 进行交互,接口定义遵循资源化原则(如
- 内聚/耦合/模块化
- 前后端分离,降低功能的耦合度。前端提供api接口,后端负责实现,实现了双端并行开发。
- 前端需按功能将代码划分成多个独立模块,通过Composition API实现逻辑复用
六、软件测试和性能度量
测试计划
单元测试
-
前端
- 对于前端,我们计划采用Jest与进行测试。Jest 是一个流行的JavaScript测试框架,特别适合用于Taro的单元测试。它提供了丰富的 API 和内置的断言库,能够轻松测试Taro组件的行为和状态。此外,Jest还支持快照测试,可以捕获组件的渲染结果并与之前的快照进行对比,能够帮助我们实现UI的一致性以及各种UI行为的正确性。
-
后端
-
后端主要进行各种api行为正确性的测试。后端的测试主要依托于
spring-boot-starter-test核心包。它集成了市面上流行的JUnit、Spring Test & Spring Boot Test、AssertJ、Mockito等多种测试类库,能够帮助我们进行全方位的测试。 -
在这之中,我们将主要使用
Mockito类库进行测试。它在测试时不是真正的操作外部资源,而是通过自定义的代码进行模拟操作。我们可以对任何的依赖进行模拟,从而使测试的行为不需要任何准备工作或者不具备任何副作用。Mockito库的这些特点完美地契合了我们的需求。 -
此外,我们还计划依托apiFox平台进行测试,部署自动化测试,以进一步提高测试效率。
-
保证单元测试的80%以上覆盖。
-
压力测试
我们计划使用JMeter进行压力测试。JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。我们将会使用它测试各个api在高并发时的表现,测试服务器的负载情况。
我们预计测试负载量在500到1000时,软件的运行情况。实际测试指标要依据Alpha阶段用户数进一步决定。
真实测试
- 功能测试
- 测试实际使用微信小程序,查看功能表现是否正确,UI逻辑、动画是否正确。注意对边界情况的测试,如非法字符、空输入、过长输入等;
- 实地测试
- 测试人员将在新主楼实际使用小程序进行导航,验证导航的正确性。注意对覆盖跨越多楼层、穿越中央天桥、使用楼外走廊等多种情况;
- 兼容性测试
- 测试人员将使用多种不同操作形态、不同手机型号、不同屏幕分辨率的手机进行兼容性测试。保证小程序在各个平台都能表现出正确的功能,UI显示正常。
性能度量
我们将从api响应速度、页面加载速度等方面度量我们的程序,具体度量指标将由我们开发初步完毕后实际体验给出。
当程序能够完成新主楼1-5楼导航,上述功能设计示意图中的功能全部完成后,测试全部通过,小程序可以发布。
若后续时间仍有盈余,我们将会考虑进一步拓展新主楼导航范围,用户自定义上传地图以及标点信息,增强程序在高并发时的表现。
七、技术风险识别和评估
我们评估认为,我们的产品可能在以下几个方面存在技术风险
路径算法效率问题
NetworkX库虽支持复杂图算法,但Python与Java后端的集成可能因进程通信延迟导致响应时间过长。跨楼层路径(如电梯/楼梯衔接)的逻辑复杂性也可能引发算法错误。
我们将在后续测试该问题是否会发生。若会发生,我们将会引入A*算法优化实时搜索效率,对高频路径进行预计算并缓存结果尝试解决该问题。
跨平台兼容性问题
Taro框架虽然支持多端适配,但微信小程序与Web端在API支持、渲染机制上存在差异。这可能导致功能异常或UI适配问题。
服务器资源问题
若用户量激增或并发请求密集,可能负载过大,程序宕机。
我们将在后续测试该问题是否会发生。若会,我们将会尝试使用Nginx反向代理实现负载均衡。
浙公网安备 33010602011771号