我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
主要是解决DDL提醒功能的问题,定义的比较清楚,对典型用户和典型场景有比较清晰的描述。
我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)
核心功能都完成了,没有完成的消息中心不属于核心功能且开发阶段发现并不太符合核心需求,遂取消。比计划交付的时间晚了5天,用户数量在2天内已经达到。
和上一个阶段相比,团队软件工程的质量提高了么? 在什么地方有提高,具体提高了多少,如何衡量的?
本次开发是Alpha开发,因此无可用的对比。
用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?
用户量基本达到实现预想的数量。用户对重要功能(同步课程中心DDL和资源、自定义Task)的接受程度与预想的比较接近,自定义Task的用户数量较少,可能是由于现在放假的原因。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
发布时间较晚,没有如期发布,虽然在短时间内达到了最初设定的用户量目标,但是由于发布时间短没有收集到很多反馈意见。如果历史重来我们会选择在初期就进行前后端的连接,这样在后期开发的过程中减少因前后端连接而带来的阻塞时间。
是否有充足的时间来做计划?
有,课程组提供了一周的时间做计划,我们制定了明确的目标和产品原型,这对我们在Alpha阶段的开发起到了至关重要的作用,我们直接按照产品原型按计划进行开发即可。
团队在计划阶段是如何解决同事们对于计划的不同意见的?
一是在开Scrum Meeting讨论的时候提出,小组内成员共同协商,综合前端、后端、PM的意见最终决定;二是直接在微信群提出,直接就开一个微信的语音会议进行商讨决定。
你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
计划的工作大部分做完了,小部分由于技术原因如动态加密留到Beta阶段再实现,但这不影响用户核心功能的使用。
消息中心部分经过讨论认为用处不大,因此决定现阶段不实现,看后期的需求。
有没有发现你做了一些事后看来没必要或没多大价值的事?
前期学习技术的时间分配的过多,这些技术有些用不上,有些要用的时候忘记了还需要回去看,造成了进度的耽搁,应该今早开始动键盘。
是否每一项任务都有清楚定义和衡量的交付件?
开始时计划过于笼统,因为分割的feature太大,如一个界面的开发,因此很难确定具体的交付件。后面到实现阶段,对feature进行了进一步的细化,细化到一个界面里的按钮和点击按钮之后响应的事件,这时的交付件就明确多了,如某个页面、某个按钮能正常使用等。
是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
计划时没有估计前后端连接的任务量,造成了上线时间严重拖后。这是由于大家都没有前后端连接的经验,没有预料到连接起来的任务量会那么大。
在计划中有没有留下缓冲区,缓冲区有作用么?
计划中没有留下缓冲区,而且由于我们对课程组的时间线理解有偏差,导致最后时间非常紧张。
将来的计划会做什么修改?(例如:缓冲区的定义,加班)
我们学到了什么?如果历史重来一遍,我们会做什么改进?
开始的计划需要细化,每个人的任务、交付件都需要明确,否则难以衡量组内成员的进度。
我们有足够的资源来完成各项任务么?
学习资源(如前后端的教程)这部分网上还是相当丰富的,但服务器资源就相对匮乏了,由于资金有限,我们自己申请的阿里云服务器性能较差,在使用VSCode多人协作时经常卡死。
各项任务所需的时间和其他资源是如何估计的,精度如何?
时间和资源在一开始通过任务的size进行估计,但由于计划中大大低估了前后端连接和部署到服务器上所需的时间,因此计划的精度有限。
测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?
如果按照正常发布的时间线来看,测试的时间是完全不够的。但出于程序可用性的考虑,我们还是进行了比较充足的测试,因此发布时间也拖后了几天。对于美工和文案等资源,我们组有专门负责这两部分的成员,因此这部分没有造成大的困难。
你有没有感到你做的事情可以让别人来做(更有效率)?
这部分暂时没有感觉,我们组员做的事情都是比较难交给外面去做的。
有什么经验教训? 如果历史重来一遍,我们会做什么改进?
应该给测试留出更加充分的时间,这样既能保证测试的充足,也能基本保证项目在发布日期之前上线。
每个相关的员工都及时知道了变更的消息?
基本能及时知道。如果是比较简单、笼统的变更消息会直接在微信群中通知所有人;如果涉及到具体文档的修改,会直接在GitHub上修改,但这部分的修改有时候并不及时。
我们采用了什么办法决定“推迟”和“必须实现”的功能?
主要采用开会讨论的方式,大家一起决定哪些功能可以推迟,哪些必须实现。
项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?
出口条件在规格说明书中有着明确的规定,在Github的issue中也对每个模块列有详细的验收标准。
对于可能的变更是否能制定应急计划?
暂时没有应急计划。
员工是否能够有效地处理意料之外的工作请求?
可以,我们的组员都非常乐意帮助别人debug,或是增加一些必要的需求等。
我们学到了什么?如果历史重来一遍, 我们会做什么改进?
对于和前后端关联密切的api和json格式的修改,我们应该更加及时地签入GitHub文档中,并通知组员有改动,防止后面出现接口版本不统一的问题。
设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?
设计是在组员都学完各自的前后端教程后,由PM组织大家开会共同协商的。设计时间和人员恰当。
设计工作有没有碰到模棱两可的情况,团队是如何解决的?
遇到过模棱两可的情况,仍然是由PM组织大家开会协商解决。
团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
我们没有用到UML。测试主要是在前后端连接后进行功能上的测试。
什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?
课程中心的爬虫产生的Bug最多,主要是由于课程中心网站的结构、目录结构过于混乱,且每个老师的发布格式不一,导致非常难对所有可能出现的情况进行判断。发布之后又发现激活邮件的链接错误、Bug反馈按钮没有实现等,这是由于Bug反馈按钮的所在页面一开始没有商量好的原因。
代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
Code Review主要是通过类似“结对编程”的方式实现的,即正在编程的组员将他的屏幕共享出来,大家在他编写的过程中进行Code Review,这样做还是找到了很多Bug的,大家的编程习惯都很好,严格执行了代码规范。
我们学到了什么?如果历史重来一遍, 我们会做什么改进?
前后端链接和部署到服务器上的过程比想象的要困难很多,在Beta阶段一定要给这部分留出足够的时间。
团队是否有一个测试计划?为什么没有?
测试计划分为两个部分:
是否进行了正式的验收测试?
进行了,在上线之前组员们一起进行了验收测试,每个组员都实际地走过完整的从注册到每一个界面和按钮的使用流程,做到自己发现bug。
团队是否有测试工具来帮助测试?
前端通过mock模拟后端数据,进行api的调用和测试;后端使用httpie制造请求,进行后端的测试。
团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
主要是通过服务器的响应速度来评判软件的效能,这是用户最能直观感受到的指标,现在看来评估得还是比较准确的。
在发布的过程中发现了哪些意外问题?
发布的过程中又发现了几个关于爬虫的小Bug,发布之后也遇到了激活邮箱链接错误等Bug。
我们学到了什么?如果历史重来一遍, 我们会做什么改进?
在每次变更代码之后再进行一次完成的测试流程是非常必要的。由于我们的注册邮件使用了emoji等图标,导致在使用vim修改代码的时候出现了字符显示的问题,进而导致我们没有发现注册连接被误改,导致有的同学无法收到验证码。如果我们在修改完代码之后自己再走一遍注册流程可以避免这个bug,所以永远不要相信自己的代码
团队的每个角色是如何确定的,是不是人尽其才?
每个人的角色基本遵循自己的意愿进行分配的,之前有前端开发经验的人去了前端,有美工经验的人进行设计,做到了人尽其才。
团队成员之间有互相帮助么?
当然有,前后端有经验的组员会分别指导没有经验的组员。
当出现项目管理、合作方面的问题时,团队成员如何解决问题?
如果是简单的问题可以直接和PM沟通,如果问题比较复杂、涉及的方面较多,则需要开Scrum Meeting解决。
每个成员明确公开地表示对成员帮助的感谢 (并且写在各自的博客里):
你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?
目前处于CMMI二级,即管理级。组员能够遵守既定的规划和流程,并且权责到人。
觉得团队目前处于 萌芽/磨合/规范/创造阶段 的哪一个阶段?
处于规范阶段,大家遵循规范和领导,互相帮助,共同进行项目的开发。
你觉得目前最需要改进的一个方面是什么?
大家的交付时间经常是压线交付的,如果能稍微提前交付,就能有更多的测试和缓冲时间了。
对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例。
我认为我们在组员面对面沟通这一点做的最好,当然现在由于疫情的原因,我们的“面对面”只能是通过腾讯会议的方式实现。我们在前后端交互的过程中,有时会有前后端有部分不统一的情况,此时如果问题严重,我们会开一个小会,只要求负责这部分的组员参加,通过共享屏幕的方式来讨论并消除分歧,这样做提高了效率。此外,我们组还做到了类似“多人结对编程”的模式,即一个人开着屏幕共享写代码,其他人在旁边为其做代码审查,这样做将结对编程的优点带到了小组合作中,提高了编程的效率和正确性。、
正如我们前面提到的, 软件的质量 = 程序的质量 + 软件工程的质量,那团队在下一阶段应该如何提高软件工程的质量呢?
全组讨论的照片:
Alpha α 完结撒花,感谢软软软所有成员的辛勤付出
Beta β 还在不远处等着我们,DDL Killer故事还将继续
To Be Continued…
手机扫一扫
移动阅读更方便
你可能感兴趣的文章