Alpha - Postmortem
NewTeam 2017/11/18
设想和目标
返回目录
1. 软件要解决的问题
我们要解决方便用户在手机上使用博客园班级博客的问题。在功能规格说明书中对需要解决的问题、典型的用户和典型的场景有清晰的描述。
2. 是否达到目标
实现了原计划的Alpha阶段的功能,比较顺利的按照原计划的时间交付,没有达到原计划的用户数量。
3. 用户量, 用户对重要功能的接受程度
用户量没有达到预期,可能的原因的宣传和推广做的不够好。用户比较能够接受现有的功能并且表示愿意尝试下个版本带来的改进,用户反馈了一部分在测试阶段没有发现的bug。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
- 尽早考虑发布和用户记录相关事宜,对用户记录功能进行充分测试,解决掉问题。
- 在进行用户调查时应该采用问卷调查和用户访问等多种方式,不应该浮于表面。
- 应该找到更好的推广方式,加大推广的力度。
计划
返回目录
1. 是否有充足的时间来做计划?
用了充足的时间对开发阶段做了计划,并且在开发过程中根据实际的进展对开发计划进行了调整。
2. 团队在计划阶段是如何解决同事们对于计划的不同意见的?
确定计划的流程是由项目经理提出计划,团队成员一起讨论、修改和确认。成员的意见通常没有明显的冲突,对于不同意见,一般会根据进展状况、人员分工、时间要求等客观因素进行协调。
3. 你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
基本完成了,但是部分功能在发布之后发现了一些问题,在继续接受反馈和进行修复。
4. 有没有发现你做了一些事后看来没必要或没多大价值的事?
没有,所做的都是最基本的功能和最基本的工作。
5. 是否每一项任务都有清楚定义和衡量的交付件?
是。通常一个功能会由三个任务组成:API的测试、包装和界面的搭建、切换、数据的显示以及对功能的测试,由不同的成员完成,两个任务都完成后,可以实现功能,经过测试人员测试,认为功能比较完整。每个任务完成后能够看到一定的成果。
6. 是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
基本按照计划进行,但是在实现登录功能时API的调用一直不成功,导致登录功能一直不能实现,涉及到修改和权限的功能也受到一定影响。
用户记录异常。在正式发布之前用一个测试app对用户记录功能进行了测试,但是正式发布后的数据出现异常
7. 在计划中有没有留下缓冲区,缓冲区有作用么?
Alpha阶段的计划中没有明确的缓冲区,但是周末没有Scrum Meeting,任务也相对较少,可以认为是用来休息以及完善之前任务的缓冲区。
8. 将来的计划会做什么修改?(例如:缓冲区的定义,加班)
Beta阶段有其他的大作业,可能投入到项目中的时间不能够保证。下一步的计划中会延续之前给每个功能的完成设时间节点的做法,在每个节点前中找一个尽量所有人都有空的时间作为缓冲区,集中完成任务。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
- 尽早考虑发布和用户记录相关事宜,对用户记录功能进行充分测试,解决掉问题。
- 发布之前及早开始进行更加全面的测试。
- 应该找到更好的推广方式。
资源
返回目录
1. 我们有足够的资源来完成各项任务么?
有五个人,三个人负责开发,一个人负责测试,每个人都能配置好环境,且不需要后端的开发,资源相对比较充足。但是五个人都没有用来开发IOS的设备。
2. 各项任务所需的时间和其他资源是如何估计的,精度如何?
由于不需要后端,只需要对API进行调用,而且现阶段前端的工作在难度上没有太大的差别,所以基本是以页面为单位进行估计的。除了登录功能的部分基本比较准确。
3. 测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?
用于测试的时间和人员安排不够合理,在稳定和发布阶段把测试的任务交给了人测试员一个人,可能有些方面测试不够充分,alpha版本发布后收到了一些bug反馈。
没有,项目经理可以担当除开发和测试以外所有的工作,beta阶段会对美工设计进行更过的改进。
4. 你有没有感到你做的事情可以让别人来做(更有效率)?
各个成员担当着自己的责任,任务的分配相对来说比较均衡,其中测试人员对测试中所做的工作更为了解,所以最终由测试人员完成了测试计划和测试报告,比由项目经理完成更有效率。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
- 低估了测试的工作量,应该及早开始测试,并且在稳定和发布阶段对人员的分配进行适当的调整,加大测试的力度,尽心更全面的测试。
变更管理
返回目录
1. 每个相关的员工都及时知道了变更的消息?
是的,通常变更会在Scrum Meeting中由大家一致决定或者在群里进行讨论,或者由项目经理告知相关人员。
2. 我们采用了什么办法决定“推迟”和“必须实现”的功能?
正式开发之前进行了问卷调查,实际的了解了班级博客中使用相对较多的功能,把这些功能作为必须实现的基本功能,其他进行改进的功能和不常用的功能作为可以推迟的功能。另外有些现阶段实现起来较为困难且可能影响整体进度的功能也被推迟,可能成为alpha阶段的bug。
3. 项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?
能够在大多数手机上稳定运行,正常使用基本功能。
4. 对于可能的变更是否能制定应急计划?
在多个平台进行发布,包括一些审核条件较为宽松的平台,避免所有平台的审核都不通过。
但是用户记录出现的问题始料未及,并且至今没能解决。
5. 员工是否能够有效地处理意料之外的工作请求?
Alpha阶段的开发过程中基本没有较大的变更,遇到的技术问题基本能够比价顺利的解决。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
- 尽早考虑发布相关的事宜,事先了解不熟悉的流程。
设计/实现
返回目录
1. 设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?
设计工作在正式开发之前由项目经理完成,这段时间其他成员需要进行环境的配置和新技术的学习,由项目完成然后所有成员讨论、修改,是比较合适的时间和方案,但是可能不是合适的人。因为后面实际的开发过程中采用的并不是最初的架构,大家讨论之后觉得现有的架构更合适。
2. 设计工作有没有碰到模棱两可的情况,团队是如何解决的?
在架构的设计方面有较多的不确定的地方,在后续的开发过程中采用了大家都认可、结构更清晰的方式。
3. 团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
使用了Axure进行了原型设计,使用ProcessOn进行了功能分布、成员分工、整体架构的设计。能够较为清晰的呈现出项目的结构,在功能、架构上与最初的设想并不相同,在开发的过程中根据实际的进展和必要性进行了修改。
4. 什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?
涉及网络请求的功能。发布之后发现有时候班级无法加载,有的班级加载作业列表时无法做出反应。测试过程中没有遇到类似的bug,但是这些bug的出现似乎也是意料之中,因为在开发过程中进行对API的测试和使用是遇到问题最多的环节,目前仍在寻找bug出现的原因。
5. 代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
签入时PM会做简略的代码复审。
制定了代码规范,但是考虑到代码规范的条目过于繁琐,实际执行过程中可能占用不必要的时间,因此开发过程中仅严格执行了对可读性影响最大的命名和注释。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
- 设计过程中对模块的划分做的不够好,考虑不够全面。虽然也参考过成型的react native项目,但是基本都是用了其他一些框架,考虑了必要性和学习成本,并没有使用这些框架。应该征求大家的意见。
测试/发布
返回目录
1. 团队是否有一个测试计划?为什么没有?
测试人员在正式的开发工作开始之前制定了测试计划
2. 是否进行了正式的验收测试?
是。进行了场景测试、压力测试、集成测试、兼容性测试。
3. 团队是否有测试工具来帮助测试?
使用腾讯的WeTest平台,对主流的50款手机进行了兼容性测试。
4. 团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
采用appium+python脚本的策略进行自动化测试,主要测试软件的特定功能。
5. 在发布的过程中发现了哪些意外问题?
原计划在360、腾讯和酷安网上进行发布,但是由于360和腾讯对此类app的开发者资质、版权有限制,没能通过审核。
一开始在酷安网的安全测试一直不通过,后来使用了腾讯提供的加固工具和360的签名工具对app进行了加固和重新打包在酷安网完成了发布。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
应该对测试工作更加重视,原本认为后端数据都是通过官方API获取,不可控制,导致对测试的重视程度不够,发布之后仍有bug。即使是对于获取数据过程中出现的问题,也应该进行一些处理,保证程序的稳定运行。对用户记录功能进行充分的测试和验证。
团队的角色,管理,合作
返回目录
角色确定
团队成员自己选择想要担当的角色,成员的选择倾向能够满足团队的角色需求。各成员能够发挥各自的长处:开发人员有较强的学习能力和编程能力,测试人员能够比较细致全面的对代码和产品进行测试,项目经理可以写文档,做计划,在成员之间进行沟通和协调。
互相帮助
一个功能通常会分解成2-3个任务分配给不同的成员,在完成任务的过程中遇到问题时通常会在Scrum Meeting结束后进行讨论,或当面检查代码中的问题。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
- 应该充分考虑各位成员的意见,尽可能让各位成员做自己擅长的事情。在任务分配时应该更多的给成员自主选择权,让所有成员都对项目管理拥有一定主权。
总结
返回目录
你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?
第二级,一定程度上可重复类似项目的软件开发。有基本的项目管理方式,采取了一定的措施控制时间。
你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?
磨合阶段。团队成员能够较好的进行合作,项目能够顺利推进,但是职责定义不够明确,基本按照功能进行划分,而且下阶段将不再需要对API进行测试和包装,成员的分工需要进行调整。
对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例。
- 无论团队内外,面对面的交流始终是最有效的沟通方式:了解进度的方式是Scrum Meeting + 代码签入,在Scrum Meeting中进行交流,有协作的成员遇到问题会面对面交流,共同解决问题。
- 可用的软件是衡量项目进展的主要指标:以完整的功能为单位进行任务的划分,每个阶段都完成新的功能,从第一阶段完成开始就是可用的软件。
- 保持简明 - 尽可能简化工作量的技艺 - 极为重要:每个人基本不会同时面对多个任务,当前任务完成,当前功能实现后,才会安排新的任务。
下一阶段改进
- 更加重视测试工作,根据进度和项目所处的阶段调整测试工作分配的人力和时间。
- 制定计划时应该充分考虑各位成员的意见,发挥集体的智慧。
- 任务分配的方式应该更加灵活,充分发挥各成员的优势。
- 应该多做一些风险管理,考虑所有环节可能出现的问题,准备备用方案,以避免影响进度或最终效果。