对第一次迭代的总结

队名:134+1  项目:基于神经网络的人脸情绪识别系统

思考总结

设想和目标

  1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?  
    • 我们软件的定义很清楚,就是基于神经网络的人脸情绪识别系统,也就是通过神经网络训练来实现人脸的情绪识别并不断提高识别情绪信息精度。
    • 典型用户和典型场景:对于心理辅导方面可以通过交流的情绪了解一个人的性格等等指定相应的辅导方案,以及对于商业方面统计人脸情绪信息了解广告的推广效果,总结就是对大量的或者长时间的人脸的情绪信息的采集和分析的时候会需要用到。    
  2. 我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么? 
    • 原计划功能:通过图片输入生成情绪信息表,通过视频输入生成静态的情绪曲线图(时间轴为横坐标,纵坐标为各个情绪分数,开心、失落等等)
    • 实现情况
      • 通过py制作UI界面实现了图片和视频文件的输入并做了限制条件,并通过测试得出信息制作出相应的情绪曲线图和信息表进行显示。
      • 通过数据集对神经网络进行训练使对原数据集测试的准确率达到了80%~90%,对与其他数据集图片测试准确率能够达到40%~50%。
      • 能够通过opencv对视频进行分帧处理和截取人脸以及对人脸进行相关处理等等
    • 总对于最开始指定的第一次迭代的实现功能版本上面需要实现的功能都已基本实现。

  3.用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?

    • 本次项目我们并未投入使用,主要的用户使我们的指导老师和助教。
    • 从用户的反应来看,接收程度基本和预想的一致,只是对于用户注册的功能需要添加。

  4.有什么经验教训? 如果历史重来一遍, 我们会做什么改进?

    • 教训:对于项目的目标和设想一定要首先依据用户的需求,根据自己队伍的总体能力,合理划分,合理计划,对于用户提出的建议和意见一定要积极听取并交流采取相应措施。
    • 改进:对于系统一定要有用户登录功能连接数据库,对于界面的设计一直是短板,本次只是设计简单界面实现基本功能,还是没花太多功夫也没有多去了解和吸取一些优质的模板,下次一定要对界面进行相应的优化。

计划

  1.是否有充足的时间来做计划?

    • 对于做计划的时间还是十分充足的,对于自己要完成那些任务还是比较清楚的,只是不懂得合理分配任务进度也不是很积极的去执行计划,总是最后一两个星期才真正进行编码的工作。

  2.团队在计划阶段是如何解决同事们对于计划的不同意见的?

    • 对于计划的意见分歧还是有很多的,比如初期的需求的制定,原本老师给的需求版本是比较简单的,但是具体到实现的时候就会有许许多多的小的功能模块的划分,对于不断增加的需求和延伸以及对自己能力判断的不够精准会导致需求制定的意见分歧,另外还有一些文档的编写和制图功能的任务分配也是有意见分歧。
    • 解决方法就是对于需求的制定尽量发散,但是第一次迭代尽量实现老师的基本需求,后面的延伸部分就是放到第二次迭代,这样在进行第一次迭代任务的时候就会对自己的能力有个判断,那么在后面的任务分配就不会有太多分歧。分配任务之后涉及到项目具体知识的部分,就是充分相信自己的组员了,只能做一个督促的作用,最后对于作图方面的意见分歧就是不分配到个人,一起思考和制作,这样就可以共同分析,两个人的争吵不如共同学习然后交流最后意见的统一。

  3.你原计划的工作是否最后都做完了? 如果有没做完的,为什么?

    • 我原计划的工作是制作UI原型,根据原型使用pyqt制作UI界面,并实现通过情绪信息制作图和表的功能。  
    • 计划的工作都是完成了的。只是设计出来的界面确实还是有很多能够美观和优化的地方。

  4.有没有发现你做了一些事后看来没必要或没多大价值的事?

    • 首先是最开始的需求分析的时候各个组员去了解相关知识了解如何做的过程,还分成了五个部分,首先分成的五个部分的工作量不太合理,另外是还没有开始编码,不太明白项目具体实现方式,首先应该弄清楚要做什么东西,然后再弄清楚怎么做,而不是上来就去网上查怎么做,因为网上的方法和框架什么的太多了,看的也不是很明白。
    • 对于我自己的实际编码来说,在制作情绪曲线图的时候开始是制作曲线图思路是自己想的,也就是作图但是发现那个只有保存的方法,也就是做了图我只能保存才能拿出来展示,这就很违背常理,但是也是辛苦的做出来了,后来发现网上有一个另外的类可以用,方法也更好,可以直接显示,不用出图,所以还是舍弃掉了之前那个,就做了一些无用功,不过还是对第二种的编码学习理解有帮助的。

  5.是否每一项任务都有清楚定义和衡量的交付件?

    • 有的,毕竟第一次做项目,我们的方式是先各做各的,最后一个星期统一整合,因为我们项目和web开发的不太一样,中间需要交付的输入输出都不是很多,事先就可以商量好具体的需要的交互的信息,当然这次也是吸取教训,以后做其他的项目开发的时候最好是,大家一起做,实现了小部分的功能之后尽快接好的质量和效率可能会更高。

  6.是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?

    • 不是,还是有意外的,就像之前所说,开始都是各做各的,最后一周才进行三个部分的整合,各部分之前前期缺乏交流,每个部分都想做的最好完成任务在一起整合,就会导致有些部分没有完成或者最后对接的时候比较麻烦,本次项目就是核心的第二部分的神经网络训练开始的准确率不够高,所以迟迟没有开始对接,后来辛亏找到了学长了解了一些调参的技巧才提高了准确率,直到最后三天才开始对接,最后一天才完成了所有的对接和功能的实现,还是缺少沟通,主要还是各部分用的框架和专业知识是不太一样的,所以也不太懂得如何帮助去解决问题。
    • 风险还是对于各个部分的任务工作量的不品均,毕竟开始没做不太清楚,但好在还是完成了。

  7. 在计划中有没有留下缓冲区,缓冲区有作用么?

    • 计划的缓冲区还是很多的,就比如初期的交各种文档和材料的时候,每周一个材料,说麻烦也麻烦,但是还是有很多的时间去了解相关的编码只是的,另外就是第一次迭代编码的时候有三个星期的时间,指定的任务通常是只需要一个星期,但是给的时间是有三个甚至四个星期的,缓冲区的时间是很多的。
    • 缓冲区必须客观的去看待,一方面缓冲区会让你觉得自己的时间很充足,对于完成项目有一定的信心,但是另一方面,在缓冲区时段学习仅仅是三天打渔两天晒网的时候,很多东西学习了不直接用后面就又需要重新学习,也不是我喜欢的工作状态,我喜欢抽出连续的几天一直搞项目,这样的效率更高而且有成就感,本次项目我真正编码的时间也就最后一周的时间,虽然自己部分的编码任务也不是太重吧,还是很有成就感的。

  8.将来的计划会做什么修改?(例如:缓冲区的定义,加班)

    • 对于将来的计划,可以尝试一下,前期最好不要各做各的,最后一周再开始整合,而是边做边整合,这样不仅促进了团队中的交流,也能够更好的了解别的部分的工作进度和学习其他部分的相关原理。

  9.我们学到了什么? 如果历史重来一遍, 我们会做什么改进?

    • 对于计划方面,我们学习到了一个项目的完成对于一个团队,对于个人的制订计划的合理方案。
    • 对于改进,我认为我们目前是学生处于学习阶段,许多东西在今后的工作中可能不会用到,但是学到了东西点到即止了解原理即可,另外是平时其他的课程还是有许多的,对于这种周一制定整周的计划可能许多时候赶不上变化导致编码和学习任务一拖再拖,特别是对于一周没有上交材料的时候就更加懒散了。

资源

  1.我们有足够的资源来完成各项任务么?

    • 对于第一次迭代来说,资源方面需求也不是太多,比如数据集和学习资料什么的,网上都可以找到,电脑的配置也基本能够达到第一次迭代的功能实现要求。所以资源是足够的。
    • 并且老师也介绍了许多有相关项目经验的学长学姐的联系方式和提供了一些优秀的论文。

  2.各项任务所需的时间和其他资源是如何估计的,精度如何?

    • 这还是讲计划那部分,对于对于任务所需的时间开始还是预留了许多的时间的,毕竟我们项目不是web开发需要写许多的页面。对于资源方面都是自行上网查找和询问相关学长。
    • 精度方面还行,毕竟计划预留的时间还是很多的,至于在时间里面怎么分配就是各人的事情了,但是各部分都是能够按时上交代码的。

  3.测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?

    • 人力和软件/硬件资源对于第一次迭代来说是足够了的,因为我们组一共五个人,但其实只分成了三个部分。
    • 对于不需要编程的字眼开始确实低估了难度,主要是一些文案、开始的需求分析和UML图的制作,这些都是开始没有考虑到的,也是一个学习的过程,做着做着就熟练了。

  4.你有没有感到你做的事情可以让别人来做(更有效率)?

    • 有感到过,说实话我们组的三个部分除了第二个部分神经网络训练是核心有点困难之外,其他部分都不是太难,而且我们组有一位大神,让他做肯定是都能完成,并且可能比我们分开做的效果更好效率更高的,但是我们都是在学习嘛,肯定要充分地肯定和相信自己,有参与感,从中有所收获有所学习,这才是完成这个项目的目的吧。

  5.有什么经验教训? 如果历史重来一遍, 我们会做什么改进?

    • 对于资源方面,我们还是认为分配的不是太合理吧,原因还是第一次做项目不够自行,把项目的核心部分也就是神经网络分给了组内大神,自己没有太参与,自己又是PM,有许多的文件需要我来整合和撰写。
    • 改进:项目分工应该更加协调,主要是各个部分应该交流更加紧密,对于自己的UI设计方面也不应该全部自己完成,还是应该最开始的原型设计召集大家一起设计,代码实现我来完成就好,虽然最后出来也不是太影响体验,可以接受,但是还是出现了一些组内的分歧。

变更管理

  1.每个相关的员工都及时知道了变更的消息?

    • 都能够及时知道,我们小组的组员都在一个班并且住的宿舍挺近的,所以有什么事情和变动都会和大家说清楚,很方便。

  2.我们采用了什么办法决定“推迟”和“必须实现”的功能?

    • 对于必须实现的功能就是整个项目的主题,没有哪些部分整个项目就跑不起来,这是必须实现的,比如ui设计和一些触发,神经网络训练,截取人脸和视频分帧等等。
    • 对于推迟的就是那些附加的,比如提高训练的准确率,摆正人脸,美化等等。

  3.项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?

    • 有的,所有的做好在第一次迭代的功能都已经写的很清楚,当然这可能只是表示完成了,我们认为当然可以做的更好,有提升空间,但是对于我们来说实现了所有的功能并整合完成就是做好了。

  4.比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?

    • 对于区别还是有的话,基本思路和制作是没有改变的,只是感觉有些部分好像不是很规范,和现在的状态是基本一致的。
    • 对于UML文档应该是不需要更新的,和最初的思考基本一致,只是一些附加的功能没那么具体的画在UML中。

  5.什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?

    • 我们的项目是基于神经网络的人脸情绪识别,和其他组的web开发做界面的不太一样,核心是训练的准确性,而且在验收的时候确实也没有发现什么bug,在实现项目的过程中,要说bug也不算,就是测试情绪的准确性还可以提升。
    • 开始的时候认为按照网络上的方式是可以成功的,而且也充分相信组员的能力,但是后面他找了一个比较好的论文阅读了解设计出来的准确率还是没有说的那么高,主要是不懂的如何调参,我在一旁也不太好问太多,因为自己也不太了解,好在问了一个专门搞神经网络的学长,调整参数之后准确率有了大幅提高。

  6.代码复审(Code Review)是如何进行的,是否严格执行了代码规范?

    • 代码复审是我们全组成员一起探讨其他组的代码规范问题的,也不是太严格,说实话之前自己也不是太注意编码的规范化, 自己部分的代码也是在整合的时候让大神组员重新改了一下规范,对于代码复审也是以有经验的组员为主,也找了部分代码不规范的地方,没有按照规范书一条一条的确认,但是找出来的都是在规范书上有原话的,虽然在我看来有点吹毛求疵,但想了想确实是我们需要注意的地方。

测试/发布

  1.团队是否有一个测试计划?为什么没有?

    • 对于团队来说还是有测试计划的,每个部分,每个代码文件的每一个类都是测试过了的,并且也对一些边界进行了限制,主要是不像web有太多的小的功能,我们的测试也是比较系统的。

  2.是否进行了正式的验收测试?

    • 是,助教进行了验收。

  3.团队是否有测试工具来帮助测试?

    • 不需要测试工具,用的是一些数据集进行训练即可。

  4.团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?

    • 也没有跟踪测试,也是首先各人测试成功自己编写的代码,然后最后整合的时候再统一测试一遍,再依据测试验收的评分标准进行比对。
    • 测试工作还是很有必要的,因为在测试的过程中还是发现了许多问题,比如文件的输入格式,大小等等输入之后可能会卡顿或者UI炸掉,总之后面都还是调通了。
    • 改进方面应该上网多去了解一些软件测试的相关知识,系统的科学地进行测试。

  5.在发布的过程中发现了哪些意外问题?

    • 进行完第一次迭代,也不能说是发布吧,只能说去验收,也没有发生什么意外。

  6.我们学到了什么? 如果历史重来一遍, 我们会做什么改进?

    • 测试方面跟之前的改进差不多,应该上网多去了解一些软件测试的相关知识,系统的科学地进行测试。
    • 另外仔细阅读验收的评分标准。

团队的角色,管理,合作

  1.团队的每个角色是如何确定的,是不是人尽其才?

    • 团队中每个人都是开发人员,都负专责一部分的编码工作,只是前两个部分时两个人一起做,基本上也是基础好一点的带差一点的,以此促进相互学习,至于能不能够学到东西还是要看他自己了。因为这样也可能造成基础差点的同学没有参与,总的来说我们组还是比较好的,有许多的合作过程。

  2.团队成员之间有互相帮助么?

    • 有的,基本上都是我们组那个比较优秀的组员会给其他组员介绍经验。
    • 并且作为pm,我也会督促他们的完成任务和一些文档的撰写,以及促进组内之间的沟通。

  3.当出现项目管理、合作方面的问题时,团队成员如何解决问题?

    • 当然是共同探讨整合意见,理性分析,实在不能解决的就去向老师询问。总之要把分歧尽量解决,只有团队齐心协力,工作效率才能提升。

总结

  1.你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?

    • 属于CMMI一级,完成级

  2.你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?

    • 磨合阶段已经完成,处于规范阶段。

  3.你觉得团队在这个里程碑相比前一个里程碑有什么改进?

    • 前一个里程碑应该是需求说明书的完成,这个里程碑应该是团队分别编码共同整合的过程,不仅提高了各自的学习和动手能力,同时还增强了团队的凝聚力。

  4.你觉得目前最需要改进的一个方面是什么?

    • 之前在各个方面的改进也说过了,首先是小组内的积极性和协作性。
    • 对于实现功能的分工应该更加科学,每个人都有参与感和学到东西。
    • 然后就是测试方面的系统科学的测试。
    • 最后对于我自己来说,要合理计划并尽量按时执行,这是我做项目最重要的,毕竟对于自己的能力还是有信心的。   
原文地址:https://www.cnblogs.com/huimiang/p/10099410.html