项目展示$\beta$
项目 | 内容 |
---|---|
课程:北航-2020-春-软件工程 | 博客园班级博客 |
要求 | Beta阶段项目展示 |
我们在这个课程的目标是 | 提升团队管理及合作能力,开发一项满意的工程项目 |
这个作业在哪个具体方面帮助我们实现目标 | 展示项目并总结 |
一、成员简介
个人介绍详见:团队介绍和采访
“假”相 | 姓名(博客园) | 成员简介 | 角色定位 |
---|---|---|---|
孙Y | 管控项目进度、成员任务分配、贡献分计算、项目部署、会议组织、项目分享、博客撰写等多种任务,参与模型推理部分后端功能的提供。 | PM/后端开发者/项目部署者/博客撰写者 | |
钟RH | 提出许多新颖的idea,推动前端部分进度。进行项目的部署并修复了很多bug。在beta阶段实现模型推理,改进问题反馈、用户注册。 | 前端负责人/项目部署者 | |
吴F | 查找了前端模板,实现了模型搭建模块的主要逻辑。在beta阶段实现封装,美化了搭建界面。 | 前端开发者 | |
苏HX | 实现了模型保存及帮助文档的前端逻辑。在beta阶段实现模型市场,并对文档进行大幅调整 | 前端开发者 | |
陈CW | 撰写了详细的帮助文档,设计了前后端对接的json接口,推动后端部分进度。在beta阶段搭建了许多经典模型并精心撰写了文档,协助封装功能的开发。 | 后端负责人/文档撰写者 | |
王Z | 5月初旬加入团队,使用Django协作前端模型市场的开发,参与功能测试及多个文档的撰写。 | 测试人员 |
二、软件工程
1. 团队概述
- 团队项目的目标:提升团队合作能力,了解工程开发流程,开发一项满意的工程项目
- 预期的典型用户:对深度学习感兴趣的人,pytorch初学者
- 预期的功能描述:继承了上一届的VisualPytorch,宏观架构基本一致。在上一届实现拖拽生成模型代码并提供打包下载、用户登录、访问量统计的基础上,\(\alpha\)阶段完成了扩展网络层、扩展参数等功能,\(\beta\)阶段完成了支持封装、模型共享、模型推理、图像增强等功能,让小白也能亲手实现目标探测、图像分类、图像分割等,感受深度神经网络的魅力。
由此可见,我们\(\beta\)阶段是功能开发的主要阶段,新增的功能都是原先没有的功能,需要自己从零开始造轮子,整个\(\beta\)阶段所做工作是相当丰富的。
具体内容见:功能设计 - 团队的产品如何满足了用户的需求:
- pytorch初学者由于对pytorch不够熟悉,不知道各个网络层以及全局参数应该怎么选择,在看了帮助文档中对所需参数的介绍后,配置出了自己的模型,并生成了代码,成功运行。
- 对于对深度学习感兴趣的人,我们在模型市场共享了经典模型,通过克隆模型就可以直接运行。除此之外,我们的模型推理部分直观地向感兴趣的人展示了深度神经网络的威力,可以自行上传图片实现目标探测、语言分割的功能。
- 总之,我们面向用户对于深度学习掌握知识的门槛变低了,基本上只要有兴趣就能亲自运行代码。
- 预期的用户数量:beta阶段访问量1000次,注册200人,生成模型数400个
2. 事后回顾
-
看到目标用户使用产品的过程和评价,见
用户反馈&bug
-
事先定义的目标达到了么:
- 历史访问量(1006+200=1206>1000)、注册人数(136+91=227>200)、模型生成数(466+55=521>400)达到了。
- 我们在两个服务器上分别部署了Django项目,可以看出来有域名解析的服务器显著多于没有域名的服务器。
- 在一个服务器上注册的账号可以在另外一个服务器上注册,两个服务器间数据是相互独立的。
-
团队的成员如何分工协作的?有什么经验教训?
在\(\alpha\)阶段互相之间可能存在误解,因为需求不是非常明确。在\(\beta\)阶段进行了改进,我们最初完全以目标驱动,将所有人分为了封装、模型市场、模型推理三个核心功能开发小组。除了小组每星期3次同步会以外,各小组每周都会自行开3次小会。
-
团队是如何进行项目管理的?
在\(\alpha\)阶段,github平台每人一个功能分支,相互之间可能有冲突,没有他人检查直接merge,并且开的issue没有和PR进行关联。
在\(\beta\)阶段有了显著的改进,基本上所有的提交都通过PR的形式,并且尽量做到了与issue的关联,虽然并不是所有的都严格这么执行的(因为会耗费大量时间),但是比起前一阶段有了大幅改进。
-
团队如何平衡 时间/质量/资源 争取如期完成任务的?
核心功能优先完成,在开发阶段集中完成核心功能,能肯定核心功能一定能完成。在后续稳定和测试阶段修复bug、调整界面、开发部分辅助功能。
3. 测试
-
测试用例数目,代码覆盖率数目
-
前后端结合:4个经典模型,从搭建到代码跑通得到正确率结果
-
功能测试:测试了页面的正常跳转,模型市场、模型推理部分所有操作的正常执行,详见测试矩阵
-
核心部分:包括封装部分、图像增强、生成代码的实现,增加了9组测试样例,总体覆盖率达到88%
-
-
运行测试用例得到代码覆盖率的视频录像
4. 文档与规范
-
代码规范在哪里?NAG小组代码规范
-
齐全的文档在哪里?
- 快速入门
- 经典模型
- 网络层及参数
- 技术博客列表
- rest api文档:Visual Pytorch
-
有些项目是在原来的基础上改进的,那么我们团队的软件工程项目质量有什么样的提高?
- github的使用有了大幅度改进。
-
原来的项目有些代码混乱,没有注释,没有详细的文档,你们的项目是如何更好解决这个问题的?明年的同学继续开发这个项目,会不会出现类似的抱怨?如果一个新学生在一台新机器上想编译并运行你的项目, 请问能顺利完成么?有什么样的文档能指导新学生?
-
留下了详细的接口设计文档:
- alpha前后端接口文档(一)
- alpha前后端接口文档(二)
- 6篇技术博客
-
为了降低他人对我们项目的门槛,专门写了nginx+uwsgi部署DRF项目踩坑,为了方便其他人去部署和运行,基本上任何人读过这篇博客都能很轻易运行github上的代码。
-
-
对于项目的目标用户是一般学生的项目, 你们如何找到学生做需求分析?他们给你什么样的反馈?
在需求分析中,我们以组内分析为主,不过也通过询问、调查等方式做了一些需求分析,比如将项目推广给同学时,会收集他们对项目的反馈信息。例如,有同学在使用后反映在项目生成的代码loss有点高,以及网站反应速度不够快的问题。我们尽可能修改了\(\alpha\)阶段同学们提出的添加新功能、搭建更稳定的模型、优化前端可视化等需求,但是由于时间和资源有限的问题,虽然在\(\beta\)阶段解决了很多,但是仍然不能达到理想的效果,我们欢迎下一届的同学们在我们项目的基础上继续创造性地开发。
我们的项目提供了问题反馈界面,用户可以直接在项目中反馈相关问题,包括有关用户需求方面的问题。但遗憾的是,目前还未收到有效的反馈信息。
-
所有的项目都会收集到用户的数据,请问你们对这类数据做了什么样的分析,这些分析如何验证或推翻了原来的假设?这些数据如何帮助项目改进软件工程的质量?
我们的项目中,共搜集了历史访问量、注册用户数和生成模型数三个数据。基本上都完成了预期的情况。我们新增的功能:模型市场的克隆有助于生成模型数的增加,模型推理,有助于访问量的增加。后续可能需要进一步细化的指标,比如活跃的用户量(访问次数超过10次,或模型生成数超过5次的用户),以更好评估我们的项目。
三、项目进展
1. 团队项目的实际进展:
燃尽图如下:我们在\(\beta\)阶段开了两个milestone,分别是Beta(功能完善),Bug(稳定与bug修复)。
由于Bug对应的milestone在稳定阶段(5.27日)才开放,并且添加了较多的issue(比Beta阶段11个多5个),使得燃尽图看起来前期比较拖沓,但实际上我们前期的燃尽线是在预期先不远的。我们可以看在5.26日scrum meeting 9对应的燃尽图:在没开Bug分支之前的还是基本上按照预定计划逐步进行的。
同时,我们因为在开发阶段(5.27之前)任务粒度过粗,比如模型市场,模型推理这样粒度相当粗,很可能要几天,甚至一个星期才能做完。在稳定阶段进行了大幅改进,所有的issue都能在一天内完成。
2. 发布的功能:发布声明\(\beta\)
3. 在哪里发布了软件, 用户反馈的截屏
菜市场、同学群、课程群、博客
四、团队成员在Alpha阶段的角色和具体贡献
1. 工作记录概览:
2. 互评
0:孙烨;1:钟瑞豪;2:吴凡;3:陈从文;4:苏海翔;5:王政
评分规则详见:团队贡献分分配规则
按照团队贡献分=300*(0.7*softmax(工作记录分+50)+0.3*softmax互评分)
得到以下结果:
名字 | 角色 | 工作记录分 | 互评分 | 团队贡献分 |
---|---|---|---|---|
孙烨 | PM | 157 | 0.16880017272157713 | 63 |
钟瑞豪 | 前端Dev | 100 | 0.1685446911891577 | 51 |
吴凡 | 前端Dev | 78 | 0.1660045733564089 | 45 |
苏海翔 | 前端Test | 119 | 0.16895804882334825 | 54 |
陈从文 | 后端Dev | 86 | 0.16829730468436088 | 47 |
王政 | 后端Test | 45 | 0.15939520922514724 | 40 |
五、特色功能
所做软件最有特色的功能是什么,请着重介绍一下。活的用户如何从你的软件中获益的,请现场展示。
页面 | 功能交互描述 | 页面展示 |
---|---|---|
登录界面 | 1、用户的登陆功能 2、用户的注册功能 3、注册时添加邮箱验证 |
|
框架构建 | 1、个性化构建自己的框架 2、能够保存为自己的个性化构建 3、弹框实现参数调整 4、能够使用已有模型作为中间层,支持封装 5、添加图像增强 |
|
模型管理 | 1、模型的删除功能 2、模型的查看 3、导出代码 4、模型的分享与取消分享 |
|
代码生成 | 1、根据所选框架生成特定代码 | |
问题反馈 | 1、可以向后台反馈存在的bug,可配图可配文件 2、可以看到之前反馈问题的应答 3、优化布局 |
|
模型市场 | 1、共享自己编辑的模型,并附上模型的说明 2、他人可进行模型的克隆 |
|
用户统计 | 1、统计网站ip的访问次数,记录用户使用人数 | |
关于我们 | 1、罗列有制作团队的具体信息,可以发邮件进行询问 2、调整成员信息及布局 |
|
帮助文档 | 1、快速入门:动图展示操作方式 2、网络层说明 3、静态参数说明 4、经典模型说明 5、图像增强说明 |
|
模型推理 | 1、选择Inference样例 2、上传图片,在线推理 3、查看模型架构及代码 |
六、用户反馈&bug
我们测试得到的bug详见:测试报告β
目前暂时未收到用户的反馈,但是目前有部分遗留问题,由于时间的限制及其他课程的压力未能完成,这些问题被我们留在了github的issue中。我们的项目还可以有以下的进步空间:
-
模型搭建导航栏、模型可视化:模型搭建界面有进一步优化的空间,如何使模型非常流畅地显示,简化用户操作,优化参数形式,甚至部分自动化
-
经典模型:我们搭建的模型不适用于许多情况,尤其是随着大量新型复杂的深度神经网络结构的出现,如shuffle,ROI pooling的出现,很多网络都无法搭建。
-
模型参数分析与可视化:参数的数量有多少、数据流的shape显示,有关参数的部分可以进行改进。
-
模型推理部分:可以添加更多的推理应用;如何解决网页运行缓慢,加载很久也是很重要的问题。
七、课程总结
总结 | 在Beta阶段学到了什么 | 对软件工程的教育、课程的批评建议 | 感谢 |
---|---|---|---|
孙烨 | 老师助教都知道,在\(\alpha\)阶段,虽然我们是7个人,但是由于组员不配合,最后实际上是5个人在开发。为了与两个人取得联系花了不少精力,同时项目管理不完善,造成了不必要的困难。这些在\(\beta\)阶段好了很多。 | 任务量有点大,要求较多,希望能够体谅一下学生(学习一下WJY) | 我感谢所有人对我的支持。说实话,作为一个PM来说,所承担的压力不仅来源于外部(老师,用户),还来源于内部(组员是否配合)。在\(\beta\)阶段,没有一位组员不积极参与工作,相对来说比较顺利。 |
钟瑞豪 | beta阶段建立了项目网站的三大核心功能,由于前端工作较多,且相对独立,总的来说开发过程比较顺利。出于人手问题,我负责的部分并没有相应的后端支持,所以开发时兼职了前后端的各项工作。优点是较好的理解了项目所使用的技术栈,缺点是工作量相对较多。项目所使用的bootstrap框架回想起来缺点很多,但作为前端新手,它很好的解决了短期项目需求。总的来说,在软工课中的收获还是比较大的。 | 无 | 感谢吴凡同学对我的帮助。初入项目时我对前后端框架一无所知,在他的帮助下,较为快速的理解了项目的技术栈。 |
吴凡 | 这学期软件工程我收获了很多,包括同学之间的互相帮助以及技术上大家相互支持,相互信任。最终能够做出一个基本满足当初预想的任务。 | 我希望软件工程这门课在以后能够加入一些技术上的支持,设计理论脱离技术都是站不住的,没有实践就没有对理论的深刻体会 | 我感谢孙烨对我的帮助,因为他担负起一个PM应该做的事情,对我常常的忘事给予了很多包容 |
苏海翔 | 感觉beta阶段比起alpha阶段做的工作更多更具体了,也感觉到了软件工程是如何在软件的开发周期中发挥其作用的。如果不是因为临近期末,其他课程的作业众多外加准备各种考试,可能会有一个更好的呈现效果。 | 还是时间因素的问题吧,感觉上这门课还是要考虑很多其他的因素,不只是安排这门课程的时间,还要考虑其他课程所占用的时间,然后调整一下时间安排,这样学习的压力小一些,同时开发出的软件的效果也更理想。 | 我感谢 孙烨 对我的帮助,因为作为PM,他在项目安排和问题处理上面反馈得非常及时; 我感谢 王政 对我的帮助,因为他可以按照我的要求开发合适的后端接口并告诉我如何使用; 我感谢 钟瑞豪 对我的帮助,因为他也经常回复我在大群里问的问题。 |
陈从文 | Beta相较于ALPHA阶段而言需要开发的内容较多,我们的PM提出了合理的要求并且内容进行划分分别开发完成。总体上进展还是比较顺利的,我也完成了自己份内要求的工作,同时团队协作能力也相较于alpha阶段有了较大的提高。小组成员讨论热情也比alpha阶段有了较大的提高。由于beta阶段的任务分配较为清晰,同时工作内容较为明确,开发过程中对于需求的变动较小,因此开发速度比较高效。通过我们对于该项目的开发,我学习到了团队协作的技巧并培养了自己的开发能力,对于今后的职业发展必然会有较大帮助。 | 项目开发上大致进展顺利,然而有很多的不足之处。首先没有专门的进行测试的同学,主要由各模块的开发者进行分别测试,导致模块进行组合时出现了许多意料之外的BUG。其次github要求虽然相较alpha阶段有所增强,但总体上使用还不是特别到位,可以有所强化。课程上而言本学期由于无法进行当面开发和沟通,因此难度还是比较大的。我认为项目开发中助教似乎没有太多地参与开发流程,理论上可以发挥更好的作用。此外对于github等开发工具的使用可以在团队项目开始之前要求所有同学进行一定的学习,可以减少团队项目开始后产生的不必要的问题。 | 我感谢WF、SY对我的帮助。SY作为PM合理的设置并划分了任务工作,让我们高效地进行开发。WF与我一起完成了代码生成部分的开发工作, 总体上开发速度和软件质量还是不错的。 |
王政 | 在Beta阶段的团队开发中,学习了Django网页开发框架,前后端交互的一些基本流程。将软件工程的知识投入实践,了解了团队合作的重要性。 | 博客作业内容很多,很繁杂,除了与项目切实相关的,其他都感觉意义不大。 | 我感谢 苏海翔 对我的帮助, 因为某个具体的事情: 合作实现模型市场的过程中,认真谨慎,在我因为个人原因拖了进度时,尽力完成前后端对接,且帮我理解前端代码结构。 |
PS:下图为深度学习课程老师对任务的简化,希望软工老师也能体谅一下