设想和目标:
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. 团队是否运用单元测试(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,你觉得目前最需要改进的一个方面是什么?任务布置不够细化,没有合理的衡量指标