软件工程第二次结对作业

软件工程结对作业:ProjectPartner

1. 作业要求

  1. 项目发布
    用户能够发布项目,描述项目的主要内容、目标、要求等信息。
  2. 招募项目伙伴
    其他用户可以浏览已有项目,并申请加入项目组,项目发起者可以选择接受或拒绝申请。
  3. 实时交流功能
    项目组成员可以使用实时聊天功能,方便进行项目中的讨论与沟通。
  4. 提交形式
    形式可为 WEB、APP 或小程序。
  5. 截止时间
    作业需在 2024年10月10日 23:59 前提交。

2. 结对同学信息

3. PSP表格

PSP2.1 个人开发流程 预估耗时(天) 实际耗时(天)
计划 5 8
估计 2 3
开发 3 5
需求分析 1 1
生成设计文档 1 1
设计复审 1 2
代码规范 1 1
具体设计 1 2
具体编码 3 6
代码复审 1 1
测试(自我测试) 1 1
报告 1 1
测试报告 1 1
计算工作量 1 1
事后总结 1 1
总计 8 8

4. 解题思路与设计实现说明

4.1 需求分析

小程序项目:ProjectPartner

1. 项目功能需求

  1. 项目发布
    用户可以创建项目,填写项目信息,如项目名称、描述、开始时间和结束时间,并上传图片等信息。

  2. 招募项目伙伴
    其他用户可以浏览已有项目,申请加入项目组,项目发起者可接受或拒绝申请。

  3. 实时交流功能
    项目组成员可以通过聊天功能进行实时交流。

  4. 通讯录功能
    用户可以查看通讯录中的联系人和群聊,选择某一联系人或群聊进入聊天界面。

4.2 系统设计

功能模块

  • 用户管理模块:包括注册、登录、用户信息管理功能。
  • 项目管理模块:项目的发布、浏览、修改、状态管理功能。
  • 聊天模块:为项目成员提供实时交流平台。

流程图

详见GitHub

5. 代码实现思路

5.1 技术选型

  • 前端: 使用 微信小程序 框架进行前端开发。
  • 后端: 使用 Flask 作为服务器框架,结合 Flask-SocketIO 实现实时通信。
  • 存储: 使用 JSON 文件来存储项目数据、用户信息、通讯录和聊天记录。

5.2 关键代码示例

# Flask API 示例:创建项目接口
@app.route('/api/projects', methods=['POST'])
def create_project():
    projects = load_projects()
    name = request.form.get('name')
    description = request.form.get('description')
    startDate = request.form.get('startDate')
    endDate = request.form.get('endDate')
    
    # 处理图片和项目其他信息
    new_project = {'name': name, 'description': description, 'startDate': startDate, 'endDate': endDate}
    projects.append(new_project)
    save_projects(projects)
    
    return jsonify({'success': True, 'message': '项目创建成功'})
### 5.2 关键代码示例
```javascript
// 示例代码:创建项目API
app.post('/createProject', (req, res) => {
    const newProject = new Project(req.body);
    newProject.save().then(project => {
        res.status(200).json({ message: "Project created!", project });
    }).catch(err => {
        res.status(400).json({ error: err });
    });
});

6. 项目成果展示

详见GitHub

6.1 项目页面展示

  • 项目列表页:用户可以浏览所有发布的项目,查看项目信息并申请加入。
  • 项目详情页:用户可以查看某个项目的详细信息,包括已加入成员。
  • 发布项目页:用户可以发布自己的项目,填写项目信息并上传图片。
  • 通讯录页:展示联系人和群聊,用户可以点击进入聊天界面。
  • 聊天界面:用户可以发送和接收消息,实现即时聊天。

6.2 功能演示

  1. 项目发布功能:用户通过填写项目信息表单来创建新项目。
  2. 项目伙伴招募:其他用户可以查看项目详情并申请加入项目。
  3. 即时聊天功能:项目成员之间通过聊天界面进行实时沟通。
  4. 通讯录展示:用户可以通过通讯录找到联系人和群聊。

7. 目录说明与使用说明

7.1 目录结构

ProjectPartner/
│
├── pages/                # 小程序页面代码
│   ├── login/            # 登录页面
│   ├── project-list/     # 项目列表页面
│   ├── publish/          # 发布项目页面
│   ├── chat/             # 聊天页面
│   └── contacts/         # 通讯录页面
│
├── backend/              # Flask 后端代码
│   ├── app.py            # 主后端逻辑文件
│   ├── users.json        # 存储用户数据
│   ├── projects.json     # 存储项目信息
│   ├── contacts.json     # 存储通讯录信息
│   └── chat_history_1.json  # 存储聊天记录
│
└── README.md             # 项目说明文件

7.2 使用说明

  1. 下载项目到本地。
  2. 在终端运行 npm install 安装依赖。
  3. 使用 node server.js 启动服务器。
  4. 打开 index.html 在浏览器中查看项目效果。

8. 单元测试

8.1 测试工具

使用了 Pytest 作为后端单元测试框架。

8.2 测试代码

def test_create_project(client):
    response = client.post('/api/projects', data={
        'name': 'Test Project',
        'description': 'A sample test project',
        'startDate': '2024-01-01',
        'endDate': '2024-12-31'
    })
    assert response.status_code == 201
    assert response.json['success'] is True

8.3 测试用例设计

  • 用例1:项目发布成功。
  • 用例2:用户申请加入项目时,项目人数已满。
  • 用例3:实时聊天信息传输正常。

9. GitHub代码签入记录

详见GitHub

10. 问题与收获

10.1 主要问题

我们在实现实时聊天功能时遇到了一些问题,解决方案是使用 WebSocket 并优化了消息传递机制。

10.2 结对问题

队员间的代码合并出现了冲突,最终通过 GitHub 的 pull request 机制解决。

11. 对队友的评价

值得学习的地方

朱佳杰在分析bug时非常细致,对项目整体结构的把握非常好。对ai的使用十分熟练

需要改进的地方

在代码风格上,团队可以更加注意一致性。

posted @ 2024-10-10 23:28  Victor·bayim  阅读(6)  评论(0编辑  收藏  举报