项目展示$\alpha$
| 项目 | 内容 |
|---|---|
| 课程:北航-2020-春-软件工程 | 博客园班级博客 |
| 要求 | 强制转会与项目展示 |
| 我们在这个课程的目标是 | 提升团队管理及合作能力,开发一项满意的工程项目 |
| 这个作业在哪个具体方面帮助我们实现目标 | 展示项目并总结 |
VisualPytorch发布地址如下:
http://114.115.148.27/static (华为1核1G服务器,未备案)
http://39.97.209.22/static (阿里云1核2G服务器,已备案,可直接通过 http://visualpytorch.top/static 访问)
一、成员简介
个人介绍详见:团队介绍和采访
| “假”相 | 姓名(博客园) | 成员简介 | 角色定位 |
|---|---|---|---|
![]() |
孙Y | 管控项目进度、成员任务分配、贡献分计算、项目部署、会议组织、项目分享、博客撰写等多种任务。 | PM/后端开发者/项目部署者/博客撰写者 |
![]() |
钟RH | 提出许多新颖的idea,推动前端部分进度。进行项目的部署并修复了很多bug。 | 前端负责人/项目部署者 |
![]() |
吴F | 查找了前端模板,实现了模型搭建模块的主要逻辑。 | 前端开发者 |
![]() |
苏HX | 实现了模型保存及帮助文档的前端逻辑。 | 前端开发者 |
![]() |
陈CW | 撰写了详细的帮助文档,设计了前后端对接的json接口,推动后端部分进度。 | 后端负责人/文档撰写者 |
![]() |
许TL | 4月中旬加入团队,在后端进行部分辅助工作。 | 后端开发者 |
二、软件工程
1. 团队概述
- 团队项目的目标:提升团队合作能力,了解工程开发流程,开发一项满意的工程项目
- 预期的典型用户: 学生,deep learning初学者
- 预期的功能描述:继承了上一届的VisualPytorch,宏观架构基本一致。在上一届实现拖拽生成模型代码并提供打包下载、用户登录、访问量统计的基础上,添加更多的网络层,支持封装、经典模型、模型共享等功能,让小白也能亲手实现图像分类、图像分割等功能。具体内容见:功能设计
- 预期的用户数量:alpha阶段注册100人,生成模型数300个
- 团队的产品如何满足了用户的需求:deep learning初学者由于对pytorch不够熟悉,不知道各个网络层以及全局数据的参数应该怎么选择,在看了帮助文档中对他所需参数的大致介绍后,配置出了自己的模型,并生成了代码,成功运行。
2. 事后回顾
看到目标用户使用产品的过程和评价,见
用户反馈&bug
事先定义的目标达到了么:模型生成数(332)达到了,但注册人数(64)还差一点,可能有以下原因:
- 项目还不足够吸引人:没有满足面向用户的需求,之前预定的封装功能还没有实现
- 使用起来还不方便
- 网站的安全机制,加载速度不尽人意
- 宣传力度还不够
团队的成员如何分工协作的?有什么经验教训?
分为前端和后端两部分,由PM进行协调工作。互相之间可能存在误解,因为需求不是非常明确。
团队是如何进行项目管理的?
通过github平台每人一个功能分支。
团队如何平衡 时间/质量/资源 争取如期完成任务的?
实际上并没有完全按照需求完成任务。由于时间不足,开发仅有两个星期,同时免费版Jsplumb不支持,
网络层封装这一功能还是没有实现,因此在此基础上的经典模型也不能实现。转而实现了扩展更多的静态参数(如损失函数、优化器等)及模型保存。
3. 测试
测试用例数目,代码覆盖率数目
前后端结合:4个数据集对应的经典模型,从搭建到代码跑通得到正确率结果
后端:使用Anaconda的coverage库进行后端覆盖率测试,19个样例(9个测试网络层,9个测试静态参数),总体覆盖率达到88%
运行测试用例得到代码覆盖率的视频录像

4. 文档与规范
代码规范在哪里?NAG小组代码规范
齐全的文档在哪里?
- 前后端接口文档:alpha前后端接口文档(一) alpha前后端接口文档(二)
- 使用帮助文档:帮助文档 帮助文档2
- rest api文档:Visual Pytorch
有些项目是在原来的基础上改进的,那么我们团队的软件工程项目质量有什么样的提高?
在前端设计与后端编译上有明显的提高。
- 后端:新增了6类网络层,并对原有的网络层参数进行扩充。同时新增多种静态参数(如损失函数、优化器等)
- 前端:对原有页面进行了改进设计,并新增了多个页面,根据后端新增内容添加模型创建页面内容。
- 测试方面,原有项目仅对后端用户注册登录模块进行了自动化测试,本项目则对后端一系列方法进行了自动化测试,大大提升了代码覆盖率。
原来的项目有些代码混乱,没有注释,没有详细的文档,你们的项目是如何更好解决这个问题的?明年的同学继续开发这个项目,会不会出现类似的抱怨?如果一个新学生在一台新机器上想编译并运行你的项目, 请问能顺利完成么?有什么样的文档能指导新学生?
- 事实上原有项目留下了详细的接口设计文档,但是仍有大量的框架学习与代码阅读任务。
- 前后端均学习Django/DjangoRestfulFrameWork,后端重点在于修改Json并根据Json输出对应代码,前端重点学习了JS/CSS/HTML/JQuery/Jsplumb等知识,通过修改Bootstrap模板解决了设计问题,通过与后端交流Json传输格式解决了新增网络问题。
- 明年的同学做增量开发时也会面临大量的框架学习与代码阅读任务,其对应的时间投入很难降低(即使我们已经有了详细的前后端接口文档)。
- 编译运行较为简单,根据ReadMe进行实现即可。
5. 需求分析
对于项目的目标用户是一般学生的项目, 你们如何找到学生做需求分析?他们给你什么样的反馈?
在需求分析中,我们以组内分析为主,不过也通过询问、调查等方式做了一些需求分析,比如将项目推广给同学时,会收集他们对项目的反馈信息。例如,有同学在使用后反映在项目生成的代码loss有点高,以及网站反应速度不够快的问题,我们将在以后的版本中进行相应调整。

除此之外,我们的项目还提供了问题反馈界面,用户可以直接在项目中反馈相关问题,包括有关用户需求方面的问题。不过,目前还未收到有效的反馈信息。
在接下来的版本中,我们会结合现有项目,做更为深入的需求分析。
所有的项目都会收集到用户的数据,请问你们对这类数据做了什么样的分析,这些分析如何验证或推翻了原来的假设?这些数据如何帮助项目改进软件工程的质量?
我们的项目中,共搜集了历史访问量、注册用户数和生成模型数三个数据。
我们分析了访问量的情况,感觉访问量并不如我们的预期,可能是由于我们的宣传力度不够大,也可能是由于对可视化神经网络模型的兴趣没那么高,也可能是生成的代码性能不理想等其他原因。注册用户数和生成模型数也是类似的结论。
三、项目进展
1. 团队项目的实际进展:
使用了工作记录代替燃尽图,因为其信息含量更大,更能反映小组成员的工作。

2. 发布的功能:
详见发布声明α
3. 在哪里发布了软件, 用户反馈的截屏
菜市场、同学群、博客

四、团队成员在Alpha阶段的角色和具体贡献
1. 工作记录概览:

2. 互评

0:孙烨;1:钟瑞豪;2:吴凡;3:许天立;4:康洪基;5:陈从文;6:苏海翔
评分规则详见:团队贡献分分配规则
按照团队贡献分=300*(0.7*softmax(工作记录分+50)+0.3*互评分)得到以下结果:
| 名字 | 角色 | 工作记录分 | 互评分 | 团队贡献分 |
|---|---|---|---|---|
| 孙烨 | PM | 178 | 0.15976067589741974 | 68 |
| 钟瑞豪 | 前端Dev | 130 | 0.15553176387411125 | 58 |
| 吴凡 | 前端Dev | 69 | 0.15702927958866533 | 45 |
| 苏海翔 | 前端Test | 101 | 0.1547674682579001 | 52 |
| 陈从文 | 后端Dev | 98 | 0.15643689451435042 | 52 |
| 许天立 | 后端Test | 0 | 0.12225508130759383 | 25 |
五、特色功能
所做软件最有特色的功能是什么,请着重介绍一下。活的用户如何从你的软件中获益的,请现场展示。见 VisualPytorch
| 页面 | 功能描述 | 页面展示 |
|---|---|---|
| 登录界面 | 1、用户的注册功能 2、用户的登录功能 |
![]() |
| 框架构建 | 1、个性化构建自己的框架 2、能够保存为自己的个性化构建 3、能够实现参数调整 |
![]() |
| 模型管理 | 1、模型的删除功能 2、模型的查看 3、导出代码 |
![]() |
| 代码生成 | 1、根据所选框架生成特定代码 | ![]() |
| 问题反馈 | 1、可以向后台反馈存在的bug 2、可以看到之前反馈问题的应答 |
![]() |
| 用户统计 | 1、统计网站ip的访问次数,记录用户使用人数 | ![]() |
| 关于我们 | 1、罗列有制作团队的具体信息,可以发邮件进行询问 | ![]() |
| 帮助文档 | 1、动图展示操作方式 2、对模型参数的文档 | ![]() |
六、用户反馈&bug
我们测试得到的bug详见:测试报告α
以下4个评价,在用户体验上反映出了不同的bug:
1. 助教:
用户注册的时候是否会考虑到强校验呢?
试了一下,用户名长度、符号,密码长度、符号没有校验,没有邮箱验证。
安全性这方面,如果想攻击服务器的话,脚本批量发送POST请求会产生垃圾用户数据,量大可能会拖垮服务器。
这确实是我们没有考虑到的bug。
前端JS中对长度是有限制的,比较宽松。后端对应部分直接继承原本项目的代码,未做修改。邮箱验证后续版本会通过django相关插件实现,提升安全性。
2. 昂神:
建议把静态资源整合整合,现在资源请求太多了加载贼慢
还有有条件的话建议挂上cdn
以及感觉还算来得及的话,js部分可以整合整合逻辑,更来得及一点的话,可以干脆换上vue
在1核1G的服务器上挂载的静态资源太多,现已将gif及图片改成外链接的形式,缓解资源请求压力。后续考虑其他缓解方式。
3. 同学A:
不支持经典模型的导出,搭建一个模型对于一个新手来说还是太麻烦
建议设置一些典型的样例,不然根本不知道该怎样操作
本来在\(\alpha\) 阶段应该实现经典模型功能的。实际上后端json已经基本实现了。但无奈卡在了前端工具上,\(\beta\)阶段会实现这一功能。
4. 同学B:
你们的项目对于我来说没有什么吸引力,感觉拖来拖去还没有手写来得方便
建议添加一些新功能,比如inference,实时查看你们代码的效果
这位同学说的的确很正确,我们的项目对于多数人来说没有什么吸引力,很少会有人直接用我们的网站去写代码。后续添加inference(推理)功能,上传训练好的模型在线推理,用户可以在线运行。
七、总结&计划
1. 每人总结
| 总结 | 在Alpha阶段学到了什么 | 对软件工程的教育、课程的批评建议 |
|---|---|---|
| 孙烨 | 对于这一庞大的工程进行分解,合理分工,协作完成。在讨论和会议中锻炼自己组织和管理能力。 了解了如何做一个PM协调小组成员,清晰了项目从设计到发布维护的全过程。 |
老实说,课程设计的不是很人性化,让我想起上学期的无线网络系统:老师以为我们会了一切,却根本不能理解作为刚入门学生进行工程化项目的曲折之路,但是又一边Push进度,提出很多强制要求。 实际上痛苦过后才会有收获,被软工折磨的日日夜夜,成长和收获也是成正比的。 |
| 钟瑞豪 | 系统了解了前后端的各种框架/服务器部署相关知识,增强了与同组同学的合作。 系统了解了软件工程的相关知识并进行了实践 |
与其他老师的平行班级相比,分数基本一致,任务量感觉不在一个数量级。 |
| 吴凡 | 沟通的重要性 | 希望博客少一点 |
| 苏海翔 | 学到了django等模型框架(自己还稍微看了一点其他的框架,比如vue什么的),还有jsplumb这样的插件,掌握了如何快速套用前端模板的方法,同时对前端debug的方法更加熟悉。对于不同功能,不同样式的前端代码,都能快速读懂并进行需要的操作。 | 关于软件工程的教育,我觉得单靠项目+博客的形式,不足以使学生充分学习和体验工程化方法的每个步骤。 个人项目和结对项目的难度有点大,时间也比较紧,自由度也比较低,感觉不像是软件工程课的作业,而是编程课的作业。虽然在代码质量与代码测试方面学习到很多东西,但感觉还是应该选择一些需求比较模糊,而开发难度不是特别大的项目作为软工项目的题目。 另外,虽然课程上并没有明确的限制,但无论是从给定的题目来看,还是从各组最终选定的项目来看,项目的主题大多偏向于学习性质(特别是计算机学习),很多项目均把学生作为典型用户,有些项目的应用场景被限制在校园范围内。虽然这样的选择也有自己的道理,但考虑软件应用的广泛性,适当打开思维,拓宽选题思路也未尝不可。 |
| 陈从文 | pytorch神经网络概念知识,django的使用以及前后端交互和DEBUG的基本流程 了解了团队分工和软件开发的大致流程。 |
可以更多点实践知识少点理论知识,同时让助教参与到项目开发中。 |
| 许天立 | 软件开发的技能很多是我之前从没接触过的。比如说我们这次用的django这个框架,我在这之前就从来没用过,也没接触过任何一种框架。而现有的框架那么多,更新换代那么快,也不能说精通所有的框架,这个时候,学习能力很重要,alpha阶段,我最大的收获可能就是自学的能力 | 无 |
2. Beta阶段大体计划
在接下来的版本中,我们会更多地花时间去支持更多模型的搭建、丰富产品内容、提升用户体验。
包括\(\alpha\)阶段希望实现而尚未实现的:
- 支持网络封装成基本模块
- 经典模型(如U-Net, ResNet, AlexNet, VGG-16等)
已经实现还可以进一步改进的:
- 更精美的可视化
- 帮助文档的撰写
以及需要在未来实现的:
- 模型的本地部署与在线运行
- 集成tensorboard可视化
- 模型分享与交流
- 模型参数分析与可视化
在\(\beta\)阶段,我们会继续努力,争取完成以上预定的目标,提供一个尽可能实现的最好的产品
项目展示$\alpha$的更多相关文章
- Beta阶段项目展示
1.团队简介 韩青长 前端工程师 我是韩青长,技术小白,抱着对软工的好奇和对未来工作的憧憬选了这门课.暂时选择了测试的工作,也对开发和UI有一定兴趣.从前上帝创造了我们,现在轮到我们来创造自己的软件了 ...
- 【Phylab2.0】Beta版本项目展示
团队成员 冯炜韬(PM)http://www.cnblogs.com/toka 岳桐宇(后端)http://www.cnblogs.com/mycraftmw 杨子琛(测试&LaTeX)htt ...
- Alpha阶段项目展示
1.团队简介 韩青长 前端工程师 我是韩青长,技术小白,抱着对软工的好奇和对未来工作的憧憬选了这门课.暂时选择了测试的工作,也对开发和UI有一定兴趣.从前上帝创造了我们,现在轮到我们来创造自己的软件了 ...
- 【Phylab2.0】Alpha版本项目展示
团队成员 冯炜韬(PM)http://www.cnblogs.com/toka 岳桐宇(后端)http://www.cnblogs.com/mycraftmw 杨子琛(测试&LaTeX)htt ...
- Beta版本项目展示要求
项目评审的定在1月5日上午9:00在新主楼D225进行. 在Beta阶段项目评审会上, 每个团队有12分钟展示时间,10分钟问答和机动时间,我们的展示也不需要PPT,大家把要展现的东西写成博客(可以有 ...
- Alpha版本项目展示要求
Alpha版本展示的时间暂定为11月17日课上.如有变动,另行通知. 在Alpha阶段项目评审会上, 每个团队有12分钟展示时间,10分钟问答和机动时间,我们的展示也不需要PPT,大家把要展现的东西写 ...
- Alpha版本项目展示
成员简介 谷大鑫: 热爱编程,技术狂魔,可以对感兴趣的技术钻研到茶饭不思,队伍的技术中坚.标签:整个队伍里最靠谱的人. 个人博客:http://www.cnblogs.com/nrm1/ 杨金键: 未 ...
- 《易货》Alpha版本项目展示
一.团队成员和个人博客地址 PM:董元财 开发人员:胡亚坤,董元财,刘猛 测试人员:益西多吉,马汉虎 团队名:bestRW 团队博客地址:http://www.cnblogs.com/niceRW/ ...
- 一个react的完整项目展示
和一些人的关系像平行线,一辈子相守相望,见于眼底藏于心间.就怕耐不住寂寞,冲动而成了相交线,在一个点尽情拥抱,从此便离得越来越远,再也不见.遇到这样的人,因为不想做恋人只能一时,所以才选择做朋友能一世 ...
- 【Alpha】项目展示
团队成员介绍 大娃 后端开发人员,主要工作为后端开发,文档撰写. 大娃的个人博客 二娃 PM,主要工作为项目进度把控,平日例会的记录,例会博客及部分其他博客的撰写. 二娃的个人博客 三娃 PM,主要工 ...
随机推荐
- C++11正则表达式
- java例题_46 两个字符串拼接问题!
1 /*46 [程序 46 字符串连接] 2 题目:两个字符串连接程序,将两个字符串拼接在一起 3 */ 4 5 /*分析 6 * 两个字符串的拼接方法 7 * concat方式 8 * 当两个量都为 ...
- CentOS7 搭建 K8S 环境
前期准备 环境规划 K8S 与Docker兼容问题 k8s v1.18.0 => Docker v18.x k8s v1.19.0 => Docker v19.x 软件 版本 Linux操 ...
- OO_Unit4_Summary暨课程总结
初始oo,有被往届传言给吓到:oo进行中,也的确有时会被作业困扰(debug到差点放弃):而oo即将结束的此刻,却又格外感慨这段oo历程. 一.单元架构设计 本单元任务是设计一个UML解析器,能够支持 ...
- 一文彻底搞定Hystrix!
前言 Netflix Hystrix断路器是什么? Netflix Hystrix是SOA/微服务架构中提供服务隔离.熔断.降级机制的工具/框架.Netflix Hystrix是断路器的一种实现,用于 ...
- OAuth2.0理解和用法
现在网络的资料到处都是,很容易搜索到自己想要的答案.但答案通常只能解决自己一部分的问题.如果自己想要有一套自己的解决方案,还得重新撸一遍靠谱. 我需要学下OAuth2.0吗? 没看之前以为OAuth2 ...
- [C++]一篇文章搞懂C++中五花八门的各种初始化
总结 初始化的概念:创建变量时赋予它一个值(不同于赋值的概念) 类的构造函数控制其对象的初始化过程,无论何时只要类的对象被创建就会执行构造函数 如果对象未被用户指定初始值,那么这些变量会被执行默认初始 ...
- linux中[gcc -shared -fPIC]的含义
linux在gcc编译时加上 -shared 参数时,目的是使源码编译成动态库 .so 文件: 而-fPIC的作用是 告知编译器 生成位置无关代码(编译产生的代码没有绝对位置,只有相对位置):从而可以 ...
- IDEA中Maven的配置
Maven安装 下载Maven 官网:https://maven.apache.org/ 下载完成后,解压即可: 配置环境变量 在本机电脑的系统环境变量中 配置如下配置: 路径:此电脑-->高级 ...
- 【Spring】SpringIoC大致流程
目录 SpringIoC 是什么? 类图 大致过程 源码分析 SpringIoC 是什么? 官方文档的解释是:IoC也称为依赖注入(DI).在此过程中,对象仅通过构造函数参数,工厂方法的参数或在构 ...













