软件工程第二次结对作业
软件工程结对作业:ProjectPartner
1. 作业要求
- 项目发布:
用户能够发布项目,描述项目的主要内容、目标、要求等信息。 - 招募项目伙伴:
其他用户可以浏览已有项目,并申请加入项目组,项目发起者可以选择接受或拒绝申请。 - 实时交流功能:
项目组成员可以使用实时聊天功能,方便进行项目中的讨论与沟通。 - 提交形式:
形式可为 WEB、APP 或小程序。 - 截止时间:
作业需在 2024年10月10日 23:59 前提交。
2. 结对同学信息
-
队员1: [队员1博客链接]
-
队员2: [队员2博客链接]
-
GitHub仓库: [https://github.com/Victor-Bayim/miniprogram-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. 项目功能需求
-
项目发布:
用户可以创建项目,填写项目信息,如项目名称、描述、开始时间和结束时间,并上传图片等信息。 -
招募项目伙伴:
其他用户可以浏览已有项目,申请加入项目组,项目发起者可接受或拒绝申请。 -
实时交流功能:
项目组成员可以通过聊天功能进行实时交流。 -
通讯录功能:
用户可以查看通讯录中的联系人和群聊,选择某一联系人或群聊进入聊天界面。
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 功能演示
- 项目发布功能:用户通过填写项目信息表单来创建新项目。
- 项目伙伴招募:其他用户可以查看项目详情并申请加入项目。
- 即时聊天功能:项目成员之间通过聊天界面进行实时沟通。
- 通讯录展示:用户可以通过通讯录找到联系人和群聊。
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 使用说明
- 下载项目到本地。
- 在终端运行
npm install
安装依赖。 - 使用
node server.js
启动服务器。 - 打开
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的使用十分熟练
需要改进的地方
在代码风格上,团队可以更加注意一致性。