[T.6] 团队项目:技术规格说明书
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
这个作业的要求在哪里 | [T.6] 团队项目:技术规格说明书 |
我在这个课程的目标是 | 掌握软件工程的基本概念和方法,提高团队合作能力,增强问题解决能力,熟悉现代软件开发工具和技术,提升编程技能。 |
这个作业在哪个具体方面帮助我实现目标 | 确定技术栈并且规范化开发,敲定前后端交互方式,全面测试来提高开发的效率和正确率 |
Part 1 技术栈
1.1 程序设计语言
- 前端:Dart
- 后端:Python
1.2应用开发框架
前端技术栈:
- 本项目前端采用 Flutter 框架 进行开发。Flutter 是由 Google 推出的跨平台 UI 框架,具备高性能渲染引擎和丰富的组件系统。开发过程中只需使用一套代码,即可同时部署到 Android、iOS 和 Web 平台,大大降低了开发与维护成本。
- Flutter框架特点是跨平台自绘引擎和高性能。
后端技术栈:
- 后端使用
Django
框架结合DRF
(Django REST framework)插件交互Mysql
数据库来开发。Django
作为一个高级的Python Web框架,可以快速开发安全和可维护的网站。Django
负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。 DRF
是一个强大的后端框架,提供了灵活的工具使得我们可以高效地搭建出API。
1.3 运行环境:
前端:Flutter 会将 Dart 代码通过 AOT 编译为原生机器码,安卓app运行在Dalvik 虚拟机或ART之上,iOS app直接利用 iOS 提供的运行时环境。
后端:Python
3.13.0 和 Django
5.1.2
Part 2 软件架构
2.1 组成
本项目由前端后端以及部署组成
2.2 前端
- 功能:与用户交互,为用户提供相应的功能,使用后端提供的接口
- 包含模块:Flutter 框架
2.3 后端
- 功能:和前端通过API交互,根据前端要求从数据库中取出目标数据
- 包含模块:
- Django 框架
- Mysql 数据库
- Django Rest Framework
2.4 部署
部署到腾讯云服务器2核4G,70G SSD
2.5 子系统间关系和工作模式
- 前端后端通过Django Rest Framework形成的API进行交互
- 后端Django和DRF框架交互来满足API快速高效的开发
- 后端Django和Mysql数据库交互来取出和存入数据
- 前端Flutter,后端Django和数据库Mysql都部署到腾讯云服务器上
- 前端上传到应用商店实现下载。
Part 3
3.1 开发的目标模块
- 登录和注册
- 注册功能
- 输入邮箱,输入密码并接收验证码进行注册
- 登录功能
- 输入邮箱,输入密码进行登录
- 注册功能
- 设置区
- 修改密码功能
- 输入原密码和新密码
- 若原密码正确则修改成功,否则失败
- 修改头像功能
- 传入新的头像,否则使用系统默认头像
- 修改名字功能
- 传入新的名字,否则使用系统默认名字
- 修改是否接受推送功能
- 用户选择是否接受推送
- 修改亮色/暗色模式功能
- 用户选择亮色或者暗色模式
- 修改默认启动页功能
- 用户可以选择默认的开始页面是主页面/小火箭页/星环页/观察室页/机械臂页/我的星球页
- 修改字体大小和款式
- 用户可以选择字体的款式和大小,否则使用系统默认的款式和大小
- 修改系统权限功能
- 用户可以选择是否接收通知
- 关于功能
- 用户点击后显示出本软件的基本信息等
- 修改密码功能
- 星环区
- 显示收藏的推送的碎片
- 用户点击星环区域后可以显示出收藏的碎片
- 所有碎片的诗歌内容的一部分和星图背景用来展示
- 显示别人推送的碎片
- 用户点击星环区域后可以显示出别人推送的碎片
- 所有碎片的诗歌内容的一部分和星图背景用来展示
- 显示收藏的推送的碎片
- 观察室区
- 进入星系视图,看系统恒星级推送功能
- 用户点击观察室后可以看到1个别人的星球
- 以星球加上被推送人的名字来显示
- 进入星系视图,看系统恒星级推送功能
- 小火箭区
- 发布创作的功能
- 用户点击小火箭后可以看到所有自己的创作并选择进行发布
- 显示所有碎片的创作的时间和碎片的诗歌内容部分的一部分和星图背景来展示
- 发布创作的功能
- 机械臂区
- 获取外部碎片推送功能
- 用户点击机械臂后可以接受系统的碎片推送,一次显示一个碎片
- 显示该碎片的诗歌内容和音乐和美文内容
- 获取外部碎片推送功能
- 我的星球区
- 创作功能
- 用户需要上传碎片的图片和诗歌内容和美文内容来展示,也可以上传图片用我们的AI接口来补全创作
- 显示所有的创作功能
- 用户点击小火箭后可以看到所有自己的创作
- 显示所有碎片的创作的时间和碎片的诗歌内容部分的一部分和星图背景来展示
- 发布创作功能
- 同小火箭
- 删除功能
- 用户可以删除已经创作但是未发布的碎片
- 编辑功能
- 用户需要选择一个已经创作但是未发布的碎片,上传需要修改的图片或者诗歌或者美文来修改
- 创作功能
3.2 需要完成哪些单元测试
前端:
可以使用 flutter_test
包来编写和执行单元测试。主要包含下面的单元测试内容:
测试 Flutter UI 组件的行为,确保界面元素渲染正确并响应用户交互。包括按钮点击、文本输入框、列表视图等交互操作的测试。测试应用中的状态管理(如Provider)是否正常工作。确保状态更新、事件触发、数据传递等功能正确实现。 测试核心的业务逻辑和数据处理方法,确保数据流和业务规则正确。 测试表单和用户输入的处理逻辑,确保表单数据验证、提交、错误处理等功能的正确性。
后端:
后端计划进行API测试和模拟浏览器测试,主要结合rest_framework中的相关工具来进行辅助单元测试:
API测试: 我们可以使用rest_framework
中相关包rest_framework.test.APITestCase来辅助进行单元测试。可以使用它来模拟前端对后端的请求行为,可以用来测试是否正常返回了数据或者是否正确返回了状态码之类的情况。
模拟浏览器测试: 使用Client().get/post()来辅助进行单元测试,可以普通 HTML 页面的请求模拟,保证正确性。
3.3 需要完成哪些系统压力测试
后端计划使用Locust
写脚本来进行压力测试。Locust是个强大的Python压力测试工具,我们需要使用它完成对于API的并发和负载测试。可以使用Locust来模拟多个并发用户同时访问API。
3.4 需要完成那些真实测试?具体测试细节是怎样的?
前端:
1. 功能测试
确保用的各项功能能够在真实设备上按预期工作,涵盖注册和登录功能、数据展示等。
细节:
在 真实设备 上手动操作,测试功能是否按预期运行。
测试 边界情况,例如错误的输入、表单验证、无效操作等。
2. UI/用户交互测试
确保UI元素在真实设备上正确显示,并且交互行为正确,验证应用在不同屏幕尺寸、不同分辨率和方向(横屏/竖屏)下的适配情况。
细节:
在 不同尺寸的设备 上进行手动测试交互行为,同时确保界面自适应。
3.兼容性测试
兼容性测试确保应用能在不同的设备、操作系统版本稳定运行。
细节:
测试应用在不同品牌的手机上都能正常运行,测试应用在 Android 和 iOS 不同版本上运行稳定。
后端:
后端主要包含了集成测试和安全测试这两个部分。
1. 集成测试
我们可以使用集成测试来模拟用户真实访问的流程,通过仿真流程的测试来观察多个模块一同工作是否会出现问题。后端计划使用Django的TestCase来模拟用户访问的流程,可以使用 Django 的 TestCase 来模拟整条流程完成集成测试。
2. 安全测试
安全测试可以保证我们的项目不被攻击,数据不被泄露。我们需要使用SQLMap来预防SQL的恶意注入,防止数据库遭受垃圾数据污染,同时,我们需要进行权限控制测试,计划使用APITestCase来防止用户直接使用管理员权限。
3.5 需要完成哪些系统文档的编写?需要详细到什么程度?
前端:API 接口文档
包含:接口名称、接口类型、接口行为、错误处理等
后端:辅助编写 API 接口文档和数据模型定义
结合API文档来设计具体的数据模型并和团队成员审核来敲定。开发之前敲定保障在开发过程中不轻易更改。
Part 4 软件性能
4.1如何量度本软件的性能?
可以从以下几个方面进行度量:
响应时间,响应时间直接影响用户体验,尤其是在需要快速反馈的应用。
内存消耗,过多的内存消耗可能导致系统变慢、崩溃。
CPU 使用率要少。
应用的启动时间要小。
4.2 软件的能力边界在哪里
软件的能力边界主要依赖:
网络带宽和延迟,网络带宽越大,延迟越低,软件能力越高。
算法和数据结构,使用恰当的算法和数据结构可以提软件的上限。
软件架构和设计,软件架构设计的好,可以提高软件的性能和可扩展性。
Part 5 出口条件
响应时间在 500ms 以内,系统能够承受的最大并发用户数在1000 - 2000个,启动时间应小于 3 秒,内存占用应低于设备总内存的 50%,在正常负载下的 CPU 使用率不应超过 70%
Part 6 技术风险识别和评估
前端:
Flutter框架可能有下面的技术风险:
1.性能瓶颈
风险: 渲染复杂 UI 时可能出现卡顿,或者处理大量数据时可能导致内存占用过高。
应对策略:避免不必要的 Widget 重建;将复杂的计算或数据处理移到后台线程。
2.跨平台兼容性问题
风险: 尽管 Flutter 提供了一个统一的代码库,iOS 和 Android 可能出现应用表现不一致。
应对策略: 进行跨平台测试,确保在不同的设备和操作系统版本下,UI 和功能能够正确显示和运行。
后端:本项目后端面临的风险主要是数据库安全性风险、部署和环境配置风险以及数据一致性风险三个方面。
1.数据库安全性风险
我们可能面临一些用户非法注入污染数据,作为一款文艺性app,数据被污染将会造成不堪设想的后果,对于试图攻击我们数据库的行为,我们将会使用Django ORM来禁止原生SQL拼接来保障数据库的安全性。
2.部署和环境配置风险
本地和线上环境不一致会导致很多依赖不同造成一定的风险,可以使用CI/CD,GitHub Action官方市场有很多现成的包可以供我们参考使用。我们可以使用Docker容器或者虚拟环境来保障每次构建环境都相一致。
3.数据一致性风险
因为存在缓存更新失败可能造成数据库和缓存不一致的问题,还有可能存在多用户同时修改造成数据覆盖的情况,所以可能会对数据的一致性和正确性造成风险。对此,后端计划用Django的事务管理来保证数据写入的原子性来降低数据不一致的风险。