zoukankan      html  css  js  c++  java
  • Judy alpha postmortem

    设想和目标

    我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?

    要为 Julia 语言增加调试功能,并和 VS Code 对接,VS Code 对接所需实现的功能都是有非常明确的定义的。

    我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)

    未能实现全部计划的功能,只实现了一个能顺利运行、展示效果的版本,还不能完全达到 MVP 要求。

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

    不一致,按照原计划,可以开发出一个可以发布让大家使用的软件产品,但现在尚不能发布。离目标肯定是更近了,但落后于预想进度。

    计划

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

    没有,因为我们确认题目后两三天就要开始冲刺阶段了,所以前期计划确实很不充分,冲刺阶段发现了一些问题,相当于在冲刺阶段做了一些计划阶段该做的工作,影响了冲刺的进行。

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

    由于当时时间紧张,为了最大化效率,我们分别调研大家各自感兴趣的部分,然后开会互相汇报、交流的。

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

    没有做完,我认为最主要的原因是计划不够充分,导致未能在计划阶段发现所有的风险、摸好技术路线,实际上在冲刺阶段做了计划阶段该做的工作,影响了冲刺的进行。

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

    基本上没有,只有很遗憾没做充分的事情。

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

    是的,我们定义了冲刺阶段的三个里程碑事件,是可衡量的子任务。

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

    没有完全按计划进行,因为一方面 Julia 本身有计划时未探索清楚的设计缺陷,我们执行过程中决定放弃走不通的原定技术路线,换用了另一条技术路线。另一方面 VS Code 对接遇到了格外大的困难,虽然已经按照学习一个新框架所需的研读文档、调试代码的时间预留了缓冲,但实际花费的工作量更大。

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

    留下了缓冲区,但因为没预料到我们选择的技术路线的独特困难,缓冲区仍然没有阻止项目进展延期。

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

    我认为最重要的是,要做好计划再开始冲刺,只有摸清了技术路线和可能的难点,才能得出更准确的估计,方便高效进行编码工作。

    资源

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

    不太够,我们的人手较少,并且没有充分利用身边可获取到的其他资源(如咨询资深 Julia 开发者或 VS Code 开发者)。

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

    是按照 PM 以往做类似任务的经验估计的,除了因为调研不充分导致一项工作时间严重延期以外,其他工作的时间估计都是比较精确的。

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

    总体上来说,都合理估计了难度和需要的资源。

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

    如果这个“别人”限定在 5 位组员内,那么基本上没有这种情况,我们已经尽量采取了高效的分工方式。但如果考虑增加一两位组员的可能性,或许会有更好的分工。

    变更管理

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

    是的,每日例会交流了此类信息。

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

    由大家向 PM 反映问题并私下分析,之后的例会上分享情况并交流决策。

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

    有,我们定义了三个明确、可度量的里程碑。

    对于可能的变更是否能制定应急计划?

    没能很好地预料到所有可能发生的变更,因此遇到了未制定应急计划的变更。

    员工是否能够有效地处理意料之外的工作请求?

    较有效,因为计划的工作单位是比较弹性和抽象的,组员遇到问题时多能充分发挥主动性自己解决。

    设计/实现

    设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?

    在计划阶段做了一些计划本身所需的高层次的设计,细节设计则在冲刺阶段和编码一起完成,并在每日例会上交流重要的事项。我认为是合适的时间、合适的人。

    设计工作有没有碰到模棱两可的情况,团队是如何解决的?

    基本上没有遇到,我们这个需求比较明确和机械,没有弹性的业务逻辑或者用户界面需要做出设计决策,因此多数问题大家都自行选择了较为合理的一种实现方式。

    团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?

    由于未预料到的进度延期,计划中的测试和构建工作都没能实践,希望我们能在 beta 阶段顺利执行完整的 workflow。

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

    因为没能达到可发布状态,所以尚未追踪 bug,目前只有等待完成的剩余工作。

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

    原计划大家完成较完整的功能模块后,发 pull request,进行 review 后再签入仓库。但实践上因为我们两两分开做了不同的模块,用完全不同的语言和编程框架,而且都是大家不熟悉的全新的东西,所以两组之间没有互相评审对方的代码。而对于组内,两个人基本上都是结对编程的,没有另行评审的必要。beta 阶段应该更严格执行代码评审,即使不熟悉,评审过程也有助于给所有人讲清楚自己的代码逻辑。

    测试/发布

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

    有。

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

    未达到可进行验收测试的状态。

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

    未达到可进行测试自动化的状态。

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

    未发布。

    团队的角色、管理、合作

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

    PM 结合大家的兴趣和团队的人力资源需求做了项目计划,其中包含了角色安排,总体上这个安排没有遇到问题,可以说是人尽其才。

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

    有,每个小队内部都是结对编程的,大家也会帮助对方调试。

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

    在每日例会上讨论解决问题。

    总结

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

    我觉得目前只能算是偶然性开发成功,尚未体现出开发流程的可控性。

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

    磨合。

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

    计划。计划需要更加充分,再开始编码,不然风险太多,而且没有良好的预案,导致编码过程中出现新的问题,无法高效编码,需要停下来重新做计划。

    对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例。

    我认为结对编程和我们的团队分工是较好的,在有限的资源和实际的问题复杂性下尽可能提高了我们的生产力。

    正如我们前面提到的, 软件的质量 = 程序的质量 + 软件工程的质量,那团队在下一阶段应该如何提高软件工程的质量呢?

    • 如前所述,做更好的计划。
    • 在按计划进行的前提下,尝试使用规范的 workflow,包括编写 spec、code review、自动化语法检查、自动化测试、自动化构建。

    贡献分

    • Zibo: 18
    • Zhiqi: 19
    • Yu: 20
    • Manli: 21
    • Yuechen: 22
  • 相关阅读:
    [总结]并查集
    一些麻烦的语法知识
    P1496 找筷子
    P1314 [NOIP2011 提高组] 聪明的质监员
    HDU 1232 -畅通工程(并查集)
    POJ 1611 -The Suspects (并查集)
    方框(HPU暑期第四次积分赛)
    HDU 2191
    B
    HDU 1009
  • 原文地址:https://www.cnblogs.com/SmartHypercube/p/judy-alpha-postmortem.html
Copyright © 2011-2022 走看看