[T.14] 团队项目:Beta 阶段项目计划

项目 内容
这个作业属于哪个课程 首页 - 2025年春季软件工程(罗杰、任健) - 北京航空航天大学 - 班级博客 - 博客园
这个作业的要求在哪里 [T.14] 团队项目:Beta 阶段项目计划 - 作业 - 2025年春季软件工程(罗杰、任健) - 班级博客 - 博客园
我在这个课程的目标是 作为团队完成一个完整的软件开发流程,学习软件工程与软件开发相关流程和技术
这个作业在哪个具体方面帮助我实现目标 总结 Alpha 阶段项目工作和成果

一、产品概述

本产品是一个基于微信小程序的新主楼导航(路径规划)工具,旨在为同学们提供新主楼的多楼层地图连接导航实时方向感知功能,减少迷路状况的发生。

二、技术栈

前端

  • 前端主要的程序设计语言为TypeScript/JavaScript、css、html、WXML、WXSS
  • 为了实现微信小程序和web应用的兼容,我们主要依托Taro框架,结合Vue3框架以及微信小程序原生api进行开发;
  • 为了实现小程序核心的地图显示功能,我们使用了轻量级交互式地图JavaScript库Leaflet,兼顾开发效率与移动端友好;
  • 我们使用pinia库,以实现高效地实现状态管理;

后端

  • 后端采用的主要程序设计语言为java,采用SpringBoot作为后端开发框架;
  • 采用SpringBoot自带的功能进行单元测试;
  • 数据存储使用MySQL
  • 寻路算法相关部分主要依托于NetworkX库,使用python进行编写;
  • 地图数据标注通过OCR实现。

服务器

我们服务器部署在阿里云ESC,云端部署环境为Ubuntu 24.04,服务器具体配置如下

  • 2核2GB,40G ESSB 云盘存储,3Mbps网络带宽

三、软件架构

下面对其中的主要模块所承担的功能任务进行简要介绍

后端

  • 后端主要由MySQL模块和SpringBoot模块组成;
  • MySQL数据库中存储了部分新主楼地图的数据以及用户信息;
  • SpringBoot框架存储了路径搜索的算法,用于处理前端的各种请求;
  • 整合NetworkX算法,支持跨楼层路径规划。

前端

  • 前端使用了开放式跨端跨框架Taro。该框架对Vue3支持良好,让我们可以享受良好的js生态,在满足我们跨端需求的同时提高了我们的开发效率。
  • 前端将多楼座地图进行整合并动态加载,允许用户进行地图交互操作,提升用户体验。
  • 新增悬浮指南针模块,实时监听设备方向并更新UI,辅助用户确认当前方向,提升导航效率。

子系统之间的关系以及相互工作模式

  • 后端通过SpringBootMySQL的交互来实现数据的存取控制;

  • 后端主要通过SpringBoot框架实现数据的处理;

  • 前后端之间通过RESTful api进行交互;

  • 前端依托Taro和Vue3框架进行代码编写,并发行于微信小程序端;

  • 前后端相关设施全部部署在阿里云服务器上。

四、软件设计和实现

功能设计示意图如下

如图所示,小程序的功能模块大致分为下述三类

  • 地图交互:主要负责用户点击地图时的交互情况,要支持地图缩放与旋转、路径显示、楼层切换显示、显示图片评论等功能,并通过悬浮指南针确认当前方向。
  • 路径搜索:负责具体的路径绘制实现,包括点击地点搜索、点对点(输入框)搜索、附近地点搜索
  • 用户管理:该模块下的功能需要用户登录使用,其下包括地点收藏、用户上传实景图片、用户反馈等功能。

文档编写

出于开发时间较短,迭代较为频繁的显示考虑,我们尽可能地减少文档的编写数目,非必要不编写文档。

尽管如此,我们要求成员在编写代码时要保证一定的注释率,保证代码的可读性,为后续的迭代做好预备。

经过我们团队商议,以下几个文档为必须编写:

  • 前后端api说明文档:由前端进行编写,在文档中说明api的url、类型、发送参数、期望的接受参数以及简要说明。后端对这些api进行实现。
  • commit说明文档:对代码提交的commit信息进行一定的规范化,便于后续进行版本控制,减少无用功。
  • 地图标注说明文档:我们的项目需要大量的新主楼地点信息,信息标注需要手工完成。而信息标注的准确与否将会很大程度上影响软件功能的正确性,因此我们认为地图标注说明文档是十分有必要的。

五、系统设计

  • 抽象
    • 接口抽象:前后端通过 RESTful API 进行交互,接口定义遵循资源化原则(如/api/path表示路径资源)。前端仅关注参数传递与结果渲染,后端通过统一处理请求
    • 功能抽象:我们将路径搜索算法封装为独立模块,通过策略模式支持不同算法的动态切换(如最短路径、乘坐电梯路径等)
  • 内聚/耦合/模块化
    • 前后端分离,降低功能的耦合度。前端提供api接口,后端负责实现,实现了双端并行开发。
    • 前端需按功能将代码划分成多个独立模块,通过Composition API实现逻辑复用

六、软件测试和性能度量

测试计划

单元测试

  • 前端

    • 对于前端,我们计划采用Jest与进行测试。Jest 是一个流行的JavaScript测试框架,特别适合用于Taro的单元测试。它提供了丰富的 API 和内置的断言库,能够轻松测试Taro组件的行为和状态。此外,Jest还支持快照测试,可以捕获组件的渲染结果并与之前的快照进行对比,能够帮助我们实现UI的一致性以及各种UI行为的正确性。
  • 后端

    • 后端主要进行各种api行为正确性的测试。后端的测试主要依托于spring-boot-starter-test核心包。它集成了市面上流行的JUnitSpring Test & Spring Boot TestAssertJMockito等多种测试类库,能够帮助我们进行全方位的测试。

    • 在这之中,我们将主要使用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反向代理实现负载均衡。

设备方向数据延迟

微信小程序的设备方向API可能存在响应延迟或抖动,导致指南针UI更新卡顿或方向跳变,尤其在快速旋转设备时可能出现方向滞后或异常抖动。

我们将在后续测试该问题是否会发生。若会,我们将尝试通过本地缓存历史方向数据并结合插值算法平滑方向变化,同时限制方向更新频率,若方向API不可用则提供静态指南针或手动输入方向的降级方案。

posted @ 2025-05-21 01:38  JietBrains  阅读(20)  评论(0)    收藏  举报