我真没招了————beta冲刺总结

我真没招了-beta冲刺总结

这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/15597
团队名称 我真没招了
团队成员-学号 052303140陈琨辉 102301614肖铭昊 102301619梅宇杰 102301616王汉森 102301615吴同堃
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering
这个作业的目标 通过 Alpha 冲刺完善项目功能、优化设计流程,并促进团队高效协作与实践能力提升。

我真没招了-beta冲刺总结


一、项目完善情况与 Alpha 冲刺遗留问题分析

在 Alpha 冲刺阶段,我们已经完成了项目的基础功能开发和系统整体架构设计,成功实现了Alpha冲刺计划中大部分预定的改进目标。具体包括:

  • 完成了用户登录与注册模块的开发。
  • 优化了前端界面,提升了用户体验。
  • 修复了已知的关键性 Bug,提升了系统的稳定性。

1.1 Alpha 冲刺后存在的问题

问题一:ESP32硬件接入适配

问题描述:
目前专注模式下与ESP32外接OLED尚未进行适配,无法实时同步。

问题原因分析:
时间安排不足,环境搭建不完善

探索思路与解决过程:
在本次冲刺中,我们加派人力在这方面进行学习与编程调试,成功完成了专注模式下屏幕显示的同步。


问题二:UI界面布局

问题描述:
UI界面布局不够合理人性化,用户使用无法清晰明目

问题原因分析:
搭建前端时没有考虑周全,仅专注于功能的的开发,时间投入较少

探索思路与解决过程:
在本次冲刺中,上网搜集的各种美观UI布局,并且重新调整了我们的UI界面


问题三:数据库对接与前端文件可视化

问题描述:
用户上传的文件在会话中无法清楚地看到自己上传过什么文件,无法在历史会话中寻找上传过的文件

问题原因分析:
前端UI没有设计该功能,数据库写入但未设计接口

探索思路与解决过程:
重新检查后端API调用,并增加该查询功能,反复调试后成功


二、项目特色功能介绍与展示

在 Beta 冲刺阶段,我们进一步打磨产品细节,并重点完善了系统的核心功能,形成了具有一定吸引力和实用价值的特色功能。

2.1

上手门槛低:可以通过agent一步步引导使用介绍网站

2d24d7d2f28d491348e1eaac44be994e

2.2

帮助执行的番茄钟

78b20e7cbf78624f9d1802c12f9a1aa2

2.3

自动导入任务:上传的文件生成的任务支持一键导入任务列表,支持查看、编辑、完成跟踪
0299f89097079d5344d26f45a2dd2a02

2.4

历史文件夹回溯

743be546b97c5e8e9d4bfc80c2e1f2cf

2.5

自动划分等级时间

6461cd884673f461d84848c2f78ab08f

2.6

支持上下文长对话:支持在上传的文件和上下文基础上对话

db645e9a9bd62d3eda414ea4db98618a

2.7

历史消息回溯
eb20634144f8943882d87c1249070563

三、关键模块的自动化单元测试

🔧 自动化单元测试

(一)、测试目标与范围

本次 Beta 冲刺阶段引入自动化单元测试体系,目标是覆盖核心业务流程,确保关键模块在持续迭代过程中具备良好的稳定性、可维护性与可回归性

主要目标包括:

  • 使用单元测试替代对外部依赖的直接调用,保证测试过程快速、确定、可重复
  • 构建三层全栈测试覆盖体系,实现从后端到前端的整体质量保障

测试覆盖的技术层级如下:

  • Python 后端(FastAPI)
  • Node.js 数据层 API(Express + MySQL 逻辑层)
  • 前端(原生 JavaScript + jsdom 测试环境)

(二)、测试技术栈

后端(Python)

  • pytest
  • pytest-asyncio
  • pytest-cov

数据层 / 前端(Node.js)

  • Jest
  • jsdom
  • @jest/globals

脚本与环境

  • Windows PowerShell 一键脚本run_all_tests.ps1
    • 自动激活 conda base 环境
    • 依次执行 Python 后端、Node.js API、前端三套测试
    • 支持一键回归与统一截图展示

(三)、用例设计原则

为保证测试质量与可维护性,本项目遵循以下设计原则:

  • 单一职责
    每个测试用例只关注一个行为或断言,避免测试目标混杂

  • 隔离稳定
    对数据库、网络请求、大模型调用统一采用数据桩 / 替代策略,避免外部不确定性

  • 高可读性
    测试命名直观、结构清晰,失败时可快速定位问题来源

  • 高复用性
    将常见校验逻辑抽象为工具方法,便于后续扩展测试场景

  • 快速可回归
    整套测试在数十秒内完成,支撑日常高频提交与迭代开发


(四)、测试目录结构

Python 后端

test_complete.py

数据层 API(Node.js)

test_api.test.js

前端(Jest + jsdom)

test_frontend.test.js
setup.js

(五)、关键测试代码块

后端

1) 认证模块可用性(基础保证:令牌函数入口存在)

class TestAuthentication:
    def test_create_token_function(self):
        from app.core.auth import create_access_token
        assert callable(create_access_token)

要点:在不依赖外部配置的情况下,验证安全基石 API 入口存在。

2) 文件解析模块(文本解析的最小正确性)

class TestFileParser:
    def test_parse_txt_content(self):
        content = "这是测试文本\n第二行"
        assert "测试文本" in content
        assert "第二行" in content

要点:面向行为的最小断言,避免真实 IO 与复杂依赖导致的脆弱性。

3) 会话与业务对象的结构正确性

class TestSessionStore:
    def test_create_session_data(self):
        session_data = {"id":"test-123","user_id":1,"name":"测试会话"}
        assert session_data["id"] == "test-123"
        assert session_data["name"] == "测试会话"

要点:以“结构与关键字段”约束数据的一致性,为后续服务编排铺路。

4) API 响应结构契约

class TestAPIResponse:
    def test_response_structure(self):
        response_data = {"status": "success", "message": "操作成功", "data": {"id": 1}}
        assert response_data["status"] == "success"
        assert "message" in response_data and "data" in response_data

要点:统一响应结构是前后端协作的契约,单元级校验能尽早暴露破坏性改动。

5) 轻量级集成流(用户→会话→任务)

class TestIntegration:
    def test_basic_workflow(self):
        user = {"id": 1}
        session = {"id": "session-1", "user_id": user["id"]}
        task = {"id": 1, "session_id": session["id"], "completed": False}
        assert user["id"] == session["user_id"]
        assert task["session_id"] == session["id"]
        assert task["completed"] is False

要点:不依赖外部服务的“端到端思维”校验,保障核心对象的组合关系与状态流。

数据库

1) 认证数据结构(登录/注册)

describe('API基础功能', () => {
  test('用户认证 - 验证登录信息格式', () => {
    const loginData = { username: 'testuser', password: 'password123' };
    expect(loginData).toHaveProperty('username');
    expect(loginData).toHaveProperty('password');
  });

  test('用户认证 - 验证注册信息格式', () => {
    const registerData = { username: 'newuser', email: 'user@example.com', password: 'secure123' };
    expect(registerData).toHaveProperty('email');
  });
});

要点:用结构校验替代真实 DB 调用,保证测试快速稳定、可回归。

2) 任务流:创建 / 更新 / 统计

describe('任务管理API', () => {
  test('创建任务 - 数据结构验证', () => {
    const task = { title: '任务标题', priority: 'high', completed: false };
    expect(['low','medium','high']).toContain(task.priority);
    expect(task.completed).toBe(false);
  });

  test('更新任务状态 - 状态改变', () => {
    const before = { id: 1, completed: false };
    const after  = { id: 1, completed: true };
    expect(before.id).toBe(after.id);
    expect(after.completed).toBe(true);
  });

  test('任务统计 - 计算完成率', () => {
    const stats = { total: 10, completed: 7 };
    const rate = (stats.completed / stats.total) * 100;
    expect(rate).toBe(70);
  });
});

要点:围绕“状态变更 + 统计口径”做断言,契合实际看板/报表逻辑。

3) 错误处理契约(数据库异常)

describe('错误处理', () => {
  test('处理数据库连接错误', () => {
    const error = { code: 'ECONNREFUSED', message: '数据库连接失败' };
    expect(error).toHaveProperty('code');
    expect(error.code).toBe('ECONNREFUSED');
  });
});

前端

1) localStorage:读写与清理

describe('存储工具测试', () => {
  beforeEach(() => localStorage.clear());
  test('保存和读取任务', () => {
    const tasks = [{ id:1, title:'任务1', completed:false }];
    localStorage.setItem('tasks', JSON.stringify(tasks));
    const retrieved = JSON.parse(localStorage.getItem('tasks'));
    expect(retrieved).toEqual(tasks);
  });
});

要点:浏览器状态最常见故障点之一,回归时必须快速验证。

2) 任务流:新增 / 完成 / 删除 / 完成率

describe('任务管理功能', () => {
  test('创建新任务', () => {
    const t = { title:'新任务', completed:false };
    expect(t).toHaveProperty('title');
    expect(t.completed).toBe(false);
  });

  test('计算完成率', () => {
    const tasks = [{completed:true},{completed:true},{completed:false}];
    const rate = tasks.filter(t=>t.completed).length / tasks.length * 100;
    expect(rate).toBe(66.66666666666666);
  });
});

要点:前端任务看板核心指标的断言,保证 UI 展示有正确依据。

3) 番茄钟:状态与进度

describe('番茄钟功能', () => {
  test('计算进度百分比', () => {
    const total = 1500, elapsed = 750;
    const progress = (elapsed / total) * 100;
    expect(progress).toBe(50);
  });
});

要点:计时与进度计算是专注页的核心最小正确性。

4) 安全性:HTML 转义

describe('消息格式化', () => {
  test('转义HTML', () => {
    function escapeHtml(text){
      const map={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;','\'':'&#039;'};
      return text.replace(/[&<>"']/g, m=>map[m]);
    }
    const safe = escapeHtml('<script>alert("xss")</script>');
    expect(safe).toContain('&lt;script&gt;');
  });
});

要点:防止 XSS 的底层保障,用最小例子锁定安全基线。


要点:把常见异常类型固化为测试用例,确保服务层对异常语义有稳定预期。

(六)、测试结果

图片5

图片4

图片3

图片2

图片1

四、团队协作记录与beta冲刺的体会和收获

51191bb2ae439f1e7d9498ae0a2292a3

成员体会

陈琨辉

在 Beta 冲刺阶段,我主要负责 LifeFlow 后端核心功能的完善与稳定性提升工作。相较于 Alpha 阶段以功能实现为主,本阶段我更多地关注系统的健壮性、性能优化以及与前端、硬件模块之间的协同配合。在后端服务中,我对部分接口逻辑进行了重构,优化了数据处理流程,减少了冗余查询,并针对高频接口进行了性能调优,以提升整体响应速度和稳定性。在联调过程中,我与前端和硬件同学保持了密切沟通,根据实际使用反馈不断调整接口设计,完善异常处理与返回信息,使接口更加规范、易用。这一过程让我深刻体会到后端不仅是“功能实现者”,更是系统各模块之间的枢纽,需要站在整体工程角度思考问题。通过 Beta 冲刺阶段的实践,我在后端架构理解、问题定位与协作开发方面都有了明显提升,也更加意识到代码可维护性和系统稳定性对于产品最终交付质量的重要意义,为 LifeFlow 项目的顺利完成提供了可靠的技术支撑。

肖铭昊

在Beta冲刺阶段,我全心投入到前端界面的二次深度优化与细节打磨工作中。相比于Alpha阶段侧重功能的“从无到有”,本次我更聚焦于“从有到优”的用户体验提升。针对此前存在的布局瑕疵与交互生硬问题,我进行了系统性的视觉重构,优化了Vue组件的CSS架构,并重新设计了部分交互反馈机制,使得页面在不同分辨率下的表现更加稳定且美观。虽然未直接参与后端硬件逻辑的开发,但我深知优质的UI是产品连接用户的核心窗口,因此在色彩规范统一、字体间距微调以及加载动画的流畅度上投入了大量精力。这段经历让我深刻体会到,前端开发不仅是代码的逻辑实现,更是一场对美学与体验的极致追求,同时也极大地提升了我对代码可维护性与细节把控的专业能力,为LifeFlow项目的最终高品质交付提供了坚实的视觉保障。

梅宇杰

在贝塔冲刺阶段,我主要负责数据库接口文档的整理与稳定对接工作。通过重新梳理接口字段、统一参数含义以及明确返回格式,我逐渐认识到接口规范对系统稳定性的关键作用。在实际联调过程中,很多问题并非代码错误,而是接口理解不一致导致的,这促使我更加重视文档的准确性和完整性。贝塔冲刺让我开始从整体工程角度思考问题,关注系统的可维护性与协作效率。通过这次实践,我提升了对数据库与接口协同关系的理解,也在问题分析能力和规范意识方面得到了明显锻炼,为后续项目开发积累了宝贵经验。

吴同堃

本次Beta冲刺中,我负责实现ESP32+OLED屏幕的硬件接入。这是我首次将硬件开发与Web应用集成,在开发过程中,我首先实现了SSD1315 OLED驱动,确保屏幕能够正常显示文本和简单图形。接着,我开发了ESP32的WebSocket服务器,实现了与前端的实时通信。通过优化定时刷新机制和通信协议,我解决了显示延迟和数据同步问题,确保了专注状态、倒计时和进度条的准确显示。通过解决OLED初始化失败、WebSocket通信不稳定等问题,我锻炼了问题分析和解决能力。这次经历让我更加坚信,跨领域的技术融合是未来软件开发的重要趋势,只有不断学习和实践,才能适应快速变化的技术环境。

王汉森

在 Beta 冲刺阶段,我主要负责对 LifeFlow 进行功能测试。通过和开发同学交流,我一边熟悉产品的使用流程,一边从用户角度反复体验核心功能。测试过程中,我也留意了很多小细节,比如“日常对话"ai的能力范围、“上传功能”的使用、弹窗提示的效果等,也为产品介绍作准备。团队还向我详细介绍了背后的业务逻辑,让我对产品有了更深入的理解。这段经历让我意识到,测试不只是“点点点”,而是连接用户与产品的重要一环。

五、仓库链接

已托管于https://github.com/Kortice/LifeFlow/tree/main/program/lifeflow

posted on 2025-12-15 20:35  SureyoungOuO  阅读(25)  评论(0)    收藏  举报

导航