软件开发模式是关于”软件如何被有序地开发出来”的方法论。从前期的开发理论进入工程实践,本篇是这个知识体系的总览,后续各篇逐一展开。
传统模式:软件开发生命周期与过程模型
软件生命周期(Software Life Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。软件生命周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级等阶段。
那么如何将上述软件开发过程方法化呢?这就是过程模型。过程模型(Process Models)意图解决软件过程中的混乱,将软件开发过程中的沟通、计划、建模、构建和部署等活动(activities)有效地组织了起来。它们之间的线性(linear)、迭代(iterative)、演进(evolutionary)和平行(parallel)关系会产生不同的模型。常见的过程模型包括:瀑布模型、原型模型、增量模型、螺旋模型等。
传统模式:结合软件测试的过程模型演化
对于前文软件开发生命周期的实现,为保障软件质量,将测试工作凸显出来(通过前文介绍的线性、迭代、演进和平行等方式),结合测试又演化出了针对测试的过程模型,主要有 V 模型、W 模型、X 模型、H 模型等。
敏捷开发:敏捷软件开发理论及流程
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系、但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
详见敏捷开发:理论及流程。
敏捷开发:面向工程管理 - 极限编程(XP)
极限编程(Extreme Programming,简称 XP)是由 Kent Beck 在 1996 年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。XP 是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。极限编程透过引入基本价值、原则、实践方法等概念来达到降低变更成本的目的。
敏捷开发:面向过程管理 - Scrum 方式
Scrum 是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。Scrum 包括了一系列实践和预定义角色的过程骨架。Scrum 中的主要角色包括同项目经理类似的 Scrum Master 角色负责维护过程和任务,Product Owner 代表利益所有者,Developer Team 包括了所有开发人员。
敏捷开发:面向过程管理 - Kanban 方式
看板本身源于日本丰田公司对精益制造的实践,后延伸到敏捷开发领域;它的核心是 JIT(Just In Time):“让正确的物资,在正确的时间,流动到正确的地方,数量是刚刚好的数量。”
敏捷开发:开发实践 - 测试驱动开发(TDD)
测试驱动开发(Test Driven Development,简称 TDD)是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD 的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD 的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析、设计、质量控制量化的过程。TDD 首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
敏捷开发:开发实践 - 领域驱动开发(DDD)
领域驱动设计相关内容整理中,见敏捷开发:领域驱动开发(DDD)。
典型的中小团队开发流程详解
通过典型的中小团队开发流程谈谈对常见的敏捷开发流程的理解。
精益企业:从组织的角度集成精益、敏捷、DevOps 等
Lean Enterprise(精益企业)是指一个产品系列价值流的不同部门同心协力消除浪费,并且按照顾客要求,来拉动生产。本文主要基于 Scaled Agile, Inc.(SAI)公司的 SAFe 的框架(SAFe for Lean Enterprises)向你介绍精益企业的 7 个核心,并站在更高的视野层级上看敏捷和 DevOps 的位置,可以给你更多的启发。