线上地址:http://47.94.141.56/html
前端仓库:https://github.com/MinJieDev/Roadmap-Frontend前端
后端仓库:https://github.com/MinJieDev/Roadmap-Backendvue
日会汇总:https://www.cnblogs.com/minjiekaifa/p/Scrum_Meetings.htmlios
功能规格:http://www.javashuo.com/article/p-wqsswgyj-nh.htmlnginx
技术规格:http://www.javashuo.com/article/p-fwhgjhii-nh.htmlgit
请参考团队介绍博客 http://www.javashuo.com/article/p-hzzarakr-nm.htmlgithub
PM:hdlvuex
前端:zwx yzn ljy ymchrome
后端:zzy zxz数据库
Realease Alpha v0.1.0: 发布声明
Realease Alpha v0.1.1 20200507:
[问题修复]
[新增功能]
部署形式:nginx+uwsgi,双环境
数据库开放了测试环境与生产环境,经过替换服务器配置文件实现对不一样环境的链接(默认开发时使用测试环境,线上使用生产环境)
发布流程:
前端:打包dist并推至服务器,nginx分发容许了热更新
后端:服务器上拉取生产分支prod,(迁移数据库后)uwsgi --reload roadmap.pid
实现热更新
Alpha阶段预期用户数量:超过100人
实际注册用户数量:78人(截至5月8日)
分析:
咱们的推广思路起初不够开放,起初只是像其余团队同样在学生大群中进行广告投放。考虑到群内本科生(多为2017及2018级的大2、大三学生)大多还对文献阅读没有需求,这样的推广收效甚微。
5.6及5.7完成alpha阶段主体开发更新后,咱们调整思路,进行定向投放,向认识的同窗中已经参与科研的同窗进行说明推广,用户量快速增长了一倍。
有理由相信在完成了后续开发完善并使得产品更易用后,咱们延续该思路推广能更快速地斩获用户。
咱们在页面中设置了反馈入口,Alpha期间收到39条反馈:
滤除无效信息,列举有参考意义的反馈以下:
6: 从bibtex导入这个功能作的很好啊,很方便就能导入不少文章
38: 导入Bibtex这个功能不错,不用一条一条往里面加
这是对咱们在alpha期间实现的“bibtex批量文献导入”功能的正向反馈。实际上这个需求是在alpha版本发布前的课上讨论上就被老师提出的,可见其极大补充了文献管理功能。相应的,有用户提出了进一步的需求:
20: 有批量导出bibtex么
17: 赞啊 看paper就靠它了 能不能导出冯如杯格式的文献引用啊,这几天快被他搞疯掉了
这是一个很是合理的需求。若是把咱们的产品归入学术工做流考虑,写论文时若是能够批量导出先前逐条添加的文献将很是便捷。咱们已经计划在beta阶段实现该需求,前置需求:[为文献table view添加复选框和全选按钮]正在开发
10: 前端很好看,要是有个help页面就更好了
12: 是花花让我随便骂的!并且他说我是目标用户我就姑且是了!可是我没用过相似的文献管理app,不知道怎么用!因此推荐大家添加一个About页面!目前就是这样!
这些反馈实际上说明咱们对产品的使用说明与用户引导作的还不够好。在看到该需求后咱们已经第一时间为路书编辑器添加了操做帮助,同时正在调研更好的引导方法与相应代码工具。或许写一篇路书教用户如何使用路书是一个不错的主意?
8:中间的body有点小宽了
14: 能够作一下手机端自适应,手机点开比较混乱哈!其余都挺好的
这些是用户提出的对界面布局及设备适配的需求。实际上咱们初期受限于开发精力,并无对此做出太多考虑。可是考虑到如今移动端设备高度普及,一些基本的适配仍是必要的。咱们会在beta阶段视开发进度安排决定是否进一步解决这个问题
23: 验证码太难了(哭\n试了3次都不对
20: 登陆的验证码太难了!!!
这是feature。咱们认为对大多数天天看内存模型或者变分推断相关文献的用户来讲,口算百之内加法并不算太难。(yzn:已经调整为30之内加法)
9: 加油呀!没有域名的大哥哥!
缺钱。腾讯云域名备案导入阿里云有点困难。此外咱们原计划beta之后的最终的发布形式将是相似overleaf同样的可自部署的私有云服务,所以这个地址也能够视做一个非正式的live demo
10: 用户名不支持中文编码 但愿有空能够改进哦
已知问题。不支持中文是数据库对用户名域设置了latin编码,这个扔将维持,可是前端注册时须要提供更易于理解的错误反馈。将在beta加强
27: 好使啊。但愿有相似博客的交流系统
37: 有没有交友功能啊
28: 但愿能有大佬分享一波本身的路书
社交与学术社区其实是Mendely等产品的杀手功能,但考虑实现难度咱们暂时不予考虑。做为折衷方案,咱们在alpha版本提供了路书的分享外链功能,用户能够生成一条路书的分享连接并经过其余社交媒体传播,站外用户借助这个外链能够无需登录就看到别人分享的路书。
34: 挺好的工具,能搞个微信小程序么
暂时不予考虑。但先后端分离确实容许咱们这样作,或许能够做为之后的软工课程迭代方向。
总结:用户们对咱们的评价是十分中肯而友善的,咱们也借助这些反馈发现了不少不足,完善了不少以前没有考虑的细节,肯定了后续开发的方向。
Q: 对于项目的目标用户是通常学生的项目, 大家如何找到学生作需求分析?他们给你什么样的反馈?
A: 群发vs逐个推销,后者数量少但反馈质量通常更高
咱们的开发协做是网状的:每次同步会你们肯定接下来一个小阶段的开发目标与各自负责方向,而后采用分散开发的形式各自完成开发工做。若是遇到问题须要协做解决,由PM组织小规模会议迅速聚焦问题。在两至三天的迭代后再此进行全体同步会继续推动。期间穿插结对编程与互动式review,实现项目的异步-同步推动。
即,咱们的整体流程是:同步会 - 小规模会与分散开发 - pr与review - 小规模会与分散开发 - ... - 同步会
在关键开发节点(如冲刺末尾、发布前),根据进度须要安排集中开发,共同解决最后余留的问题,并集体review发布前的代码,完成冲刺
全部的代码首先要从主分支(dev分支)迁出,修改后提交到一个新分支(或本身的fork),再发起pull request合入dev分支。要求合并至dev前必须被至少一名其余开发者复审
发布时将dev分支的代码并入prod分支,要求必须至少2人参加复审
这样的双主分支工做流,容许在发布前拥有一个汇总分支(dev),全部测试工做在其上完成无误后再实际并入发布分支(prod),为生成环境创造一个错误缓冲区,也方便以后引入CICD
Q: 团队如何平衡 时间/质量/资源 争取如期完成任务的
在不可替代性与可替代性中取得平衡
咱们的分工安排,每一个人主要专精一个小方向的开发,使他/她能够大幅节约开发时的学习成本,这是开发者的不可替代性。同时同步会又要求全部人必须理解、熟悉其余人的代码,使得每一个人都具有可替代性。
这样,开发能够高度并行化展开,每一个人总主要负责推动本身所负责的小方向;当某个方向的开发遇到阻力时,即可以抽调其余方向的开发人员进行协助。
这能够自适应地最大化时间利用效率。
同时,咱们频繁引入、穿插结对编程,以此进一步优化开发效率。
测试方法论:后端狠,前端稳
前端随发布随测,团队成员的开发环境覆盖了windows、ubuntu1604/1804和mac xos,浏览器覆盖ff、chrome。beta时可能考虑引入e2e测试
单元测试主要针对后端展开,前端主要以表格枚举测试为主(参考测试报告)
后端目前为全部模型接口的CURD行为与权限添加了单元测试,共11个case
借助coverage实现后端测试覆盖率分析:
Name Stmts Miss Cover ----------------------------------------------------------------------- roadmapBackend\__init__.py 0 0 100% roadmapBackend\settings.py 22 0 100% roadmapBackend\urls.py 3 0 100% roadmapData\__init__.py 0 0 100% roadmapData\admin.py 5 0 100% roadmapData\apps.py 3 0 100% roadmapData\migrations\0001_initial.py 9 0 100% roadmapData\migrations\0002_feedback.py 4 0 100% roadmapData\migrations\0003_auto_20200430_0001.py 6 0 100% roadmapData\migrations\0004_roadmapshareid.py 5 0 100% roadmapData\migrations\0005_auto_20200501_1357.py 4 0 100% roadmapData\migrations\0006_tags.py 6 0 100% roadmapData\migrations\0007_auto_20200504_0914.py 6 0 100% roadmapData\migrations\0008_auto_20200504_0925.py 4 0 100% roadmapData\migrations\0009_auto_20200504_0928.py 6 0 100% roadmapData\migrations\__init__.py 0 0 100% roadmapData\models.py 41 0 100% roadmapData\serializers.py 36 0 100% roadmapData\tests.py 197 0 100% roadmapData\urls.py 15 0 100% roadmapData\utils.py 56 5 91% roadmapData\views.py 90 9 90% ----------------------------------------------------------------------- TOTAL 518 14 97%
对于前端代码,咱们使用eslint进行自动化的代码质量检查
对于后端代码,咱们要求全部提交的代码必须经过ide自带的格式化(基于pep8)
此外在review时会进行必定程度的代码质量复审,如命名等。原则上,不影响理解的代码都能经过,咱们只追求自注释的清晰代码,不但愿把大部分时间花费在维护commit与注释上。
不齐全,但够用。咱们的宗旨是避免一切低效的文档工做
两个代码仓库分别有基本的部署文档,同时,
前端:页面即文档/注释即文档。api调用封装为一个总的函数入口,借助restful api设计使得全局的数据请求逻辑类似。每一个view拆分红一个vue组件,使得页面逻辑内聚,可读易懂
后端:自动化文档。借助django restful framework与coreapi生成的自动api文档,便利先后端协做的同时解放后端同窗双手
姓名 | 任务 | 按时(-5~1) | 质量(-2~2) | 任务量(1~5)x10 | |
---|---|---|---|---|---|
hdl | 初始化CI/CD | -1 | 1 | 3 | 30 |
hdl | 路书编辑中自动添加引用关系 | 0 | 1 | 3 | 31 |
hdl | 将author和note绑定在表单中 | 1 | 2 | 1 | 13 |
hdl | hdl: fix bugs: editor; reader; router; package.json | 0 | 1 | 3 | 31 |
hdl | Hdl add markdown preview and style | 0 | 1 | 3 | 31 |
hdl | 博客撰写/PM工做/汇报展现 | 0 | 0 | 50 | 500 |
636 | |||||
ljy | 错误处理模态框封装 | 1 | 1 | 1 | 12 |
ljy | 为文献管理列表添加按钮栏 | 0 | 1 | 1 | 11 |
ljy | 添加文献CU表单面板 | 0 | 2 | 4 | 42 |
ljy | 添加路书管理table view | 0 | 1 | 5 | 51 |
ljy | 文献CU抽屉绑定form data | 1 | 0 | 4 | 41 |
ljy | 文献表单数据项中增长[引用关系] | 0 | 1 | 2 | 21 |
ljy | 用户反馈收集 | 0 | 2 | 4 | 42 |
ljy | 退出按钮 | 0 | 1 | 3 | 31 |
ljy | BibTex import in article table | 0 | 1 | 4 | 41 |
ljy | 添加文献笔记markdown编辑器 | 0 | 1 | 3 | 31 |
ljy | Change the description in README | 0 | 1 | 1 | 11 |
334 | |||||
ym | 引入table view组件 | 0 | 2 | 4 | 42 |
ym | MindTable组件添加data属性并接入 | 0 | 2 | 2 | 22 |
ym | 文献管理页接入数据加载api | 0 | 2 | 1.5 | 17 |
ym | 文献管理页增删查对接后端数据api | 0 | 1 | 3 | 31 |
112 | |||||
yzn | 配置并封装axios | 1 | 1 | 2 | 22 |
yzn | 为axios配置拦截器 | 0 | 1 | 3 | 31 |
yzn | 合并req函数的param与data参数 | -1 | 1 | 1 | 10 |
yzn | 文献管理页接入数据加载api | 0 | 1 | 1.5 | 16 |
yzn | 登录界面与缓存 | 0 | 1 | 4 | 41 |
yzn | 具备权限认证的Request接口 | 1 | 1 | 3 | 32 |
yzn | 注册界面 | 0 | 1 | 5 | 51 |
yzn | 增长卡片式的登陆欢迎界面 | 1 | 1 | 5 | 52 |
255 | |||||
zwx | 接入vue-mindmap | 0 | 1 | 1 | 11 |
zwx | 配置vuex | 0 | 1 | 1 | 11 |
zwx | 添加“新建结点”与“新建链接”按钮控件 | 0 | 1 | 4 | 41 |
zwx | mindmap编辑器加强 | 0 | 1 | 4 | 41 |
zwx | 路书编辑接入api:获取文献列表 | 1 | 1 | 3 | 32 |
zwx | 路书编辑:接入路书加载api | 0 | 1 | 3 | 31 |
zwx | 路书编辑:接入路书上传API | 0 | 2 | 3 | 32 |
zwx | 路书管理页面接入API | 0 | 0 | 3 | 30 |
zwx | 路书添加title CUR | 0 | 1 | 3 | 31 |
zwx | 建立reader view | 0 | 1 | 3 | 31 |
zwx | 路书接入描述 | 0 | 0 | 2 | 20 |
zwx | 路书添加结点id-title映射 | 0 | 1 | 4 | 41 |
zwx | 路书样式:文献节点颜色;线形加箭头;拖拽节点去抖动 | 0 | 1 | 4 | 41 |
zwx | add share button in editor and reader; fix share cannot get article bug | 0 | 1 | 1 | 11 |
zwx | login-error-modal-fix | 0 | 1 | 3 | 31 |
zwx | 路书编辑器加强:点击事件编辑路书 | 0 | 1 | 5 | 51 |
zwx | 为编辑器添加快捷键 | 0 | 2 | 4 | 42 |
zwx | 添加Icon 添加帮助 | 0 | 1 | 2 | 21 |
zwx | 路书阅览和编辑界面展现note | 0 | 1 | 3 | 31 |
580 | |||||
zxz | 添加requirements.txt | 0 | 1 | 1 | 11 |
zxz | 添加素材实体序列化器 | 0 | 1 | 3 | 31 |
zxz | 完善API接口 | 0 | 1 | 2 | 21 |
zxz | 增长路书名称字段 | 1 | 1 | 3 | 32 |
zxz | 文献双向引用 | 0 | 1 | 3 | 31 |
zxz | fix bug: modify article_references symmetrical from true to false | 0 | 1 | 3 | 31 |
zxz | 容许空的URL | 0 | 1 | 1 | 11 |
zxz | 添加JWT登陆认证 | 0 | 1 | 4 | 41 |
zxz | 添加用户反馈接口 | 1 | 1 | 2 | 22 |
zxz | remove feedback permission | 0 | 1 | 3 | 31 |
zxz | change user-article relationship to 'one2one' | 0 | 1 | 2 | 21 |
zxz | 添加Permission测试和Auth测试 | 0 | 1 | 4 | 41 |
总 | 324 | ||||
zzy | 根据ER图添加Models | 0 | 2 | 1 | 12 |
zzy | 添加用户与路书实体序列化器 | 1 | 1 | 2 | 22 |
zzy | 生成简易接口文档 | 0 | 2 | 2 | 22 |
zzy | 添加单元测试 | 0 | 1 | 3 | 31 |
zzy | 完善API接口 | 0 | 1 | 1 | 11 |
zzy | ignore venv; setting allow all host | 0 | 2 | 1 | 12 |
zzy | fix bug: add id for roadmaplist | 0 | 1 | 1 | 11 |
zzy | Add jwt | 0 | 1 | 2 | 21 |
zzy | 后端支持tags | 0 | 2 | 3 | 32 |
zzy | 随笔curd | 0 | 1 | 3 | 31 |
zzy | 添加models的CURD测试 | 1 | 1 | 4 | 42 |
总 | 247 |
根据[知识路书]团队贡献分数分配方案获得最终分配:
总分 | 636 | 334 | 112 | 255 | 580 | 324 | 247 | 2488 |
---|---|---|---|---|---|---|---|---|
比例 | 0.25562701 | 0.13424437 | 0.04501608 | 0.10249196 | 0.23311897 | 0.13022508 | 0.09927653 | 1 |
实际量化分 | 8.94694534 | 4.69855305 | 1.5755627 | 3.58721865 | 8.15916399 | 4.55787781 | 3.47467846 | 35 |
去重量化分 | 8 | 6 | 2 | 4 | 7 | 5 | 3 | 35 |
总分 | 53 | 51 | 47 | 49 | 52 | 50 | 48 | —— |
hdl:PM初体验。感受本身不少地方作的不是很好,好比开完会后老是不能即便完成博客记录、给你们分配的任务常常乱七八糟。好在队友各个都很能打,你们一块儿写出本身(和用户)须要的、喜欢的产品,一点一点打磨,这个过程很开心。软工的敏捷开发实践带给我良多收获,好比如何向其余人清楚表述个人想法,如何向他人请教问题更能节省双方时间,如何更快让别人理解个人思路云云。以前一直对PM这个岗位有一些偏见与误解,实际上手干起来发现PM这个岗位是软件团队中的掌舵者,责任重大,一点也没必要开发轻松,不只要对项目、对技术、对功能需求足够熟悉,还要学习一些管理技巧,确保团队的开发进度与方向正常。这再一次启发我,软件工程是一门十分深奥的管理哲学。