队名:拾光组
组长博客链接
作业博客链接
项目Postmortem
设想和目标
我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
我们的软件,“挪挪”主要解决校园内电动车挪车的问题,定义的很清楚,对典型用户和典型场景的描述如下:
一、小陈,是一名瘦小的女生,如果有一天她的电动车被堵了自己挪不出来,这时就可以使用挪挪app。
二、小石,是一名善良的女生,她发现有人车钥匙忘记拔,或者将钱包手机等贵重物品丢在车上,这时,就可以使用挪挪app
三、小宋,是一名知错能改的男生,他不小心将别人的车撞坏,想道歉赔偿,这时,就可以使用挪挪app
四、小张,是一名失眠的女生,她听见楼下坏掉的电动车的警报器睡不着觉,这时,就可以使用挪挪app我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)?
我们基本达到目标,原计划的功能基本完成百分之95,按照原计划时间交付了,用户数量暂时没有达到。
用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?
因为我们还处在内测阶段并没有上线,用户量还没有很多,但是用户对 重要功能的接受程度和预想的差不多,大家的接受程度挺高,目前我们还在努力推广,增加用户量,正在一天天接近目标!
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
学习到了很多开发知识,也生产了很多bug,明白了设计规范和代码规范的重要性,还有时间分配问题。如果历史重来一遍,我们会好好安排好时间,也要在各方面做好规范。
计划
是否有充足的时间来做计划?
我们很早就开始了计划,时间上是很充足的。
团队在计划阶段是如何解决同事们对于计划的不同意见的?
我们团队在解决成员之间的不同意见的时候采用集中讨论的方式,大家都去表达自己的意见,然后大家讨论出解决方案。
你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
原计划的工作大部分都完成了,包括完成登录注册模块、识别车牌模块、论坛模块、联系模块、个人中心模块、个人主页模块,每个模块包括:原型图改进、移动端ios界面实现和接口对接、移动端Android界面实现和接口对接、接口设计、后端基本功能实现。由于安卓端开发近期有多门考试,所以还没有全部完成。
有没有发现你做了一些事后看来没必要或没多大价值的事?
存在有部分事情没有太大价值。在代码整合的过程中,出现有些人代码可以运行,但是有些不能运行的情况。车牌识别算法的选择上也耗费多时,中间走了不少弯路,才找到较优算法。
是否每一项任务都有清楚定义和衡量的交付件?
每一项任务都有很清楚的定义和衡量标准,特别是在后端部分,数据库和接口的设计我们根据软件的原型和需求,规范地设计数据库和细致地设计接口的,数据库表结构和接口需求明确之后才进行的代码实现,所以在于整个项目的开发中,任务和进度是较为精确的,也提供测试样例作为参考。
是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
没有都按照原计划进行,遇到的困难比想象多,车牌识别算法的选择和后端图片存储的方式和算法都困扰了我们很久,而且开发人员的多门期末考试是道大槛,没有估计到,毕竟这是老师决定的。其次,最最重要的是,组长答应的海底捞到现在还没有请,严重影响组员写代码的积极性。
在计划中有没有留下缓冲区,缓冲区有作用么?
有留下一天的缓冲区,供我们做最后的debug和完善。
将来的计划会做什么修改?(例如:缓冲区的定义,加班)
在目前核心功能都已经基本完成的情况下,将来的计划会更多的倾向功能完善和拓展,主要是实现虚拟号码功能、强化人工智能收集车牌数据、加强小组联动这几个方面。虽然我们团队的宣言是见到福大凌晨的每个时刻的天空,但是我们还是会扩充缓冲区时间,留出较多时间用来收集用户建议和进行测试,避免不必要的“加班”。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
完善计划和定制计划同样重要。原计划的实施情况已经符合我们的预期,但是在过程中总会有一些意想不到的突发情况,因此及时的微调计划对于整个项目的实行起到了很重要的作用。如果能重来一次,我希望在制定计划时能够留下更多的缓冲时间。
资源
我们有足够的资源来完成各项任务么?
有的,我们具有经验十分丰富的开发们,美工们。
各项任务所需的时间和其他资源是如何估计的,精度如何?
各项任务所需的时间和其他资源我们是根据alpha冲刺的六个阶段,和各自的考试时间来分配的,精度还算准确!
测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?
我们的用户量可能有些不足,如上所说我们拥有经验丰富的美工们和文案小组,算是很圆满的完成任务,做出算是数一数二的界面了。
你有没有感到你做的事情可以让别人来做(更有效率)?
没有,我们的分工是最为合理的,发挥了每个人的长处,正因为这样的分工让我们做出来这样优秀的产品。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
经验教训还是时间估计的有点错误,和考试冲突的太频繁了,如果再来一次的话,我们一定会更加合理的安排好时间,当然,如果组长一开始就请我们吃海底捞,我们的动力一定会更大。
变更管理
每个相关的员工都及时知道了变更的消息?
一开始原型设计的时候没有考虑得十分全面,后面到开发的时候觉得要在细节方面做些改动,所以UI设计的同学会做些修改。安卓端和ios端在后端接口写完之后也有做及时相应的修改。无论是需求的更改还是其他变更的消息,相应的成员都能及时了解到。
我们采用了什么办法决定“推迟”和“必须实现”的功能?
经过小组讨论的方法决定开发模块的先后顺序,分清各个模块的重要程度。
项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?
前端的框架完成,页面完全实现,后端接口完成,功能都能实现,并且进行测试应该就能出口。
对于可能的变更是否能制定应急计划?
可以制定应急计划。小组内分工明确,对应负责相关部分的成员都较有责任感,组内能够做好及时交流,制定应急计划。
员工是否能够有效地处理意料之外的工作请求?
能。到目前位置好像所有的工作请求都是意料之中的,但是我们有自信自己能处理好各种工作请求。(除了组长迟迟不请海底捞这件事)
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
明白了团队及时交流的重要性,如果历史重来,我们会在一开始尽量考虑得更加全面一些,较少变更。
设计/实现
设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?
设计工作在团队确定选题之后一周之内就基本完成了,一开始是组内开会,大家一起讨论出一个需求框架,到具体的设计工作是由两三个UI设计的成员一起完成的。时间是合适的,设计工作并没有持续太长时间,人员也很适合。
设计工作有没有碰到模棱两可的情况,团队是如何解决的?
设计过程中的确有一两个地方模棱两可,是由具体设计的成员提出,然后先在UI设计师内部交流出一个方案,再来询问其他开发人员意见。
团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么?
团队有运用unit test和TDD进行开发测试,由目前效果来看是挺有效的。
比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
没区别。理论上之后还是要更新的。
什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?
牌照查询功能产生bug最多,发布之后,还未进行灰度测试,bug暂未发现。
代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
通过代码质量检测来进行,否。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
还是尽量在一开始做好需求分析,确定好各个部分的细节。如果再来一次,会花更多的时间在讨论需求上,同时做好代码规范。
测试/发布
团队是否有一个测试计划?为什么没有?是否进行了正式的验收测试?
有测试计划,计划是在每一周的冲刺接近尾声时对这周改进对代码进行测试修改。并且已经进行了正式的验收测试。
团队是否有测试工具来帮助测试?
使用的测试工具是TestCenter测试工具。
团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
我们团队目前没有测量并跟踪软件的效能的软件。所以对我们来说这些测试工作并没有用,改进就是希望能在接下去的工作中在测量并跟踪软件效能的测试方面能够多学习,然后尝试在这一方面有属于我们团队自己的突破。
在发布的过程中发现了哪些意外问题?
在车牌算法识别方面我们遇到了困难,一开始打算识别出一张图片内的所有车牌,进行批量消息通知。由于百度搜索广告太多,一开始经过搜寻比对了许多国外的识别SDK(Google Vison,OpenALPR、platerecognizer等),可能是由于比较专业的缘故,很多都要收费,加上英文文档不太友好。最后还是选择了国内百度的车牌识别SDK(免费,文档友好,真香)。
但是接着又遇到了一个问题,就是车牌识别SDK是根据汽车车牌的模板进行训练的,对电动车牌鲁棒性差。于是想到用提供的iOCR自训练模型,但是因为电动车牌没啥参照字段用于匹配,于是最后用了最粗暴简单的OCR识别(又回到了最初的原点)。我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
在这过程中我们学到了很多更细的知识点,在原型图改进,移动端ios界面实现和接口对接,移动端Android界面实现和接口对接,接口设计、后端基本功能实现等各个小组在各个方面都有了属于自己的突破.如果历史重来,我们可能会在初期讨论这个项目的时候就把一些功能更加细化,来防止出现一些做无用功的现象.
团队的角色,管理,合作
团队的每个角色是如何确定的,是不是人尽其才?
因为我们组的成员大部分是服务外包实验室的成员,所以根据每个人在实验室中担任的职位来分配团队成员的工作任务。且其他几位不是实验室成员的人也有自己的很擅长的领域,所以分配任务有人尽其才。
团队成员之间有互相帮助么?
因为在组队之前成员之间就很熟悉,所以在领到任务的时候,美工组,前端组和后端组都尽自己最大的能力互相配合互相帮助。
当出现项目管理、合作方面的问题时,团队成员如何解决问题?每个成员明确公开地表示对成员帮助的感谢 (并且写在各自的博客里)
当出现项目管理、合作方面的问题时,我们小组目前的项目进展十分顺利,并没有出现什么合作和管理方面的问题,对于有时候因为一些特殊的情况(是的没错我说的就是那些些些些考试)而感觉自己无法完成被分配的任务时,我们小组的成员一般会先跟组长反应沟通,并在群里跟其他成员及时协商调整。
我要感谢王焱哥哥,在考完试之后及时完成我分配的任务,让我们的主功能得以按时完成
总结
你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?
团队目前已经达到了CMM/CMMI的第四级,量化管理级。
你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?
团队目前已经处于创造阶段。
你觉得团队在这个里程碑相比前一个里程碑有什么改进?
技术开发能力得到提升,也提高了团队凝聚力。
你觉得目前最需要改进的一个方面是什么?
团队项目成员的时间安排(haidilao)。
团队讨论照片
答辩总结
组员评估
工作流程:根据大家擅长的部分,划分了web前端、算法、ios端、安卓端、后端、美工,确定分工之后设定每阶段的目标,大家一起努力。
组员分工:
web前端:陈启昌、石晓楠、陈靖雯
算法工程师:刘华一
ios端:刘晓翔、王焱
安卓端:杨晋南
后端:宋奕
美工:林少惠、杨蓝婷、张雨
姓名 | 贡献率 | 分工 |
宋奕 | 17% | 全部后端接口实现、分工安排 |
陈启昌 | 3% | 小组讨论 |
杨晋南 | 8% | 安卓端实现 |
刘晓翔 | 12% | ios端实现 |
王焱 | 12% | ios端部分页面实现、拍照识别实现、博客 |
刘华一 | 5% | 小组讨论、算法 |
杨蓝婷 | 9% | ppt、博客 |
林少惠 | 10% | ui优化、ppt、博客 |
张雨 | 3% | 博客 |
石晓楠 | 9% | ppt、博客 |
陈靖雯 | 12% | ppt、博客 |
本组的现场答辩得分
87.7
回答他组问题
有考虑增加平台给赏金功能吗?
悬赏功能是利用积分形式,线上赏金暂时没有考虑做,可以给他们平台让大家线下交易。
2024年福州要整改电动车,你这不就没人用了吗
整改也不可能一蹴而就,五年后整改可能六年后才会有成效甚至更久,而且,整改也不能完全解决堵车问题。
-是否有设置等待时长,不然我挪车等太久咋办哟?
暂时没有做等待时长,用户可以发消息或者打电话催车主来。挪车时怎么对车的安全进行保障?
正常挪车对车的安全应该不会有威胁,而且是车主自己挪车,如果是车主自己想找接口换车就没办法了。
如果车主不配合挪车是否有惩罚措施呢
这个暂时我们还没有设置相应的惩罚措施,只是积分不会太高。
能否增加联系方式
我们就是可以根据车牌号得出车主的联系方式。
多种挪车方案存在时你们是如何选择通知哪些车主的?
可以通过拍照识别照片中的车辆,对这些车主批量发送推送消息。
车牌号如果用手动输入不是很好解决,为何还要多增加识别呢
这句话没有表述清楚,是个病句。但是我推测是想说手动很好输入,拍照也很方便,我们提供多种输入方式有益无害,而且如果需要批量输入的话,拍照就方便很多了。
后面虚拟电话号码如何实现,是否需要联系运营商搭建一个第三方平台
通过阿里云等相关平台来实现,无需搭建第三方平台。
如果某个车主没使用app,你们怎么通知他挪车?
暂时这个还没有解决办法,所以我们的推广工作很重要。
网络电话中继资质问题是否已经解决?是否考虑更加完善的推送通知机制进行补充?
网络电话目前未解决,还在考虑中。
个人部分
个人psp
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 50 | 60 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 542 | 521 |
· Analysis | · 需求分析 (包括学习新技术) | 40 | 49 |
· Design Spec | · 生成设计文档 | 20 | 15 |
· Design Review | · 设计复审 | 5 | 7 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 3 | 2 |
· Design | · 具体设计 | 120 | 169 |
· Coding | · 具体编码 | 330 | 350 |
· Code Review | · 代码复审 | 20 | 25 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 21 | 20 |
· Test Repor | · 测试报告 | 7 | 8 |
· Size Measurement | · 计算工作量 | 3 | 8 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 11 | 9 |
合计 | 1242 | 1323 |
个人学习进度条
第N周 | 新增代码(行) | 累积代码(行) | 本周学习耗时(小时) | 累积学习耗时(小时) | 重要成长 |
1 | 0 | 0 | 18 | 18 | 原型图设计 |
2 | 100 | 100 | 22 | 40 | 制定实现思路 |
3 | 789 | 889 | 30 | 70 | 实现UI界面 |
4 | 300 | 1189 | 44 | 114 | 实现接口对接 |
5 | 0 | 1189 | 12 | 126 | 类图绘制 |
6 | 421 | 1610 | 6 | 132 | 现场学习 |
7 | 913 | 2523 | 17 | 149 | 第三方请求框架学习 |
7 | 1028 | 3551 | 16 | 165 | 数据采集 |
7 | 742 | 4293 | 9 | 174 | 前后端交互学习 |
8 | 675 | 4968 | 7 | 181 | 数据处理 |
8 | 698 | 5666 | 7 | 188 | 继续前后端交互学习 |
8 | 893 | 6559 | 6 | 194 | 实现个人主页模块 |
9 | 421 | 6980 | 7 | 201 | 后端框架学习 |