设想和目标:
1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
问题定义:目前有一种情感维度理论,我们要用机器学习的方式给出人脸的维度值。
典型场景1:用户通过视频文件输入,软件需要输出视频中每一帧人脸情绪的维度值。
典型场景2:用户通过本地摄像头实时获取人脸数据,软件需要实时给出情绪维度值。
2. 我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)
场景一的功能实现了,但只是在代码阶段,没有做到易操作的客户端上。场景二功能还未实现。
3. 和上一个阶段相比,团队软件工程的质量提高了么? 在什么地方有提高,具体提高了多少,如何衡量的?
有所提高,软件质量和团队合作都有提高。现阶段客户端界面更加美观,团队合作更加紧密,合理根据成员特性分配相应任务。
4. 用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?
重要功能和预想一致,但用户体验未达到预期。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
除了学会了很多技术,更重要的是知道了如何更好的团队合作。如果重新来过,我们客户端肯定会利用开源模板和框架以加快开发,以及团队合作的任务任务分配会更加细化,
不会像之间一样笼统,因为任务划分不细每周会议上很难评估。
计划
1. 是否有充足的时间来做计划?
一开始对项目需要的技术和难道不够了解,导致第一次迭代计划不合理。
2. 团队在计划阶段是如何解决同事们对于计划的不同意见的?
共同商议投票决定。
3. 你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
都有安排做,但有些未完成,因为有些内容涉及的技术比较难。
4. 有没有发现你做了一些事后看来没必要或没多大价值的事?
有,有些工作做了一半发现可以以更简单的方式实现。
5. 是否每一项任务都有清楚定义和衡量的交付件?
没有细致的分配任务,大多任务都是笼统的一句话:实现什么什么功能,具有什么输入什么输出,也没有衡量交付件。
6. 是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
按计划进行。
7. 在计划中有没有留下缓冲区,缓冲区有作用么?
没有留缓冲区。缓存区可以解决出现的计划之外的难题。
8. 将来的计划会做什么修改?(例如:缓冲区的定义,加班)
之前规划的第二阶段功能可能不能实现。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
项目前了充分了解才能做出合理的计划;任务布置一定要详细,并且要有衡量交付件。
资源
1、 我们有足够的资源来完成各项任务么?
- 时间不足,训练集比较大,训练的速度慢,没有更好的硬件环境,导致神经网络模型优化缓慢
- 总的技术水平不足导致人力资源不够,随着知识的学习而有所改善
2、 各项任务所需的时间和其他资源是如何估计的,精度如何?
- 项目开始时由于对项目不熟悉,时间与资源估计不到位
- 精度不足,经验与知识的不足,导致许多任务冲突,而拖累了进度
3、 测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?
- 简单整合之后进行了测试,发现存在不少bug,测试时间不够
- 硬件资源不足,网络模型的测试较为花费时间
- UI的设计一般,最后采用了网络上的模板
4、 你有没有感到你做的事情可以让别人来做(更有效率)?
- 任务的分工我们是按照不同人擅长的技术而进行的分配,基本不存在这个问题
5、 有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
· 时间估计不足,python与jsp的整合难度估计不到位
- 更加注重前端的设计,以及前后端的连接问题,而不是把重心放在后台网络模型,由于硬件的限制而拖慢了项目的进程
1. 每个相关的员工都及时知道了变更的消息?
都可以及时知道,这是因为我们每周都会召开不定期的小组会议,就现阶段遇到的问题进行讨论和解决,这使得我们每位小组成员都很清晰地知道我们的项目进度;我们还有一个项目日志,记录着修改代码的时间以及操作人,便于进行管理,同时每个小组成员都会拥有一份代码,保证代码不会丢失。
2. 我们采用了什么办法决定“推迟”和“必须实现”的功能?
我们小组采用了集中讨论并且寻求有类似项目经验的学长以及老师的意见和建议的方法来决定“推迟”和“必须实现”的功能;其中,最重要的一点还是我们以项目的核心算法为核心来确定其为“必须实现”的功能,类似于部署到服务器上为“推迟”功能。
3. 项目的出口条件(Exit Criteria)是否得到清晰的定义?
“出口条件”,其实就是项目有没有达到设计的标准,也就是说项目能不能满足用户的各种需求,在我们小组的项目中,是直接奔着用户的需求去做的,也和用户(也就是老师)就行了很多沟通,能实现人脸情绪识别,所以Exit Criteria得到了很好地满足。
4. 对于可能的变更是否能制定应急计划?
基本没有,虽然在项目中每个人都有自己的分工,但是每周召开的小组会议以及遇到问题无法解决及时讨论,再加上项目开始的前期,整个小组都是集中一起在学习项目的核心算法内容,每个小组成员都对项目的整体框架有着大致清晰的把握,所以对于可能的变更,小组内部经过短时间的讨论就能制定一个简易的应急计划。
5. 员工是否能够有效地处理意料之外的工作请求?
每个人的分工是由每周的进行的小组讨论总结决定的,在分工的过程中,是根据每个人的能力以及空余时间情况,相对公平科学合理的分配的,对于处理意料之外的工作请求,PM也会先召开小组会议,在根据实际情况来处理这个意料之外的工作请求。
设计/实现
1. 设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?
整体设计是在项目开始时讨论设计出来的,后续多次小组讨论,与老师交流对原有设计进行修改,调整;在迭代时对设计进一步优化,美化。设计工作非一蹴而就,全组成员都为设计工作贡献了一份心力。
2. 设计工作有没有碰到模棱两可的情况,团队是如何解决的?
有。就看具体执行的人是如何解决的,有的解决得好,大家并不知道出过问题;有的经常拿出来讨论,大家讨论解决问题。功能需求方面的问题则是同指导老师交流,征求老师的意见和需求,最终敲定需要实现的功能和满足用户的需求。
3. 团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么?
运用了腾讯敏捷开发平台(TAPD)记录项目,建立周计划与总结文档安排每周工作和总结每周的成果。还对每个阶段每个人要完成的总体功能了进行了规划与安排。较为有效,实现了对项目工作实时追踪与记录。
4. 什么功能产生的Bug最多,为什么?
前后台的连接方面问题较多,主要是因为前台用Java编写,后台功能代码是用Python编写的。不同程序语言间的交互连接还是有困惑之处。
5. 代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
代码复审是小组交换审查,主要还是代码变量、函数、类命名的问题,大家写代码搭建框架时都专注于功能是否完成,命名方面注意的很少,大多命名都不太符合规范;部分代码可能来源于网络的开源代码,只关心能不能用,结果对不对,哪管命名是否符合检查要求。再就是注释问题,有的地方缺乏注释,有的地方注释又太多,影响对代码的阅读。
测试/发布
1.团队是否有一个测试计划?为什么没有?
暂时没有,因为编程过程中就包含了测试
2.是否进行了正式的验收测试?
第一次迭代验收
3.团队是否有测试工具来帮助测试?
暂时没有
4.团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
自行进行了数据的测试,测试工作有用,我们发现项目中还存在一些bug,有待修复,我们也发现一些功能实现效果体验欠佳,有待完善与优化。
团队的角色,管理,合作
1. 团队的每个角色是如何确定的,是不是人尽其才?
根据每个人已掌握的技术和感兴趣的方向安排的,可以说是人尽其才了。
2. 团队成员之间有互相帮助么?
在会议上和共同讨论技术时都是互相帮助,回去后在团队群里的需求帮助可能缺少。
3. 当出现项目管理、合作方面的问题时,团队成员如何解决问题?
让没人人说出自己的理由和利弊,大家投票表决。
总结
1,你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?
处于初始阶段
2,你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?
磨合阶段
3,你觉得团队在这个里程碑相比前一个里程碑有什么改进?
主要体现在团队合作上会更加熟练和合理
4,你觉得目前最需要改进的一个方面是什么?
任务布置不够细化,没有合理的衡量指标