【软件工程】团队过后分析

软件工程团队项目终于告一段落,而咱们“葫芦娃”团队也实现了VisualPytorch项目从0到1的转变,6月22日晚,咱们汇集在大运村1公寓507宿舍内,召开了一小时左右的会议,你们共同总结了一下这将近一学期的项目经历。具体会议记录以下:html


设想和目标

  • 咱们的软件要解决什么问题?是否认义得很清楚?是否对典型用户和典型场景有清晰的描述?

咱们的网站所要解决的,就是为deep learning初学者或彻底未接触过deep learning的人提供一个能够直观进行拖拽编程的平台,帮助他们快速、直观地理解pytorch,并进行简单的练习。典型用户与典型场景在网站设计阶段都已明确,具体连接以下:VisualPytorch功能规格说明书前端

  • 咱们达到目标了么?原计划功能作了几个?按照原计划交付时间交付了么?

核心功能是所有实现了的,如:拖拽搭建模型、生成代码。但优先级没那么高的功能实现上稍有出入,如:本来计划实现论坛功能,让用户能够在网站上进行发帖、回复,从而能够讨论解决本身的问题,但后来以为这个功能并非十分必要,就没有完成。取而代之的,咱们完成了用户搭建的模型能够保存在本身的帐号中,下一次使用时能够调用再进行修改;生成的代码下载到本地的功能,咱们以为这些功能可能更符合用户的需求。咱们所作的功能均按照原计划的时间交付了。git

  • 原计划的用户数量达到了么?用户对重要功能的接受程度和咱们事先预想的一致么?

咱们的目标是1000的访问量、400的生成模型数,200的用户注册数。而截至2019.6.22,网站的访问量为170九、生成模型数为491,用户注册数为142,能够说几乎达到了原计划的。为了更好地让用户体验咱们的所有功能,咱们写了较为详细的帮助文档,也提供了样例模型,但根据推广之后的用户反馈来看,即便如此,对于没有deep learning基础或没怎么接触过编程的用户来讲,仍然不是很好上手,由于即便咱们解释了每一个参数的意义,他们仍是不太知道每一项是作什么的。github

  • 有什么经验教训?

经历了Alpha阶段的摸索,咱们在Beta阶段和Gamma阶段都作好了充足的设计,所以团队推动效率也比较高,进展都比较顺利,这也说明了一个项目想要顺利推动,就必定要在设计上花足时间,印证了咱们Alpha阶段的经验是正确的。数据库


计划

  • 是否有充足的时间来作计划?

因为在Alpha阶段后期,开发和测试人员在工做时,PM已经开始设计Beta阶段的功能,而在Beta阶段的后期也是如此,因此计划的时间仍是比较充足的。编程

  • 源计划的工做是否最后都作完了?

如上文所说,咱们计划的功能稍有变更,或者说是更新,但全部功能均定期完成了。后端

  • 有没有发现作了一些过后看起来不必或没多大价值的事?

咱们询问了开发与测试人员,你们均觉着所作的工做是必要的,并未浪费精力。安全

  • 是否项目的整个过程都是按照计划进行,项目出了什么意外?

在Alpha阶段的初期,前端开发与后端开发沟通出现了些不畅,前端不清楚后端的具体接口,致使没法推动。咱们在当天召开紧急会议,明确了全部的接口,并约定如出现调整,及时作好沟通,也保证了项目的顺利推动。前端框架

在Beta和Gamma阶段,咱们并未遇到什么问题,整个项目过程都是按照计划进行的。服务器

  • 在计划中有没有留下缓冲区,缓冲区有什么做用?

在Beta和Gamma阶段咱们吸收了Alpha阶段“极限操做”的教训,在安排工做的时候留下了充足的缓冲区,给测试人员测试、开发人员修复留足时间,同时也正由于咱们留下了缓冲区,才可以应付像5月22日被删数据库这样的攻击。

  • 若是历史重来一遍,咱们会作什么改进?

根据咱们目前对软件工程的认识,咱们以为计划方面不管是项目设计、仍是人员分配,咱们都达到了咱们所能想到的标准,所以也没留下什么遗憾。


资源

  • 咱们有足够的资源来完成各项任务么?

因为咱们在有7位组员,所以人力上是比较充足的。而华为云又为咱们提供了部署网站的服务器,所以物力上也是比较充足的。此外,咱们还联系了北京理工大学和天津大学的同窗帮忙推广项目,总的来讲资源方面并不紧张。

  • 测试的时间、人力和软硬件资源是否足够?美术设计和文案等难度是否低估?

在Alpha阶段,测试人员是在最后两天进行测试的,而这也致使工做积攒的不少、压力很大。在Beta和Gamma阶段,咱们改变了测试模式,让测试人员随着开发人员的进度进行测试,开发人员交付一部分代码,就对其中的接口进行测试,这样使得压力就小了不少。文案方面,Alpha阶段须要些的文案较多,压力也比较大;在Beta和Gamma阶段就不须要写功能规格设计书之类的了,但须要编辑技术博客,但总的来讲压力还好。

  • 有没有感到本身作的事情可让别人来作更有效率?

询问了各位成员,你们均觉着本身较适合本身的工做,安排仍是较为合理的。


变动管理

  • 每位相关的员工是否都及时知道了变动的消息?

咱们平时的研究、商讨会采用开会或在微信上交流的形式,比较重大的决定或变更,会在github上发布issue,所以若是有变化你们均可以及时知道。

  • 咱们采用什么方法来决定“推迟”和“必须实现”的功能?

对要实现的功能作优先级排序,而后肯定在当前阶段哪些功能是相对而言优先级较高的。好比在Alpha阶段,因为须要学习等等,因此优先实现核心功能:搭建模型和生成代码;而在Beta阶段和Gamma阶段,则是实现一些辅助用户、改善用户体验的功能,如能够保存模型、下载代码、样例模型等等。

  • 项目的出口条件(Exit Criteria)有清晰的定义么?

在Gamma阶段,咱们的目标是在以前的基础上,加入导航栏的高亮显示,参数框的右边栏固定以及帮助文档的细化和代码的具体解释。所以,咱们将这一版本的出口条件设置为:

实现参数框的转移,导航栏连接鼠标放置或点击时高亮,帮助文档简单易懂,生成的代码解释清晰

  • 组员是否可以有效地处理意料以外的工做请求?

对于突发状况,咱们小组成员都是比较积极的,谁手头没有很急的任务,且可以解决突发状况,就会主动承担下。


设计/实现

  • 设计工做在何时,由谁来完成的?

Alpha阶段的设计工做是在Alpha阶段初期,团队成员开会共同讨论完成的,Beta和Gamma的功能设计工做主要是由两位PM协商拟定方案,而后询问你们意见完成的。

  • 团队是否运用单元测试、测试驱动开发,或者其余工具来帮助开发?

在项目初期,咱们画了了原型图,来更好地帮助前端设计。在Alpha阶段,咱们没有很好地完成单元测试,但在Beta和Gamma阶段,咱们调整了测试模式,让测试人员随着开发人员的进度进行测试,大大提升了测试质量,也很好地完成了单元测试。


测试/发布

  • 团队是否有一个测试计划?

Beta阶段和Gamma阶段咱们都有测试计划,以便于测试人员能够随着开发人员高质量地完成测试任务,并若是发现bug,也能够及时反馈给开发人员。

  • 是否进行了正式的验收测试?

由测试人员完成了正式的验收测试。

  • 有哪些测试工具来帮助测试?

pycharm、postman、fiddler

  • 在发布过程当中发现了哪些意外问题?

并无什么意外发生。


总结

  • 代码管理的质量具体如何提升?代码复审和和代码规范的质量应该如何提升?
  1. 在Alpha阶段的总结中,咱们但愿在Beta阶段要把代码的管理碎片化,咱们组的开发人员习惯完成一大块功能统一进行commit,但这样并不利于开发,下一阶段咱们会统一要求开发人员在天天进行工做后,哪怕是很小的一个功能,也要进行commit。而这一点咱们在Beta阶段和Gamma阶段都作到了。
  2. 同时咱们也严格按照代码规范执行,由于已经撰写了相应的文档,咱们会按照文档进行代码规范的管理。
  • 整个程序的架构如何具体提升?如何经过重构等方法提升质量?

咱们组认为经过重构的方法来提升工程质量,是一种不得已而为之的方式,耗时耗力,还会大幅度地延缓项目进度。局部的重构是能够接受的,但项目总体的框架,是一开始就设计好的。

  • 其它软件工具的应用,应该如何提升?

咱们组目前开发在使用:pycharmsublimepostman,测试在使用:pycharmpostmanfiddler,这些工具都足以支持咱们开发和测试。

  • 项目管理有哪些具体的提升?

以前咱们发布的issue还不够十分具体,有些issue工做量较大,在Beta和Gamma中,咱们将issue分割成了一个个工做量较小且大体相同的小任务,方便你们完成并close任务。

  • 项目跟踪用户数据方面,计划要提升什么地方?例如如何知道每日活跃用户等。

咱们是在一个统计页面展现天天的访问量,但咱们发现咱们的网站在推广的日子访问量能够达到400+,但在平日访问量可能只有10左右,咱们分析缘由多是咱们的产品对用户而言寿命并无那么长,用户尝试过就不会再去使用,这也是咱们须要反思的问题之一,如何才能使得用户习惯、依赖本身的产品。

  • 项目文档的质量如何提升?

咱们认为要随着项目推动,设计和开发的进行,不断地更新文档,一方面是为了可以记录项目的变化,另外一方面若是之后有别的团队来接手咱们的项目,有了详细的文档也更方便别人理解项目。

  • 对于软件工程有什么心得体会或不一样意见?
  • 大娃:

    Beta阶段是代码量相对较多的阶段,因为一开始设计的缘由,致使Beta阶段的大部分代码不得不重写,以及不少代码从软件工程的角度来说都很不规范因此进行了重构。而在Gamma阶段,新加入的代码主要是有关注释以及修正之前存在的若干bug。总的来讲,经过这两个阶段,让我明白软件工程最重要的东西仍是设计层面,一个合格的项目其设计必定要完美考虑可扩展性和兼容性,这点我这部分的代码一开始没有想清楚因此绕了不少弯路,因此还算是收获颇丰吧。

  • 二娃:

    在Beta阶段咱们处理了不少Alpha阶段遇到的问题,包括进行人员的调整、对任务进行了更加明细的分工以及单元测试跟进开发过程等,虽然表现出来对团队开发任务的不熟悉,可是在Beta阶段咱们已经作出了很好的调整,团队之间的协做能力也是大大地提升了。咱们在Beta阶段有明确的须要实现的功能和完成的目标,也有在此基础上若时间剩余进一步的优化发展,同时小组成员们若是有问题均可以提出召开例会,在Beta阶段咱们开发过程的效率比Alpha阶段提升了不少,同时因为不是最后才进行测试任务,测试人员的工做压力也不是积累到了最后一周,状况好了许多,所以Beta阶段的完成度是很高的。

    在Gamma阶段,咱们有了更加成熟的方法,小组成员们都有本身在此阶段想要添加的功能,所以咱们听取了各个成员的建议来分配工做,在Beta阶段的基础上作了许多优化方面的功能,同时也但愿让初学者可以更快的入门咱们的网站,作了许多引导性的优化内容。开发任务和测试任务的工做量都不是很大,可是却极大地优化了用户的体验,所以咱们也意识到时间要用在刀刃上。

  • 三娃:

    Beta和Gamma阶段的项目推动总的来讲走上了正轨,你们都循序渐进地完成好本身的任务,节奏比较舒服。

    值得一提的是在5月22日的那次数据库被入侵,惨遭删库、只留下一个warning勒索信,并要求支付0.1比特币来恢复数据库。咱们的解决办法是最简单的从新搭一遍数据库,但过后咱们分析,毕竟咱们只是一个小团队的小项目,且不是盈利的,而若是在公司里出现了这种状况,那怕是只能花钱消灾了,这也引发了咱们对安全的重视,引入了邮箱验证功能。

  • 四娃:

    Beta版本进行了功能的拓展,整体上比较顺利。Beta版本最大的问题,是拓展了功能的状况下,如何保持接口设计的完整性与功能上的完备性。除此以外,Beta版本中文档更新不特别及时。不过Beta版本中,对于代码风格的管理以及用户权限的管理作的仍是比较不错的。

    Gamma版本工做量比较小,咱们作的比较多的工做在于宣传和整理完整的教程。Gamma版本中较大的改善了用户体验,反向较好。

  • 五娃:

    相较于Gamma阶段,Beta阶段的任务量稍多一些。在正式开始Beta阶段前,咱们先开会讨论了本阶段所要实现的基本需求,而后进行了任务的分配。基本也还顺利,把主要的需求都实现了,可是也有一些弹性的变换,例如最初讨论的反馈功能,在实现过程当中综合技术难点、需求迫切度、需求的必要性以及你们的时间充裕度等因素,咱们去掉了该功能,选择去专一更重要的功能。

    到了Gamma阶段,任务稍少一些,主要集中在宣传推广和帮助文档的撰写上。

    两个阶段下来,感受咱们好像是忘记了初心,在这个阶段,我曾思考过咱们项目的最初目的,是要实现一个可视化的神经网络代码生成的网站,那么最核心的应该是如何生成代码,以及生成代码的正确性,但是后面的工做好像是有些忽视了这个功能,主要集中在了功能的拓展和前端的优化上。可是转念一下想,感受咱们这么作又是有很大的缘由的,由于这是一门课,前端作的差,功能少,那拿什么去展现呢,正确性好像是个看不到摸不着的东西,而所谓的用户友好界面和功能添加倒是实实在在摆在那里的。

    我之因此没有在开会时说过开发重心偏移的事,是由于这个自己并很差作,我本身也许并无这个能力和精力去作,而且这是一门课,那也就更没有提的必要了。

    要偶尔回头看看,看看初心是什么。

  • WF:

    Beta阶段是咱们的网站进阶的重要阶段,重点在于对初期版本的改进以及重要的功能扩展,Gamma阶段则主要进行维护和相应的优化工做,工做量相对前面而言要轻一些。在这两个阶段中,本身学到了不少东西,积累了更多的经验。

    我在Beta及Gamma阶段的任务主要是对项目进行测试,在开始时,会有一些吃力,但随着对项目的深刻熟悉,本身对项目各方面的测试工做也逐渐上手,总分体验到了"作中学"的感受,在这一过程当中,本身对项目的细节把控和对项目的总体把控能力也获得了必定的提高,这是一份巨大的的收获。

    这两个阶段中,咱们各司其职也互相帮助,总的来讲团队的工做须要每一个人的付出,也离不开每一个人的相互支持。

  • 七弟:

    Beta及Gamma阶段的任务相比起开发阶段及Alpha阶段轻了许多,重点在于网站的功能扩展、维护、优化和bug修复,在这一过程当中本身积累了更多的开发经验。我在Beta及Gamma阶段的任务主要是帮助文档的撰写以及前端的优化,在这一过程当中,本身精进了本身撰写文档的能力,同时还提升了本身前端开发的能力,积累了很多的经验,算是有必定的收获。而在这一阶段中,咱们的网站也发生了一次意外,咱们的数据库数据曾被入侵并删除了数据库数据,所幸数据库并未储存大量数据,咱们尽早对数据库进行了恢复,这一次事故也让咱们明白了网站的安全维护的重要性。


  • 成员之间互道感谢(23333)
  • 大娃:

    感谢四娃的帮助:在如何使用git来进行代码管理这件事情上,我之前并无这方面的意识,也是四娃在这方面给了我不少启示,规范了本身平时的习惯

  • 二娃

    我感谢四娃对个人帮助,由于在Alpha阶段的时候,我有不少不太懂的事情,对PM所须要作得工做不是特别的了解,在先后端交接的过程当中出现过不少的问题,可是在他的帮助下,咱们团队的项目算是比较好地完成了各个开发和测试的任务,最后他部署到了服务器上,因此我比较感谢四娃。

  • 四娃

    我感谢三娃、七弟对个人帮助。三娃做为PM和我能交流的比较多,也商讨了不少实现上的流程。七弟与我一块儿完成了前端的工做,整体上来讲作的还蛮好的。

  • 五娃

    我感谢四娃对个人帮助,由于在我转去前端的时候帮助我快速了解前端框架。

  • WF

    我感谢三娃对个人帮助,由于某个具体的事情:由于本身是新加入的,在熟悉项目上我遇到不明白的地方时,他老是耐心地给我讲解说明,帮助我快速融入团队。

  • 七弟

    我感谢四娃对个人帮助,由于某个具体的事情:在开发过程当中,因为我水平能力较差,我在前端开发的过程当中存在不理解的问题,好比后端架构的问题,他对我进行了详细的讲解,帮助我理解,来完成文档撰写,还有在前端开发中,好比输入框的实时监听问题,我难以解决的问题,他也想办法帮我解决。