04 | 瀑布模型之外,还有哪些开发模型?
增量模型是按照功能模块来拆分;而迭代模型则是按照时间来拆分,看单位时间内能完成多少功能。
场景一:外包项目,需要阶段验收。瀑布模型,更重视对每个阶段验收测试的过程模型。
场景二:项目风险高,随时可能会中断。 基于增量模型或者迭代模型进行开发,就可以有效降低风险。
场景三:山寨一款软件产品,希望能快速上线发布。 增量模型,划分好模块,先实现核心模块
场景四:客户都没想清楚想要什么,但是个大单子。统一软件开发过程(Rational Unified Process,RUP),适用于复杂和需求不明确的软件系统。
场景五:我的产品已经上线,但是需要持续更新维护。迭代模型。
敏捷开发并不算是一种开发模型,更像是框架或指南。有各种开发模型来实现敏捷开发,比如说极限编程(Extreme programming),看板(Kanban)和 Scrum。
- 一个以确认需求为主要目的的项目,就可以不用花太多时间在代码质量上面,低成本、高效做出来才是最重要的;
- 一个高风险的项目,则可以采用螺旋模型,出现问题及时止损;
- 一个很长时间加班加点,却一直没法上线,导致士气低落的项目,可以改成增量模型,先上线一个小模块,让大家看到成绩提升士气,然后再迭代,逐步上线其他模块。
05 | 敏捷开发到底是想解决什么问题?
瀑布模型核心的内容:流程和工具、详尽的文档、合同谈判、遵循计划。
瀑布模型的典型问题就是周期长、发布烦、变更难,敏捷开发就是快速迭代、持续集成、拥抱变化。
瀑布模型面向的是过程,而敏捷开发面向的是人。敏捷开发要解决的,恰恰是瀑布模型中存在的一些问题。
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
43 | 以VS Code为例,看大型开源项目是如何应用软件工程的?
软件项目的开发过程是怎么被组织的,团队如何分工协作的,运用了哪些软件工程的方法,以及使用了哪些工具。
VS Code 使用的是快速迭代的开发模式,每四周一个迭代:
第一周:偿还技术债务,修复上个版本的 Bug,制定下一个版本的计划;
第二、三周:按照计划开发和修复 Bug;
第四周:测试开发完成的版本;
下一迭代第一周:发布新版本。
在团队分工上,VS Code 的团队很扁平,没有专职测试,通过轮值的 Inbox Tracker 和 Endgame Master 来帮助团队处理日常 Issue 和推动测试和发布工作的进行。
在工具的使用方面,VS Code 使用的是 GitHub 托管代码,基于 GitHub Flow 的开发流程使用的。还有使用 Azure DevOps 作为它的持续集成系统。
44 | 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?
在团队管理方面,大厂的软件项目团队规模都被拆的比较小,这有助于团队成员之间的沟通协作;没有专职的测试人员,测试工作被自动化测试代替;有很好的 DevOps 文化,各个工种之间紧密协作。
在开发工具方面,大厂都很重视工具的开发和使用,很多工具我们也能找到替代品,或者直接使用大厂提供的工具服务。
在项目开发流程上,大厂有严格的开发流程,代码必须写自动化测试代码,自动化测试通过,并且有人 Review 通过的 PR 才能被合并;大厂虽然没有专职测试人员,但是整个测试过程很严谨,在发布前都经过了充分的测试;大厂对于软件发布也都有完善的发布和监控流程,不仅可以快速发布,还可以及时发现线上问题;大厂也会有上线后的复盘总结,总结成功经验,吸取失败教训,将项目经验变成团队能力。
45 | 从软件工程的角度看微服务、云计算、人工智能这些新技术
微服务架构的设计,不仅仅是一个对服务拆分的架构设计,同时也是对组织架构拆分的设计。
但如果你站在软件工程的角度去看技术:技术服务于架构设计,架构设计服务于业务,业务服务于商业。