在Beta版本,我们的软件要解决的是在集群环境下部署服务的应用场景下,服务间的环境冲突的问题和,对CPU、内存、GPU等计算资源的分配问题。
我们达到了我们的目标
- 我们向系统中集成了适配集群的服务管理系统、文件系统以及我们开发的服务
- 我们的软件可以让用户对集群中的CPU、Mem、GPU资源配额进行申请和使用。
- 并且加入了管理员角色,让有经验的人可以借助我们的系统为一个团队提供技术设施支持。
- 我们给出了便捷的部署方式,将部署耗时缩短至原来的1/10
我们提高了非常多。
在软件工程质量上,经由Alpha版本暴露出来的一些合作,协同和管理上的问题,在Beta版本都得到了很大的解决。同时,我们在Beta版本更加善于使用CI来保证团队软件工程的最低质量,使得每一份提交的代码都是满足如单元测试等要求之后才合并的。
因此,在后续测试人员测试时,在BUG发现和测试指标上,Beta版本相较于Alpha版本都有了长足的进步。
有充足的时间来做计划,在Alpha版本的反思总结周,我们就开始着手计划Beta版本
完成了包括功能、技术规格;任务划分与依赖确认;分工;新版本前端与分工等计划。
先行沟通,沟通时看不到达成共识的希望则由PM敲定
除日志外其余的都完成了
日志功能存在现有功能可替代的特点,而且完成复杂度较高,性价比低,因为人力限制就取消了
在租赁机器部署虚拟机进行开发的时候并不是特别必要。
因为在Beta版本实际上我们已经从设计上保证了我们的软件是支持多节点部署的
可以直接在软件所提供的两台服务器上进行开发或者直接在本地单机进行开发
远程+虚拟机的开发体验并不佳
在开发阶段整个过程都在按照计划进行,但是在准备部署和展示的时候出现了意外
- 国内访问Docker Hub速度很慢,不稳定,推拉镜像的时候容易卡住或断链
- 最后做出来的ChatGLM镜像太大了,几乎不可能推到Docker Hub上,需要额外花费时间本地部署Harbor来装镜像
没有估计到的原因是对于部署没有进行提前准备和计划
有留下缓冲区,吸收上次倒排需求的经验教训,这次使用了正排的需求,对需求预留了缓冲。
将来我们会对功能进行更加详细的设计,两个版本的开发由于时间关系,设计的粒度并不是很细致,在未来时间充裕的条件下,会进行更细粒度的设计,并争取将全流程(包括设计开发测试)的计划进行集成。
有足够的以下资源来完成各项任务:
- 开发所需要的硬件资源
- 业务所需的技术储备
- 开发的人力资源
和Alpha版本又PM估计,精度精确到小时
由于时间有一定的压缩,测试的时间也同样受到了一定的压缩
对于其他的不需要编程的资源,我们并没有低谷难度,也分配了相应的人力来做
在Beta版本,新一版的工作分配后就没有这个问题了
是的,和前一个版本一样,这一版本我们也会为每一个变更留存文档和通知全体
面向典型用户与应用场景来看,如果在典型应用场景中出现的功能则为必须实现的功能,其余的辅助必须实现的功能就是可以推迟的功能。
出口条件为:通过测试人员为这一个方法/模块设计的所有测试样例
能,Beta版本只通过仅会增加工作量的变更,如果需要对已出口的模块进行修改的变更是不予通过的
可以的,如果工作只是临时性的,不需要花费太多时间的话
Beta阶段的设计分为两个部分
- 项目结构设计:由PM在Beta阶段的开始进行设计
- Web页面设计:由UI/UX和前端负责同学在前端设计阶段设计
是合适的人选,也是合适的人
设计工作不存在模棱两可的情况,因为设计的人和实现的人存在重合
-
团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
团队运用了单元测试,但并未运用TDD和UML这些工具。单元测试有效,能够帮助发现一些可能的bug,节约联调时花费的时间。
项目相关的功能,因为他是最复杂的功能。发布之后未发现非常严重的BUG。
Code Review与Alpha版本一致,由前端/后端的小组负责人负责,负责人则由剩下的同学进行review
面对代码规范不一致的情况,在开发阶段需要被打回修改,但是在测试修复的时候执行有一定疏漏
团队在Beta版本的测试方案Beta
进行了正式的验收测试,并定义了出口条件,对照条件来验收我们的程序是否可行。但未作其他处理。
除了单元测试中常规使用的mock, fake, go test, pytest等相关框架。负载/压力测试部分使用了Jmeter进行测试与结果分析。
- Docker Hub连接不够文档,出现拉取镜像超时的情况
- 租用服务器时磁盘空间选太小了,存在了磁盘压力过高的情况
由Alpha版本各同学展现出来的擅长处决定,在Beta版本更大程度的人尽其才
有的,同技术栈内的调试等工作为互相帮助
需要由PM来协调
- 在Beta版本的源代码中文档还是有所欠缺,应该对源代码进行整理和编写文档,并将散落在各地的源代码链接聚合在同一个仓库
- 代码复审时,目前仅对一些局部范围内的,可能出现错误的写法、边界条件的检查、代码风格等检查,应该对于函数调用的签名也熟悉一下,检查一下调用的检查
- 代码规范中Go的函数和方法分解不是特别清晰,应该更加注意
程序的可靠性上还有可以提高的空间
- Webshell的端口占用关系在本地维护,导致计算资源管理模块无法多副本部署,应该支持一些分布式缓存让计算资源管理模块也能够多部分部署,提高可靠性
- 例如MySQL、Redis、Rabbitmq没有配置分布式部署的机制,在未来应该可以配置主从,进行分布式部署,提高可靠性
- 衡量质量的提高主要看模块在不影响功能的前提下能够承受什么程度的事故,在Alpha版本满足了对于任意模块挂掉后不影响其他模块的功能,在Beta版本除了计算资源管理模块外,其它模块挂掉部分实例并不会影响该模块的功能
可以提高飞书文档的使用灵活性,搭建更直观清晰、重点突出的进度看板等内容
相对于Alpha版本来说,Beta版本新增了PERT图来展现子功能之间的依赖关系
但是由于Beta版本的时间不确定性因素太多没有对各功能的时间区间进行约束
项目目前的可维护性仍然由代码的可读性、接口文档、部署文档支撑,应该补充上开发文档等内容
对人对领导和管理,应该不用对人的自驱力抱有期望,应该给出足够的输入、和给定输出的时间期限、规范标准,依赖自驱力很难产出符合要求的东西。
在Beta版本,我们的软件要解决的是在集群环境下部署服务的应用场景下,服务间的环境冲突的问题和,对CPU、内存、GPU等计算资源的分配问题。
我们达到了我们的目标
- 我们向系统中集成了适配集群的服务管理系统、文件系统以及我们开发的服务
- 我们的软件可以让用户对集群中的CPU、Mem、GPU资源配额进行申请和使用。
- 并且加入了管理员角色,让有经验的人可以借助我们的系统为一个团队提供技术设施支持。
- 我们给出了便捷的部署方式,将部署耗时缩短至原来的1/10
我们提高了非常多。
在软件工程质量上,经由Alpha版本暴露出来的一些合作,协同和管理上的问题,在Beta版本都得到了很大的解决。同时,我们在Beta版本更加善于使用CI来保证团队软件工程的最低质量,使得每一份提交的代码都是满足如单元测试等要求之后才合并的。
因此,在后续测试人员测试时,在BUG发现和测试指标上,Beta版本相较于Alpha版本都有了长足的进步。
有充足的时间来做计划,在Alpha版本的反思总结周,我们就开始着手计划Beta版本
完成了包括功能、技术规格;任务划分与依赖确认;分工;新版本前端与分工等计划。
先行沟通,沟通时看不到达成共识的希望则由PM敲定
除日志外其余的都完成了
日志功能存在现有功能可替代的特点,而且完成复杂度较高,性价比低,因为人力限制就取消了
在租赁机器部署虚拟机进行开发的时候并不是特别必要。
因为在Beta版本实际上我们已经从设计上保证了我们的软件是支持多节点部署的
可以直接在软件所提供的两台服务器上进行开发或者直接在本地单机进行开发
远程+虚拟机的开发体验并不佳
在开发阶段整个过程都在按照计划进行,但是在准备部署和展示的时候出现了意外
- 国内访问Docker Hub速度很慢,不稳定,推拉镜像的时候容易卡住或断链
- 最后做出来的ChatGLM镜像太大了,几乎不可能推到Docker Hub上,需要额外花费时间本地部署Harbor来装镜像
没有估计到的原因是对于部署没有进行提前准备和计划
有留下缓冲区,吸收上次倒排需求的经验教训,这次使用了正排的需求,对需求预留了缓冲。
将来我们会对功能进行更加详细的设计,两个版本的开发由于时间关系,设计的粒度并不是很细致,在未来时间充裕的条件下,会进行更细粒度的设计,并争取将全流程(包括设计开发测试)的计划进行集成。
有足够的以下资源来完成各项任务:
- 开发所需要的硬件资源
- 业务所需的技术储备
- 开发的人力资源
和Alpha版本又PM估计,精度精确到小时
由于时间有一定的压缩,测试的时间也同样受到了一定的压缩
对于其他的不需要编程的资源,我们并没有低谷难度,也分配了相应的人力来做
在Beta版本,新一版的工作分配后就没有这个问题了
是的,和前一个版本一样,这一版本我们也会为每一个变更留存文档和通知全体
面向典型用户与应用场景来看,如果在典型应用场景中出现的功能则为必须实现的功能,其余的辅助必须实现的功能就是可以推迟的功能。
出口条件为:通过测试人员为这一个方法/模块设计的所有测试样例
能,Beta版本只通过仅会增加工作量的变更,如果需要对已出口的模块进行修改的变更是不予通过的
可以的,如果工作只是临时性的,不需要花费太多时间的话
Beta阶段的设计分为两个部分
- 项目结构设计:由PM在Beta阶段的开始进行设计
- Web页面设计:由UI/UX和前端负责同学在前端设计阶段设计
是合适的人选,也是合适的人
设计工作不存在模棱两可的情况,因为设计的人和实现的人存在重合
-
团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
团队运用了单元测试,但并未运用TDD和UML这些工具。单元测试有效,能够帮助发现一些可能的bug,节约联调时花费的时间。
项目相关的功能,因为他是最复杂的功能。发布之后未发现非常严重的BUG。
Code Review与Alpha版本一致,由前端/后端的小组负责人负责,负责人则由剩下的同学进行review
面对代码规范不一致的情况,在开发阶段需要被打回修改,但是在测试修复的时候执行有一定疏漏
团队在Beta版本的测试方案Beta
进行了正式的验收测试,并定义了出口条件,对照条件来验收我们的程序是否可行。但未作其他处理。
除了单元测试中常规使用的mock, fake, go test, pytest等相关框架。负载/压力测试部分使用了Jmeter进行测试与结果分析。
- Docker Hub连接不够文档,出现拉取镜像超时的情况
- 租用服务器时磁盘空间选太小了,存在了磁盘压力过高的情况
由Alpha版本各同学展现出来的擅长处决定,在Beta版本更大程度的人尽其才
有的,同技术栈内的调试等工作为互相帮助
需要由PM来协调
- 在Beta版本的源代码中文档还是有所欠缺,应该对源代码进行整理和编写文档,并将散落在各地的源代码链接聚合在同一个仓库
- 代码复审时,目前仅对一些局部范围内的,可能出现错误的写法、边界条件的检查、代码风格等检查,应该对于函数调用的签名也熟悉一下,检查一下调用的检查
- 代码规范中Go的函数和方法分解不是特别清晰,应该更加注意
程序的可靠性上还有可以提高的空间
- Webshell的端口占用关系在本地维护,导致计算资源管理模块无法多副本部署,应该支持一些分布式缓存让计算资源管理模块也能够多部分部署,提高可靠性
- 例如MySQL、Redis、Rabbitmq没有配置分布式部署的机制,在未来应该可以配置主从,进行分布式部署,提高可靠性
- 衡量质量的提高主要看模块在不影响功能的前提下能够承受什么程度的事故,在Alpha版本满足了对于任意模块挂掉后不影响其他模块的功能,在Beta版本除了计算资源管理模块外,其它模块挂掉部分实例并不会影响该模块的功能
可以提高飞书文档的使用灵活性,搭建更直观清晰、重点突出的进度看板等内容
相对于Alpha版本来说,Beta版本新增了PERT图来展现子功能之间的依赖关系
但是由于Beta版本的时间不确定性因素太多没有对各功能的时间区间进行约束
项目目前的可维护性仍然由代码的可读性、接口文档、部署文档支撑,应该补充上开发文档等内容
对人对领导和管理,应该不用对人的自驱力抱有期望,应该给出足够的输入、和给定输出的时间期限、规范标准,依赖自驱力很难产出符合要求的东西。