项目展示$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%

  • 运行测试用例得到代码覆盖率的视频录像

    ScreenClip

4. 文档与规范

  • 代码规范在哪里?NAG小组代码规范

  • 齐全的文档在哪里?

  • 有些项目是在原来的基础上改进的,那么我们团队的软件工程项目质量有什么样的提高?

    在前端设计与后端编译上有明显的提高。

    • 后端:新增了6类网络层,并对原有的网络层参数进行扩充。同时新增多种静态参数(如损失函数、优化器等)
    • 前端:对原有页面进行了改进设计,并新增了多个页面,根据后端新增内容添加模型创建页面内容。
    • 测试方面,原有项目仅对后端用户注册登录模块进行了自动化测试,本项目则对后端一系列方法进行了自动化测试,大大提升了代码覆盖率。
  • 原来的项目有些代码混乱,没有注释,没有详细的文档,你们的项目是如何更好解决这个问题的?明年的同学继续开发这个项目,会不会出现类似的抱怨?如果一个新学生在一台新机器上想编译并运行你的项目, 请问能顺利完成么?有什么样的文档能指导新学生?

    • 事实上原有项目留下了详细的接口设计文档,但是仍有大量的框架学习与代码阅读任务。
    • 前后端均学习Django/DjangoRestfulFrameWork,后端重点在于修改Json并根据Json输出对应代码,前端重点学习了JS/CSS/HTML/JQuery/Jsplumb等知识,通过修改Bootstrap模板解决了设计问题,通过与后端交流Json传输格式解决了新增网络问题。
    • 明年的同学做增量开发时也会面临大量的框架学习与代码阅读任务,其对应的时间投入很难降低(即使我们已经有了详细的前后端接口文档)。
    • 编译运行较为简单,根据ReadMe进行实现即可。

5. 需求分析

  • 对于项目的目标用户是一般学生的项目, 你们如何找到学生做需求分析?他们给你什么样的反馈?

    在需求分析中,我们以组内分析为主,不过也通过询问、调查等方式做了一些需求分析,比如将项目推广给同学时,会收集他们对项目的反馈信息。例如,有同学在使用后反映在项目生成的代码loss有点高,以及网站反应速度不够快的问题,我们将在以后的版本中进行相应调整。

    ScreenClip

    除此之外,我们的项目还提供了问题反馈界面,用户可以直接在项目中反馈相关问题,包括有关用户需求方面的问题。不过,目前还未收到有效的反馈信息。

    在接下来的版本中,我们会结合现有项目,做更为深入的需求分析。

  • 所有的项目都会收集到用户的数据,请问你们对这类数据做了什么样的分析,这些分析如何验证或推翻了原来的假设?这些数据如何帮助项目改进软件工程的质量?

    我们的项目中,共搜集了历史访问量注册用户数生成模型数三个数据。

    我们分析了访问量的情况,感觉访问量并不如我们的预期,可能是由于我们的宣传力度不够大,也可能是由于对可视化神经网络模型的兴趣没那么高,也可能是生成的代码性能不理想等其他原因。注册用户数和生成模型数也是类似的结论。

三、项目进展

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、用户的登录功能
ScreenClip
框架构建 1、个性化构建自己的框架
2、能够保存为自己的个性化构建
3、能够实现参数调整
ScreenClip
模型管理 1、模型的删除功能
2、模型的查看
3、导出代码
ScreenClip
代码生成 1、根据所选框架生成特定代码 ScreenClip
问题反馈 1、可以向后台反馈存在的bug
2、可以看到之前反馈问题的应答
ScreenClip
用户统计 1、统计网站ip的访问次数,记录用户使用人数 ScreenClip
关于我们 1、罗列有制作团队的具体信息,可以发邮件进行询问 ScreenClip
帮助文档 1、动图展示操作方式 2、对模型参数的文档 ScreenClip

六、用户反馈&bug

我们测试得到的bug详见:测试报告α

以下4个评价,在用户体验上反映出了不同的bug:

1. 助教:

用户注册的时候是否会考虑到强校验呢?
试了一下,用户名长度、符号,密码长度、符号没有校验,没有邮箱验证。
安全性这方面,如果想攻击服务器的话,脚本批量发送POST请求会产生垃圾用户数据,量大可能会拖垮服务器。

这确实是我们没有考虑到的bug。

前端JS中对长度是有限制的,比较宽松。后端对应部分直接继承原本项目的代码,未做修改。邮箱验证后续版本会通过django相关插件实现,提升安全性。

2. 昂神:

建议把静态资源整合整合,现在资源请求太多了加载贼慢
还有有条件的话建议挂上cdn
以及感觉还算来得及的话,js部分可以整合整合逻辑,更来得及一点的话,可以干脆换上vue

在1核1G的服务器上挂载的静态资源太多,现已将gif及图片改成外链接的形式,缓解资源请求压力。后续考虑其他缓解方式。

3. 同学A:

不支持经典模型的导出,搭建一个模型对于一个新手来说还是太麻烦
建议设置一些典型的样例,不然根本不知道该怎样操作

本来在(alpha) 阶段应该实现经典模型功能的。实际上后端json已经基本实现了。但无奈卡在了前端工具上,(eta)阶段会实现这一功能。

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可视化
  • 模型分享与交流
  • 模型参数分析与可视化

(eta)阶段,我们会继续努力,争取完成以上预定的目标,提供一个尽可能实现的最好的产品

原文地址:https://www.cnblogs.com/NAG2020/p/12831037.html