企业开发模式全景图谱:12种方法论的本质、优缺点与选型指南

📅 2026/6/29 19:25:37
企业开发模式全景图谱:12种方法论的本质、优缺点与选型指南
先说句大实话你们团队用的是什么开发模式——这个问题本身可能就问错了。我在技术圈混了十几年见过太多这样的场景一家公司去年还在推行Scrum今年又跟风搞DevOps明年听说SAFe时髦又要上大规模敏捷。PPT换了一版又一版但代码交付的速度和质量好像并没有本质变化。问题出在哪大多数人对开发模式的理解停留在选一个然后照做的层面而忽略了每套方法论的底层逻辑和适用边界。这篇文章要做一件事把企业中实际存在的12种主流开发模式全部摊开来讲——它们各自解决什么问题、凭什么被发明出来、好在哪里、坑在哪里、到底适合谁。不吹不黑不厚此薄彼。一、先建立认知坐标系在逐个拆解之前我们需要一个框架来判断这个模式跟我有什么关系。我把它归纳为三个核心维度维度一端另一端需求确定性需求明确、几乎不变需求模糊、频繁变更风险容忍度失败代价低可以试错失败代价高必须一次做对组织规模小团队15人大组织100人所有开发模式本质上都是在这三个维度上做出的不同取舍组合。没有万能解只有最匹配当前处境的局部最优解。金句 1选开发模式不是在挑信仰是在做一道带约束条件的最优化题。二、传统经典派1970s–1990s1. 瀑布模型Waterfall Model是什么软件工程史上第一个被正式命名的开发模型Winston Royce1970。将开发生命周期切为严格的线性阶段需求分析 → 设计 → 编码 → 测试 → 部署 → 维护。每个阶段必须完成并通过评审才能进入下一个像瀑布一样单向流动。为什么被发明早期软件项目规模越来越大需要一种可预测、可度量、可审计的管理方式。瀑布模型提供了清晰的里程碑和文档交付物非常适合合同制外包项目和政府/军工领域。优点✅ 流程清晰每个阶段的输入输出明确易于管理和审计✅ 文档完备知识沉淀好人员交接成本低✅ 进度可预测理论上适合做预算和资源规划✅ 质量门禁严格每个阶段都有验证环节缺点❌致命假设需求在一开始就能被完整、准确地定义——这在绝大多数项目中不成立❌ 用户要等到项目末期才能看到成品反馈严重滞后❌ 早期错误如需求理解偏差会被放大到后期才暴露修复成本指数级增长❌ 各阶段之间产生大量文档沟通成本高❌ 对变更极其不友好任何回溯都意味着巨大成本适用场景需求非常明确且几乎不变的项目如税务系统、银行核心账务有严格合规/审计要求的领域医疗设备、航空航天、国防外包项目需要明确的交接边界和验收标准失败代价极高的关键系统不适用场景互联网产品、创新型项目需求不确定或频繁变化的业务需要快速验证市场假设的创业公司2. V模型V-Model是什么瀑布模型的变种同样按阶段顺序推进但强调测试活动与开发活动的对应关系——每个开发阶段都有一个对应的测试验证阶段形成V字形结构。比如需求分析对应验收测试概要设计对应系统测试详细设计对应集成测试编码对应单元测试。为什么被发明瀑布模型对测试的重视不够测试被压到最后V模型试图通过强制对应关系让测试左移确保每个阶段的产出都有对应的验证手段。优点✅ 明确了各阶段的测试目标和策略测试不再是被遗忘的角落✅ 便于追溯每个测试用例都能对应到具体的需求或设计文档✅ 保持了瀑布模型的可审计性和规范性✅ 在嵌入式、硬件相关软件等质量要求极高的领域表现良好缺点❌ 本质上还是瀑布流的线性思维继承了瀑布的大部分缺陷❌ 依然没有解决用户反馈太晚的核心问题❌ 测试计划需要在项目初期就制定完毕对需求变化适应性差❌ 容易变成为了填V字而写文档的形式主义适用场景嵌入式软件开发、汽车电子、工业控制系统有严格安全认证要求的项目如ISO 26262、IEC 62304需要完整可追溯性的受监管行业3. 原型模型Prototyping Model是什么在正式开发之前先快速构建一个可运行的原型通常是简化版的界面或核心功能让用户直观地看到和操作收集反馈后再进入正式开发。原型可以是抛弃型的用完即弃或渐进型的逐步演化为最终产品。为什么被发明用户往往说不清楚自己想要什么但看到东西之后就知道自己不要什么。原型模型承认了这个现实用先做给你看的方式绕过需求描述的困境。优点✅ 用户参与度高能在早期就发现需求理解偏差✅ 降低沟通成本——一图胜千言一个可交互的原型胜过百页需求文档✅ 适合探索性强的创新项目帮助验证想法可行性✅ 可以作为与干系人沟通的有效工具缺点❌ 容易陷入无休止修改原型的陷阱迟迟无法进入正式开发❌ 如果是抛弃型原型投入的时间和代码可能完全浪费❌ 渐进型原型容易导致架构欠债——因为最初没打算当最终产品用❌ 用户可能误以为原型就是接近完成的产品对后续开发时间预期不准❌ 缺乏规范的项目管理节奏容易失控适用场景需求模糊、难以用文字准确描述的项目UI/UX驱动的产品用户体验是核心竞争力创新性强的探索性项目需要向投资人或管理层演示概念的阶段4. 螺旋模型Spiral Model是什么Barry Boehm于1988年提出将瀑布模型的系统性与原型模型的迭代性结合并引入了风险管理作为核心驱动因素。每个螺旋循环包含四个象限制定计划 → 风险分析 → 工程实施 → 客户评估。随着螺旋向外扩展项目的确定性逐渐增加。为什么被发明大型复杂项目中最大的威胁不是做不完而是做错了方向。螺旋模型将风险管理提升到第一优先级确保在每个迭代开始前都先识别和处理最大风险。优点✅独有的优势将风险管理显式化、制度化这是其他模型不具备的✅ 每个迭代都有明确的风险评估点可以在灾难发生前及时止损✅ 结合了原型的快速反馈和瀑布的结构化管控✅ 特别适合大型、高风险、高投入的项目缺点❌ 风险分析需要专业经验和大量时间小项目用起来太重❌ 迭代次数难以预估项目总周期和成本不好控制❌ 对项目管理能力要求极高——需要同时驾驭计划、风险、工程三个维度❌ 容易陷入分析瘫痪一直在风险评估中打转❌ 文档和管理开销大实施成本高适用场景大型、昂贵、高风险的系统级软件如操作系统、航空航天系统技术不确定性高的前沿项目失败代价极高、必须严格控制风险的领域5. 迭代模型Iterative Model/ 增量模型Incremental Model是什么将整个项目分解为多个较小的迭代周期每个迭代都经历完整的需求→设计→编码→测试迷你生命周期产出可运行的软件增量。迭代模型强调多次重复完善增量模型强调每次增加一部分功能。两者在实践中经常混用。为什么被发明直接回应瀑布模型的最大痛点——用户等太久。通过分批交付让用户尽早用到部分功能同时降低单次投入的风险。优点✅ 早期即可交付可用功能用户反馈提前✅ 每次迭代范围较小更容易控制质量和进度✅ 风险被分散到各个迭代中不会一次性全盘皆输✅ 可以根据前几轮迭代的经验调整后续计划✅ 学习曲线平缓团队容易上手缺点❌ 如果没有良好的架构设计后期增量整合时可能出现拼凑感❌ 每个迭代都要走完完整流程对小功能来说可能过于繁琐❌ 总体进度和最终交付时间仍然较难精确预估❌ 需要持续的重构和架构调整否则技术债会累积❌ 对产品负责人的规划能力有较高要求适用场景中大型项目需求有一定不确定性希望分期交付、分期收回投资的项目团队有一定工程基础但不具备全面敏捷能力的组织6. 快速应用开发RAD — Rapid Application Development是什么James Martin于1991年提出核心理念是用速度换取完美——通过高度组件化复用、可视化开发工具、并行开发小组和紧凑的时间盒在60-90天内快速交付可用的应用程序。为什么被发明90年代企业信息化浪潮中业务部门等不起传统开发动辄半年的周期。RAD试图用快速构建→快速反馈→快速调整的压缩流程来满足业务紧迫性。优点✅ 交付速度极快适合时间压力大的项目✅ 强调组件复用和工具辅助减少重复劳动✅ 用户深度参与确保方向正确✅ 并行开发模式可以缩短总体工期缺点❌ 速度至上可能导致技术债务堆积❌ 高度依赖熟练的开发人员和成熟的组件库❌ 不适合技术复杂度高或需要深度架构设计的系统❌ 文档通常不足长期维护困难❌ 当快速变成唯一目标时质量和安全性容易被牺牲适用场景中小型企业管理信息系统MIS、OA、CRM需要快速验证商业概念的MVP最小可行产品内部工具和效率类应用时间窗口紧迫的市场机会型项目三、现代敏捷派2001–至今7. 敏捷开发 Scrum是什么2001年《敏捷宣言》标志着敏捷运动的诞生。敏捷不是某一种具体方法而是一组价值观和原则的集合。Scrum是最流行的敏捷落地框架——以2-4周的固定Sprint为周期通过产品待办列表Product Backlog、Sprint规划会、每日站会、Sprint评审会和回顾会五个仪式来驱动开发节奏。为什么被发明互联网时代到来后传统先定义再开发的模式彻底失效——市场变化太快用户需求无法预知。敏捷宣言的四条核心价值观应运而生个体和互动高于流程和工具可工作的软件高于详尽的文档客户合作高于合同谈判响应变化高于遵循计划优点✅ 极高的灵活性能快速响应需求和市场的变化✅ 每个Sprint都有可演示的成果透明度高✅ 持续反馈机制确保方向不跑偏✅ 自组织团队激发成员主动性和创造力✅ 成熟的生态体系认证、工具、社区支持丰富缺点❌成功前提苛刻需要有实权的PO、跨职能自组织团队、管理层接受范围可变的契约——缺一条就容易变形❌ 容易沦为仪式化敏捷——站会走过场、回顾会不改变任何事❌ 对新团队成员上手门槛较高需要理解整套术语和流程❌ 在分布式团队、跨时区协作中实施难度大增❌ 不适合需求真正固定的项目强行敏捷反而增加 overhead常见变形/失效模式表现根因Sprint内还是串行分析→开发→测试没有真正的跨职能团队PO缺位或不懂业务敏捷的前提是有能力的决策者回顾会永远只聊大家辛苦了缺乏心理安全和改进文化每个Sprint都在赶功能没人管代码质量忽略了技术卓越也是敏捷原则之一适用场景5-15人的产品研发团队最佳甜区需求变化频繁的互联网/SaaS产品需要持续交付价值的业务场景团队成员能力较为均衡的情况8. 极限编程XP — Extreme Programming是什么Kent Beck等人于1990年代末提出的一套工程实践密集型敏捷方法。如果说Scrum偏重管理流程XP则偏重工程技术实践。核心实践包括结对编程、测试驱动开发TDD、持续集成、重构、简单设计、现场客户等。为什么被发明很多团队号称敏捷但代码质量一团糟。XP的回答是没有扎实的工程实践支撑敏捷只是一层空壳。优点✅ 工程实践极其扎实代码质量和可维护性高✅ 结对编程促进知识共享降低巴士系数风险✅ TDD确保测试覆盖率重构有安全感✅ 持续集成让问题早发现早解决✅ 简单设计原则避免过度工程化缺点❌ 实施门槛高——结对编程意味着人力成本翻倍虽然 proponents 认为质量收益抵消了这点❌ TDD和重构需要较高的技术素养不是所有团队都能做到❌ 现场客户在实际组织中几乎不可能实现❌ 对开发者习惯的改变很大阻力不小❌ 在某些文化环境中结对编程被视为两个人做一个人的事适用场景对代码质量要求极高的项目金融核心系统、安全敏感系统技术能力强、学习意愿高的精英小团队长期维护的产品技术债成本高的场景希望系统性提升工程能力的团队金句 2Scrum管的是怎么协作XP管的是怎么写代码。两者互补而非替代。9. 看板Kanban是什么源自丰田生产方式TPS由David J. Anderson引入软件开发领域。核心机制是通过限制在制品数量WIP Limit来管理工作流可视化所有任务的状态持续优化交付效率。与Scrum不同看板不设固定的迭代周期。为什么被发明有些工作天然不适合塞进固定周期的Sprint里——比如运维支持、突发bug修复、客服工单处理。看板提供了一种更灵活的方式来管理这类流动型工作。优点✅ 天然适合混合型工作功能开发线上支持临时任务✅ 无需改变现有流程结构启动成本低——加一块看板就行✅ WIP限制是暴露瓶颈的神器哪列卡片堆积了瓶颈就在哪✅ 变更友好不需要等到Sprint结束才能插入紧急事项✅ 可视化程度高所有人一眼就能看清全局状态缺点❌ 缺少时间箱压力团队可能缺乏紧迫感和节奏感❌ 对新团队来说缺少固定规划节奏可能导致目标感模糊❌ WIP限制设置不当效果大打折扣太松没限制太紧堵死❌ 不像Scrum那样有明确的角色定义和仪式容易执行不到位❌ 度量指标周期时间、吞吐量需要一定数据积累才有意义适用场景运维团队、支持团队、IT服务台SaaS产品的持续迭代尤其是混合了开发和维护的场景已经成熟、不需要额外流程约束的高效团队作为Scrum的补充很多团队最终走向Scrum看板的混合态10. 特征驱动开发FDD — Feature-Driven Development是什么Jeff De Luca和Peter Coad于1997年提出以特征Feature为最小交付单元——一个特征是一个以客户价值为中心的、可在两周内完成的小功能。FDD包含五个核心过程开发整体模型 → 构建特征列表 → 按特征规划 → 按特征设计 → 按特征构建。为什么被发明当时很多面向对象的分析设计方法UML、OMT等过于理论化缺乏可执行的落地步骤。FDD试图在严谨的设计和快速的迭代之间找到平衡。优点✅ 以特征为单位粒度适中易于规划和跟踪✅ 强调领域建模确保对业务有深入理解✅ 设计和编码分离保证架构质量✅ 适合大型项目——有清晰的层次化结构主程序员类负责人团队成员✅ 进度报告基于已完成的特征直观易懂缺点❌ 社区和生态远不如Scrum活跃资料和工具较少❌ 初期建模阶段耗时较长不适合需要立即启动的项目❌ 主程序员模式在现代扁平化组织中不太受欢迎❌ 特征的定义和粒度划分需要经验新手容易出错❌ 在纯互联网产品领域知名度低招聘和培训成本相对较高适用场景大型、复杂的面向对象软件项目业务逻辑复杂、需要深入领域建模的系统团队规模较大20-100人且有明确的技术领导强调设计和架构质量的长期项目11. 精益软件开发Lean Software Development是什么源自丰田生产方式Toyota Production System由Mary and Tom Poppendieck夫妇引入软件领域。核心理念是消除浪费Muda——在软件开发中浪费包括七种形式部分完成的功能、未使用的特性、重复的学习、交接等待、任务切换、缺陷、运动。为什么被发明精益思想认为提高效率的关键不是让大家做得更快而是停止做那些不创造价值的事。这是一种比敏捷更宏观的视角——不只关心单个团队的效率还关心整个价值流的流畅度。优点✅ 视角最宏观——关注从创意到交付的全价值流而不只是编码阶段✅ 延迟决策原则对需求模糊的项目极具指导意义✅ 消除浪费的理念普适性强可以叠加在任何其他模式之上✅ 强调知识获取和尊重人才文化建设导向明显✅ 适合大规模组织的系统性改进缺点❌ 概念比较抽象不如Scrum那样有明确的角色和仪式可以照搬❌ 需要对业务价值流有较深的理解才能有效应用❌ 在小团队中精益的收益不如在大规模组织中明显❌ 实施周期长属于慢功夫短期看不到明显效果❌ 容易被误解为裁员或压榨员工的工具适用场景大型组织100人以上的研发效能改进需要从系统性角度优化交付流程的企业希望建立持续改进文化的组织作为其他模式的哲学底层叠加使用金句 3精益是敏捷的祖师爷——Scrum的很多思想都来自精益只是包装成了更好用的框架。四、工程协同派2010s–至今12. DevOps / DevSecOps是什么DevOps不是一种独立的开发模式而是一组打破开发和运维之间壁垒的工程实践和文化理念。核心实践包括持续集成/持续部署CI/CD、基础设施即代码IaC、自动化测试、监控与日志、微服务架构等。DevSecOps则进一步将安全实践嵌入到整个流水线中Shift Left Security。为什么被发明传统模式下开发写完代码扔过墙给运维运维部署上线后再把问题扔回来给开发。这种割裂导致发布日成为全员加班日、在我机器上能跑、开发和运维互相甩锅。DevOps的目标是实现从代码提交到生产部署的全流程自动化和无缝协作。优点✅ 发布频率和交付速度大幅提升从月级/周级到日级甚至小时级✅ 自动化减少了人为错误提高了部署可靠性✅ 反馈环极短——代码提交后几分钟就能知道是否通过了所有检查✅ 开发对线上负责运维参与代码评审组织撕裂被修复✅ 可以叠加在任何开发模式之上瀑布DevOps虽少见但存在ScrumDevOps是黄金组合缺点❌工具配置不难文化转变极难——Jenkins/GitLab CI一天能配好但让开发对线上负责需要数年❌ 初期基础设施投入大CI/CD流水线、容器化、云环境❌ 对团队技术能力要求全面提升——每个人都需要懂一点运维❌ 微服务化带来的分布式系统复杂性是新挑战❌ 安全性如果处理不当自动化反而可能加速安全漏洞的传播适用场景几乎所有需要频繁发布更新的软件产品尤其是SaaS和互联网服务云原生应用和微服务架构希望实现每天部署多次的高效团队需要满足合规要求且希望自动化的企业DevSecOps五、规模化扩展派应对大组织难题SAFeScaled Agile Framework是什么Dean Leffingwell提出的大规模敏捷框架用于协调数百人、多产品线、跨部门的敏捷实施。采用分层结构Portfolio投资组合层→ Solution解决方案层→ Program项目群层→ Team团队层。每层有自己的角色、仪式和工件。为什么被发明当一个组织大到几百上千人时单纯的Scrum已经不够用了——多个团队之间如何对齐优先级跨部门依赖怎么管理预算怎么分配SAFe试图回答这些问题。优点✅ 为大型组织的敏捷转型提供了完整的路线图和角色定义✅ 解决了多团队协调、跨部门对齐的实际痛点✅ 与企业的预算、合规、汇报机制有较好的兼容性✅ 有成熟的培训和认证体系实施路径清晰缺点❌ 层级多、角色繁杂RTE、Solution Train Engineer、System Architect...实施成本极高❌ 批评者认为本质上是穿敏捷外衣的瀑布流❌ 很多采用SAFe的公司最后变成了又重又慢的敏捷❌ 中间管理层可能利用SAFe强化自己的权力适得其反❌ 对小型团队来说完全是overkill适用场景500人以上的大型研发组织多产品线、多部门协作的复杂环境需要在保持一定敏捷性的同时满足企业管理需求的场合金句 4当你的组织大到需要SAFe的时候真正的问题可能不是该选什么框架而是是不是该拆分了。其他规模化方法简要对比方法核心思路适用规模特点LeSSLarge Scale Scrum把多个Scrum团队当成一个大的Scrum团队来管理2-8个团队最轻量的规模化方案NexusScrum官方推出的规模化扩展强调最小 viable bureaucracy3-9个团队Nexus Sprint Backlog统一管理跨团队依赖Spotify Model去中心化的部落-小队-分会-公会结构数百人强调文化和自治不是严格框架六、还有几种不能不算但不太推荐的模式边做边改Code and Fix / Ad-hoc是什么没有正式的需求分析、没有设计文档、没有测试计划——拿到需求就开始写代码出了问题就改改完了再交给用户用户不满意再改。现实中大量小公司和初创团队在用这种方式很多时候是不自觉的。优点✅ 启动速度最快——零准备时间✅ 学习成本最低——不需要懂任何方法论✅ 在极端紧急的情况下可能是唯一选择缺点❌ 代码质量通常很差几乎没有可维护性可言❌ 没有可追踪的过程出了问题不知道哪里出错❌ 无法预估时间和成本❌ 随着项目增大混乱度指数级上升❌ 知识集中在个别开发者脑子里人员流失灾难适用场景个人项目、极早期的概念验证PoC、一次性脚本/工具。除此之外都不推荐。结构化方法Structured Analysis/Design是什么70-80年代的主流方法以数据流图DFD、数据字典、结构化图为工具强调自顶向下、逐步精化的分析设计思路。是面向对象方法流行之前的标准做法。现状基本已被OO方法和UML取代但在某些遗留系统的维护文档中还能见到其痕迹。历史意义大于实用价值。七、原创框架开发模式速查矩阵说了这么多如果你只想拿一张表来做决策我用这张矩阵总结┌─────────────────┬──────────────┬──────────────┬──────────────┐ │ 模式名称 │ 需求确定性 │ 最佳团队规模 │ 核心优势 │ ├─────────────────┼──────────────┼──────────────┼──────────────┤ │ 瀑布模型 │ ★★★★★ │ 任意(偏大) │ 可审计/合规 │ │ V模型 │ ★★★★★ │ 任意 │ 测试可追溯 │ │ 原型模型 │ ★★☆☆☆ │ 小 │ 快速验证想法 │ │ 螺旋模型 │ ★★☆☆☆ │ 中-大 │ 风险可控 │ │ 迭代/增量 │ ★★★☆☆ │ 中 │ 分期交付 │ │ RAD │ ★★★☆☆ │ 小-中 │ 速度极快 │ │ Scrum │ ★★☆☆☆ │ 5-15人 │ 灵活响应变化 │ │ XP │ ★★☆☆☆ │ 5-10人 │ 代码质量极高 │ │ 看板 │ 任意 │ 任意 │ 流程可视化 │ │ FDD │ ★★★☆☆ │ 20-100人 │ 大项目有序 │ │ 精益 │ 任意 │ 大(100) │ 系统性提效 │ │ DevOps │ 任意 │ 任意 │ 交付自动化 │ │ SAFe │ 任意 │ 500 │ 大组织协调 │ └─────────────────┴──────────────┴──────────────┴──────────────┘ ​ 注需求确定性 ★越多 越需要需求明确稳定使用建议先用排除法你的项目绝对不能用什么比如需求天天变就别选瀑布再看匹配度团队规模、能力水平、组织文化分别匹配哪些模式考虑叠加基础模式 DevOps增强 精益理念往往是最佳组合定期重新评估项目是活的三个月前的最佳选择未必适用于今天八、三个反直觉的真相真相一模式的重要性被高估了我见过用瀑布流交付很成功的团队也见过号称全敏捷但一塌糊涂的团队。决定项目成败的永远是谁在做而不是用什么方法。模式是乘数团队能力是被乘数——被乘数接近零的话乘数再大也没用。真相二敏捷转型失败的根因通常不在研发部超过60%的敏捷转型失败案例根因在研发部门之外CEO要求精确的季度预算承诺 ← 和敏捷的可变范围矛盾HR的绩效考核是个体导向的 ← 和敏捷的团队成果矛盾销售随意承诺客户功能 ← 和敏捷的PO决定优先级矛盾法务要求完整文档后才开工 ← 和敏捷的可工作的软件高于详尽文档矛盾敏捷不只是研发的事是整个公司的事。真相三AI正在重塑一切AI辅助编程正在从根本上改变软件开发的生产力结构。当编码效率提升5-10倍之后迭代周期的概念会被压缩也许不再是两周一个Sprint而是两天可工作的软件增量的定义会发生变化传统角色分工前端/后端/测试/运维会模糊化一些现在看起来很重的模式如SAFe可能会变得不必要的重金句 5未来最重要的能力不是精通某种框架而是在框架之间自由切换的判断力。回到最开始的问题——我们该用什么开发模式我的答案是别急着选模式先搞清楚你在坐标系的哪个位置。需求确定吗团队能力如何组织文化支不支持失败代价多大这些问题的答案比任何一篇XX模式最佳实践的文章都有用。而且最好的模式是你团队真正理解并且愿意坚持的那一个——哪怕它看起来不那么时髦。毕竟方法论是地图不是脚下的路。别把地图当成了 territory。参考来源与延伸阅读Winston Royce, Managing the Development of Large Software Systems (1970) — 瀑布模型起源Barry Boehm, A Spiral Model of Software Development and Enhancement (1988)《敏捷宣言》(Agile Manifesto, 2001) — agilemanifesto.orgKent Beck, Extreme Programming Explained — XP权威指南David J. Anderson, Kanban: Successful Evolutionary Change for Your Technology BusinessMary Tom Poppendieck, Lean Software Development: An Agile ToolkitGene Kim et al., The Phoenix Project (2013) — DevOps文化的经典入门scaledagileframework.com — SAFe官方文档*Jeff De Luca Peter Coad, Java Modeling In Color With UML — FDDJames Martin, Rapid Application Development (1991)