> **我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?**
- 我们的软件主要是为了解决物理实验报告的生成以及数值的处理,后期还会有物理实验题库。我们的典型用户就是北航需要选修物理实验的学生。
我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)
- 我们基本达到了目标,原计划就是在上一届的版本上继续开发,Alpha阶段主要就是复现上一届的工作,基本按照了原计划完工。但是由于这一届的学弟学妹没有物理实验,所以,原计划的用户数没有达到。
和上一个阶段相比,团队软件工程的质量提高了么? 在什么地方有提高,具体提高了多少,如何衡量的?
- Alpha阶段主要是和上一届的代码相比吧,我们修复了很多bug,软件工程质量有一定提高。主要是实验报告生成那块,修复了原有的一些问题。
用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?
- 用户量没有达到,用户对于重要功能的接受程度基本和我们事先的预想一致吧。我们离目标肯定肯定更近一步了。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
- 经验教训就是,没有事先调研这一届学生没有物理实验课程。如果重来的话,我们会事先调研好用户需求,再进行实际开发。
计划
> **是否有充足的时间来做计划? ** * 充足。
团队在计划阶段是如何解决同事们对于计划的不同意见的?
- 通过协商讨论,各抒己见,PM从中调和,达成一致意见。
你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
- 做完了。
有没有发现你做了一些事后看来没必要或没多大价值的事?
- 没有。
是否每一项任务都有清楚定义和衡量的交付件?
- 其实也没有很严格的标准,大部分时间就是交了就完事了。
是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
- 有一点意外,上一届代码遗留的一些问题不太好找,而且由于我们是重构,所以复现原功能遇到了一些小意外。因为当时不知道有这么多坑!
在计划中有没有留下缓冲区,缓冲区有作用么?
- 有,主要是缓冲计划,不至于太赶。
将来的计划会做什么修改?
- 对项目可能遭遇的风险进行提前评估,预留好缓冲区。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
- 就是要预估项目可能的风险,预留好缓冲区,提前做好用户调研。
资源
> **我们有足够的资源来完成各项任务么?** * 有。
各项任务所需的时间和其他资源是如何估计的,精度如何?
- 主要是根据项目的难度以及组员对这个内容的熟悉程度,精度还可以。
**测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度? **
- 测试的时间,人力和软件/硬件资源是足够的。有部分美工确实挺难的,我们也没有低估。
你有没有感到你做的事情可以让别人来做(更有效率)?
- 每个人都有自己的定位吧,所以可能有的同学对这块内容更加熟悉,效率肯定更高。但是每个人都有自己的分工吧,所以说这个真的没啥意义。让别人来做会不会更有效率,答案是会,但可不可以呢?答案是不可以!
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
- 我们会分工更加合理。
变更管理
> **每个相关的员工都及时知道了变更的消息?** * 及时知道了。
我们采用了什么办法决定“推迟”和“必须实现”的功能?
- 例会讨论,分别发言,以理服人。
项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?
- 功能完善,经过了测试,用户满意。
对于可能的变更是否能制定应急计划?
- 能。
员工是否能够有效地处理意料之外的工作请求?
- 分情况吧。时间空余就会处理,不空余就转到PM那进行统一调度。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
- 在最初始就确立一个明确的目标能有效地提高效率,如果再来一遍,我们应该会将目标定得更加详细些,减少变更带来的效率损失。
设计/实现
> **设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?** * 设计工作是在项目的起始阶段(第一周)由PM完成,PM是最了解需求的岗位,所以是合适的时间也是合适的人完成的。
设计工作有没有碰到模棱两可的情况,团队是如何解决的?
- 遇到过,比如网页的布局什么的,都是由负责的人互相协商解决的。
团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
- 我们运用了单元测试、gitlab代码管理、issue进度管理等工具,这些工具比较有效,我们没有UML文档。
什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?
- 实验报告界面产生的bug最多,主要由于继承的第一版代码不全。发布之后发现java和latex在服务器中占据内存过大,服务器内存不够的情况。继承的代码不全是无法预料的,而内存不足则是没有考虑到服务器的配置问题。
代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
- 代码复审主要由顾展鹏和袁勤负责,还算严格,不过还有改进的空间。
我们学到了什么? 如果重来一遍, 我们会做什么改进?
- 设计的越明确,越能减少推翻重来的可能性,也就越提高效率, 如果重来一遍,我们应该花更多的时间去设计。
测试/发布
> **团队是否有一个测试计划?为什么没有?** * 有。就是让我们每个组员模拟真实用户去试试水,其次要对这个代码进行单元测试,最后还要邀请其他组来进行互测。
是否进行了正式的验收测试?
- 因为大家经验不是佷丰富,所以验收不是很正式。
团队是否有测试工具来帮助测试?
- 例如单元测试等。
团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
- 主要是测试这个请求响应的耗时,加载页面的速度,以及最后报告生成的准确度。这些工作都非常有必要,因为这都和用户体验息息相关,我们应该在细节上更加注意,精益求精。
在发布的过程中发现了哪些意外问题?
- IDEA上装的一些插件,部署到服务器时有一点小问题。
我们学到了什么? 如果重来一遍, 我们会做什么改进?
- 测试应该更早地进行,需要留出更多的时间给缓冲。
团队的角色,管理,合作
> **团队的每个角色是如何确定的,是不是人尽其才?** * 主要是通过这个自愿报名,然后进行分工吧,人尽其才不好说,每个人做了自己想做的事情吧。
**团队成员之间有互相帮助么? **
- 有的,我们有问题会及时在微信群及时交流。
当出现项目管理、合作方面的问题时,团队成员如何解决问题?
- 主要是在群里讨论,以理服人。
总结:
> **你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?** * 磨合吧。
**你觉得团队在这个里程碑相比前一个里程碑有什么改进? **
- 没有。
你觉得目前最需要改进的一个方面是什么?
- 技术学习,提高大家积极性。
**对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例。 **
- 无论团队内外,面对面的交流始终是最有效的沟通方式。比如说,我们有问题都放到每日例会上来讨论,及时把问题沟通清楚。
- 敏捷流程欢迎需求的变化,并利用这种变化来提高用户的竞争优势。比如说,我们经常讨论如何让我们的这个物理实验网站变得更加有吸引力,应该向哪些方面扩展。
正如我们前面提到的, 软件的质量 = 程序的质量 + 软件工程的质量,那团队在下一阶段应该如何提高软件工程的质量呢?
- 代码要保质保量,定期进行代码复审。
- 扩展物理实验网站的应用范围,提高用户数量。