软件工程团队项目终于告一段落,而我们“葫芦娃”团队也实现了VisualPytorch项目从0到1的转变,6月22日晚,我们聚集在大运村1公寓507宿舍内,召开了一小时左右的会议,大家共同总结了一下这将近一学期的项目经历。具体会议记录如下:
设想和目标
- 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
我们的网站所要解决的,就是为deep learning初学者或完全未接触过deep learning的人提供一个可以直观进行拖拽编程的平台,帮助他们快速、直观地理解pytorch,并进行简单的练习。典型用户与典型场景在网站设计阶段都已明确,具体链接如下:VisualPytorch功能规格说明书
- 我们达到目标了么?原计划功能做了几个?按照原计划交付时间交付了么?
核心功能是全部实现了的,如:拖拽搭建模型、生成代码。但优先级没那么高的功能实现上稍有出入,如:原本计划实现论坛功能,让用户可以在网站上进行发帖、回复,从而可以讨论解决自己的问题,但后来觉得这个功能并不是十分必要,就没有完成。取而代之的,我们完成了用户搭建的模型可以保存在自己的账号中,下一次使用时可以调用再进行修改;生成的代码下载到本地的功能,我们觉得这些功能可能更符合用户的需求。我们所做的功能均按照原计划的时间交付了。
- 原计划的用户数量达到了么?用户对重要功能的接受程度和我们事先预想的一致么?
我们的目标是1000的访问量、400的生成模型数,200的用户注册数。而截至2019.6.22,网站的访问量为1709、生成模型数为491,用户注册数为142,可以说几乎达到了原计划的。为了更好地让用户体验我们的全部功能,我们写了较为详细的帮助文档,也提供了样例模型,但根据推广以后的用户反馈来看,即使如此,对于没有deep learning基础或没怎么接触过编程的用户来说,仍然不是很好上手,因为即使我们解释了每个参数的意义,他们还是不太知道每一项是做什么的。
- 有什么经验教训?
经历了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
- 在发布过程中发现了哪些意外问题?
并没有什么意外发生。
总结
- 代码管理的质量具体如何提高?代码复审和和代码规范的质量应该如何提高?
- 在Alpha阶段的总结中,我们希望在Beta阶段要把代码的管理碎片化,我们组的开发人员习惯完成一大块功能统一进行commit,但这样并不利于开发,下一阶段我们会统一要求开发人员在每天进行工作后,哪怕是很小的一个功能,也要进行commit。而这一点我们在Beta阶段和Gamma阶段都做到了。
- 同时我们也严格按照代码规范执行,因为已经撰写了相应的文档,我们会按照文档进行代码规范的管理。
- 整个程序的架构如何具体提高?如何通过重构等方法提高质量?
我们组认为通过重构的方法来提高工程质量,是一种不得已而为之的方式,耗时耗力,还会大幅度地延缓项目进度。局部的重构是可以接受的,但项目整体的框架,是一开始就设计好的。
- 其它软件工具的应用,应该如何提高?
我们组目前开发在使用:pycharm、sublime和postman,测试在使用:pycharm、postman、fiddler,这些工具都足以支持我们开发和测试。
- 项目管理有哪些具体的提高?
之前我们发布的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
我感谢三娃对我的帮助,因为某个具体的事情:因为自己是新加入的,在熟悉项目上我遇到不明白的地方时,他总是耐心地给我讲解说明,帮助我快速融入团队。
七弟
我感谢四娃对我的帮助,因为某个具体的事情:在开发过程中,由于我水平能力较差,我在前端开发的过程中存在不理解的问题,比如后端架构的问题,他对我进行了详细的讲解,帮助我理解,来完成文档撰写,还有在前端开发中,比如输入框的实时监听问题,我难以解决的问题,他也想办法帮我解决。