002-开发方法与开发模型

软件的开发模式生命周期模型 一、开发模式 1.线性模型:最常见的“瀑布模型”,基础框架,但缺点在于“集成之日就是爆炸之日”。(立项分析- 需求分析-设计-编码-测试-维护)很多企业使用迭代进行修改。 2.渐进式模型:最常见的“螺旋模型”,(需求分析-风险分析-设计、编码-测试、评审),迭代开发 增量开发模式。 迭代:反复求精的过程,先整体再细化 增量:逐块增加,一部分一部分来 注意:每一次迭代原型出来后,测试人员都需要从原型界面,系统主要功能,性能等方面对原型进行评审。 二、生命周期模型 1.边做边改模型... 阅读详情

002-开发方法与开发模型

学习目标

通过本章学习,您将能够:

  • 掌握主要的软件开发方法和特点
  • 理解各种软件开发模型的适用场景
  • 分析不同开发模型的优缺点
  • 选择合适的开发方法和模型
  • 理解敏捷开发与传统开发的区别

2.1 软件开发方法概述

2.1.1 开发方法分类

软件开发方法是指导软件开发过程的系统化方法,主要分为以下几类:

mindmap
  root((软件开发方法))
    结构化方法
      结构化分析
      结构化设计
      结构化编程
    面向对象方法
      面向对象分析
      面向对象设计
      面向对象编程
    敏捷方法
      极限编程(XP)
      Scrum
      看板(Kanban)
    形式化方法
      形式化规约
      形式化验证
      模型检查

2.1.2 方法选择原则

选择开发方法时需要考虑以下因素:

因素结构化方法面向对象方法敏捷方法形式化方法
项目规模大中型中大型小中型关键系统
需求稳定性稳定相对稳定变化频繁非常稳定
团队经验一般较高较高专业
时间压力中等中等紧迫充裕
质量要求中高极高

2.2 结构化开发方法

2.2.1 结构化方法概述

结构化方法是一种传统的软件开发方法,强调自顶向下、逐步求精的分析和设计思想。

核心思想

  • 自顶向下,逐步分解
  • 模块化设计
  • 结构化编程
  • 严格的文档管理

2.2.2 结构化分析(SA)

主要工具

结构化分析
数据流图
数据字典
加工说明
实体关系图
顶层数据流图
分层数据流图
底层数据流图
数据流定义
数据存储定义
数据元素定义
结构化语言
判定表
判定树

分析步骤

  1. 建立系统模型:绘制数据流图
  2. 建立数据字典:定义数据元素
  3. 描述加工逻辑:编写加工说明
  4. 建立数据模型:绘制E-R图

2.2.3 结构化设计(SD)

设计原则

  • 模块独立性:高内聚、低耦合
  • 模块大小适中:便于理解和维护
  • 模块接口简单:减少模块间依赖

耦合类型(从弱到强):

耦合类型
数据耦合
标记耦合
控制耦合
外部耦合
公共耦合
内容耦合
最理想:只传递数据参数
传递数据结构
传递控制信息
共享外部环境
共享全局数据
最糟糕:直接访问内部

内聚类型(从弱到强):

内聚类型描述示例质量评价
偶然内聚模块内元素无关联杂项处理模块最差
逻辑内聚逻辑上相关的功能输入处理模块
时间内聚同时执行的功能初始化模块一般
过程内聚按执行顺序组合文件处理流程一般
通信内聚操作同一数据记录处理模块较好
顺序内聚输出是下一个输入数据转换链
功能内聚完成单一功能计算平方根最好

2.2.4 结构化编程

基本控制结构

结构化编程
顺序结构
选择结构
循环结构
语句1
语句2
语句3
if-then-else
switch-case
while循环
for循环
do-while循环

编程原则

  • 只使用三种基本控制结构
  • 避免使用goto语句
  • 一个模块只有一个入口和一个出口
  • 模块功能单一,逻辑清晰

2.3 面向对象开发方法

2.3.1 面向对象基本概念

核心概念

实例化
扩展
保护
实现
对象
+属性1
+属性2
+方法1()
+方法2()
+类属性
+类方法()
+实例化()
继承
+父类属性
+子类属性
+重写方法()
封装
-私有属性
+公有方法()
+访问控制()
多态
+虚函数()
+重载()
+动态绑定()

2.3.2 面向对象分析(OOA)

分析步骤

面向对象分析
识别对象和类
定义属性
定义方法
确定关系
建立模型
名词分析法
CRC卡片法
用例分析法
关联关系
聚合关系
组合关系
继承关系
依赖关系

2.3.3 面向对象设计(OOD)

设计原则

原则英文名称描述应用
单一职责SRP一个类只有一个变化原因类设计
开闭原则OCP对扩展开放,对修改关闭系统架构
里氏替换LSP子类可以替换父类继承设计
接口隔离ISP客户端不依赖不需要的接口接口设计
依赖倒置DIP依赖抽象而不是具体实现模块设计

2.3.4 设计模式

常用设计模式分类

mindmap
  root((设计模式))
    创建型模式
      单例模式
      工厂方法
      抽象工厂
      建造者模式
      原型模式
    结构型模式
      适配器模式
      装饰器模式
      外观模式
      组合模式
      代理模式
    行为型模式
      观察者模式
      策略模式
      命令模式
      状态模式
      模板方法

2.4 软件开发模型

2.4.1 瀑布模型

模型特点

  • 线性顺序开发
  • 阶段间有明确的里程碑
  • 每个阶段都有详细的文档
  • 前一阶段完成后才能进入下一阶段
需求分析
系统设计
详细设计
编码实现
单元测试
集成测试
系统测试
维护
需求规格说明书
系统设计说明书
详细设计说明书
源代码
单元测试报告
集成测试报告
系统测试报告

适用场景

  • 需求明确且稳定
  • 技术成熟,风险较低
  • 项目规模较大
  • 对文档要求严格

优缺点分析

优点缺点
结构清晰,易于管理缺乏灵活性
文档完整,便于维护风险发现较晚
质量控制严格用户参与度低
适合大型项目开发周期长

2.4.2 增量模型

模型特点

  • 将软件分解为多个增量
  • 每个增量都是一个可工作的软件
  • 逐步增加功能
  • 用户可以早期使用部分功能
0 1 2 3 4 5 6 7 8 9 10 11 需求分析 设计编码 需求分析 测试部署 设计编码 需求分析 测试部署 设计编码 测试部署 增量1 增量2 增量3 增量模型开发时间线

2.4.3 螺旋模型

模型特点

  • 结合瀑布模型和原型模型
  • 强调风险分析
  • 迭代开发
  • 适合大型复杂项目
计划
风险分析
工程实现
客户评估
识别风险
分析风险
解决风险
设计
编码
测试
演示
评审
反馈

四个象限活动

  1. 计划阶段:确定目标、约束和替代方案
  2. 风险分析:识别和解决风险
  3. 工程实现:开发和验证产品
  4. 客户评估:评价结果,规划下一轮

2.4.4 V模型

V模型强调测试与开发的对应关系:

需求分析
系统设计
详细设计
编码
单元测试
集成测试
系统测试
验收测试

2.4.5 原型模型

原型类型

原型类型目的特点适用场景
抛弃型原型需求澄清快速构建,用后丢弃需求不明确
演化型原型系统开发逐步完善,最终成为系统创新性项目
增量型原型分步实现分批交付,逐步完善大型系统

原型开发过程

确定基本需求
开发初始原型
使用原型
满足需求?
修改原型
完成开发

2.5 敏捷开发方法

2.5.1 敏捷宣言

四个价值观

  1. 个体和互动 高于 流程和工具
  2. 工作的软件 高于 详尽的文档
  3. 客户合作 高于 合同谈判
  4. 响应变化 高于 遵循计划

十二条原则

mindmap
  root((敏捷原则))
    客户价值
      尽早持续交付
      欢迎需求变化
      经常交付软件
      业务人员协作
    团队协作
      信任激励团队
      面对面沟通
      可持续开发
      团队自组织
    技术卓越
      技术卓越
      简洁设计
      持续关注
      定期反思改进

2.5.2 Scrum方法

Scrum角色

Scrum团队
Product Owner
Scrum Master
Development Team
定义产品愿景
管理产品待办列表
确定优先级
促进Scrum过程
移除障碍
保护团队
开发产品
自组织团队
跨功能协作

Scrum事件

事件时间盒目的参与者
Sprint1-4周开发可交付增量整个团队
Sprint计划会8小时规划Sprint工作整个团队
每日站会15分钟同步进展和障碍开发团队
Sprint评审4小时展示和收集反馈团队+利益相关者
Sprint回顾3小时改进过程Scrum团队

Scrum工件

Product Backlog
Sprint Backlog
Increment
用户故事
优先级排序
估算
Sprint目标
选定的PBI
实现计划
潜在可发布
完成定义
工作软件

2.5.3 极限编程(XP)

XP实践

mindmap
  root((XP实践))
    规划实践
      用户故事
      发布计划
      迭代计划
      小版本发布
    设计实践
      简单设计
      重构
      隐喻
      CRC卡片
    编码实践
      结对编程
      代码标准
      集体代码所有权
      持续集成
    测试实践
      测试驱动开发
      单元测试
      验收测试
      自动化测试

XP价值观

  • 沟通:团队成员之间的有效沟通
  • 简单:做最简单能工作的事情
  • 反馈:快速获得反馈
  • 勇气:敢于做正确的事情

2.5.4 看板(Kanban)

看板原则

  1. 可视化工作流
  2. 限制在制品数量
  3. 管理流动
  4. 明确流程策略
  5. 反馈循环
  6. 协作改进

看板示例

kanban
    待办 : 用户注册功能
    待办 : 密码重置功能
    
    进行中 : 登录功能开发
    进行中 : 数据库设计
    
    测试中 : 用户管理模块
    
    完成 : 项目初始化
    完成 : 环境搭建

2.6 开发模型比较与选择

2.6.1 模型比较

特征瀑布模型增量模型螺旋模型敏捷模型
适用项目规模大型中大型大型小中型
需求稳定性稳定相对稳定不稳定变化频繁
风险控制一般较好很好
用户参与度中等很高
交付速度较快中等
文档要求很高中等
团队技能要求一般较高

2.6.2 选择指导原则

项目特征分析

小型
中型
大型
稳定
不稳定
高风险
低风险
项目评估
项目规模
敏捷方法
需求稳定性
风险程度
增量模型
敏捷方法
螺旋模型
瀑布模型
Scrum/XP
增量交付
迭代开发
风险驱动
文档驱动

实践练习

练习1:方法选择

针对以下项目场景,选择合适的开发方法和模型:

  1. 银行核心业务系统升级
  2. 移动应用快速原型开发
  3. 航天控制系统开发
  4. 电商网站功能迭代

练习2:模型分析

比较瀑布模型和敏捷模型在以下方面的差异:

  1. 需求变更处理
  2. 风险管理策略
  3. 质量保证方法
  4. 团队协作方式

练习3:案例研究

选择一个实际的软件项目,分析:

  1. 项目采用的开发方法和模型
  2. 选择该方法的原因
  3. 实施过程中遇到的问题
  4. 改进建议

总结

本章详细介绍了软件开发方法和模型,主要内容包括:

  1. 开发方法:结构化、面向对象、敏捷、形式化方法的特点和应用
  2. 传统模型:瀑布、增量、螺旋、V模型的优缺点和适用场景
  3. 敏捷方法:Scrum、XP、Kanban的核心实践和价值观
  4. 选择原则:根据项目特征选择合适的方法和模型

⚠️ 考试重点:各种开发模型的特点、适用场景、优缺点比较是考试的重点内容,特别是瀑布模型、螺旋模型和敏捷方法。

下一步

掌握了开发方法和模型后,下一章将学习003-软件生命周期与过程模型,深入了解软件开发的生命周期管理。


更新记录

  • 2024-01-15:初始版本创建
  • 版本:v1.0.0
软件开发的4种模型4种方法 软件开发模型: 1.瀑布模型:适合需求明确的软件开发。     2.演化模型:获取一组基本需求,快速给出版本,成为原型,用于对软件需求缺乏准认知的情况。不需要明确的需求    3.螺旋模型:结合瀑布模型演化模型,综合两者优点,并增加风险分析,螺旋模型包括四个方面活动:制定计划,风险分析,实施工程,客户评估。    4.喷泉模型:面向对象的开发过程,具有迭代无间隙特性,开发 阅读详情

相关推荐

GPT的使用场景及开发方法

GPT(Generative Pre-trained Transformer)是一系列以Transformer架构为基础的自然语言处理(NLP)模型,其中最知名的是GPT-3。3. 发起API请求:使用HTTP请求或相应的库调用API,并将输入文本传递给API。2. 选择模型设置参数:根据您的需求,选择适当的GPT模型设置请求参数,例如输入文本、输出长度、温度(temperature)等。GPT会尝试生成有关问题的答案。要使用GPT,您可以使用相应的API或库,例如OpenAI的GPT-3 API。

defdsdddev的博客 553

软件开发方法开发模型的比较

我搞不清软件开发方法开发模型这两个概念。 书本上这两部分都放在《软件工程》这一章节里,但是分开介绍的,并没有阐明二者之间的关系,比较割裂。我尝试在互联网上找找资料,但都非常少。这里先把一些学习心得记录下来,等待以后完善。 一、铺垫知识 系统生命周期分为四个阶段。 系统规划 系统开发 系统运维 系统更新或消亡 其中重头戏是系统开发阶段。系统开发阶段可以进一步细化为: 总体规划 系统分析 系统...

左直拳的马桶_日用桶 3610

Vertex AILLM集成开发实战指南

大语言模型(LLM)作为当前AI领域的重要突破,正在重塑企业智能化应用开发范式。Google Cloud的Vertex AI平台通过提供模型托管、微调部署API调用等核心功能,大幅降低了LLM的工程化门槛。技术实现上涉及LangChain框架集成、RAG架构设计等关键环节,开发者可以灵活调用PaLM 2等预训练模型,或部署LLaMA等开源模型。在电商客服、内容生成等典型场景中,结合Vertex AI Vector Search的检索增强生成技术能显著提升响应质量。通过合理的自动扩缩配置CMEK加密方案,

weixin_30475039的博客 484

系统开发方法开发模型

无论是系统分析还是系统设计,都有两种方法:结构化面向对象。 系统生命周期分为四个阶段。 一、系统规划 二、系统开发 三、系统运维 四、系统更新或消亡 其中重头戏是系统开发阶段。系统开发阶段可以细化为: 系统开发阶段: 1、总体规划 2、系统分析 3、系统设计 4、系统实施 5、系统验收 系统分析是系统分析师的活,系统设计则有 系统分析师+ 系统架构师。 总的来说,系统开...

左直拳的马桶_日用桶 5587

软件工程——快速掌握面向对象开发方法

在《软件工程——快速掌握结构化开发方法》一文中,我们讲述了如何用结构化开发方法开发一个简单的项目案例,并重点讨论了在结构化分析结构化设计阶段使用事件、数据流图模型、数据字典、ER模型、结构图模型完成项目的分析设计的整个过程。 在结构化开发方法中,利用数据流图模型对系统进行层层分解,将一个大的系统分解为多个程序模块,数据流图中需要存储的信息通过ER图建立数据模型,其功能模型数据模型是分离的,...

smilejiasmile的博客 1093

【备战软考架构师系列笔记 · 002软件工程篇 —— 软件开发模型(上篇:经典开发模型) ⭐⭐⭐⭐⭐...

软件开发模型笔记(上篇)—— 经典的几个软件开发模型 # 常见软件开发模型 ## 原型模型⭐ ### 特点 - 适用于需求不明确的场景,可以帮助用户明确需求 ## 瀑布模型⭐ ### 特点 - 软件开发阶段划分明确,每个阶段有明显界限,一旦发生错误,需要推倒重来 - 1、需求分析 - 2、总体设计 - 3、详细设计 - 4、编码调试 - ...

WeskyNet 511

002.MVC开发方法步骤--用一个简单的加法程序来演示

MVC的工作原理: 注:ASP.NET MVC中的url 特殊:构成 http//....../控制器名/方法名 默认: 1.Url请求直接来到Controller中 2.Controller从Model中取数据(Model可能去访问数据库) 3.Controller根据业务逻辑选择合适的View呈现给客户端 4.View返回给客户端 Application_start...

weixin_34187862的博客 263

剑指JAVA 002:理解JAVA是面向对象的语言

理解Java是面向对象的语言结构化开发方法面向对象开发方法结构化开发方法代表语言:原理:原则:局限性:面向对象开发方法代表语言:原理:基本特征:类对象的区别优点:面试试题重点: Java语言是纯粹面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承、封装多态。Java语言完全是以对象为中心,Java程序的最小程序单位是类,整个Java程序是由一个一个的类组成的。 ...

perEAson的博客 574

Anthropic Claude大语言模型技能开发实战指南

大语言模型(LLM)作为当前AI领域的前沿技术,通过提示工程(prompt engineering)少量样本学习(few-shot learning)实现特定领域能力构建。其核心原理是基于海量预训练数据形成的概率生成机制,开发者通过结构化指令引导模型输出。这种技术范式显著降低了传统机器学习对标注数据的依赖,在智能客服、内容生成等场景展现巨大价值。以Anthropic Claude为例,其技能开发需遵循角色-场景-任务定义框架,结合上下文管理响应质量控制等关键技术,实现医疗咨询、法律文书等专业场景的智能化

weixin_34293059的博客 430

python函数代码复用思维导图_一种基于d3的研讨系统思维导图及其开发方法

一种基于d3的研讨系统思维导图及其开发方法【技术领域】[0001]本发明属于计算机技术领域,特别涉及一种基于D3的研讨系统思维导图及其开发方法。【背景技术】[0002]思维导图是一种将发散性思维图形化的软件工具。在研讨思维导图展示上面,国外更多的是放在研讨思维可视化相关工具开发上面,这些开发的可视化工具可视化效果好,界面流畅且富有美感动感,用户体验交互性都比较好,能清楚的记录分析个人的思维...

weixin_39581995的博客 240

Codex模型构建IP分身:3亿token实战经验优化策略

大语言模型作为人工智能的核心技术,通过深度学习算法实现对自然语言的理解生成。其原理基于Transformer架构,通过自注意力机制捕捉文本中的长距离依赖关系。在工程实践中,模型微调技术能够针对特定领域优化模型表现,而提示工程则通过精心设计的输入指令引导模型输出。这些技术的价值在于能够创建个性化的AI助手,即IP分身,使其具备专业知识特定风格。应用场景包括技术问答、代码审查、知识管理等。本文基于Codex模型消耗3亿token的实践经验,深入探讨了IP分身构建中的模型微调提示工程优化策略,为开发者提供实

weixin_32495691的博客 326

ShellPython调用002

Shell不能直接调用 Python 脚本内部的某个函数,Shell 执行的是整个.py文件。Python 脚本里定义好多个函数;脚本入口通过「命令行参数」判断,执行对应的函数;Shell 传不同的参数,就能触发 Python 里不同的函数功能。纯Shell磁盘告警:用df取使用率 +if判断 +mail发信,最简单直接。Shell调用Python函数:不能直接调函数,用「参数分发」模式——Python根据sys.argv参数决定执行哪个函数。Shell传参给Python。

老韩的Linux云计算架构师进阶之路 32

AI技能开发API中转站管理:构建高效可控的AI应用系统

API管理是现代软件开发中的核心概念,通过统一的接口规范实现多个服务提供商的集成调度。其技术原理基于负载均衡、配置管理安全认证等机制,能够有效提升系统稳定性开发效率。在AI应用开发领域,API管理的价值尤为突出,可以帮助开发者实现成本控制、故障转移性能优化。特别是在大模型技能开发场景中,通过自定义skills模块化API中转站的统一管理,开发者可以构建灵活可扩展的AI应用系统。这种方案适用于企业级AI工具开发、多模型集成平台等应用场景,为AI编程提供了新的技术范式。

weixin_30920513的博客 472

002信息系统项目管理基础

信息系统项目管理基础 项目管理基础 项目的概念 项目的定义:项目是为提供一种独特产品、服务或者成果所做的临时性努力。 项目的特点 临时性(一次性),有固定的开始结束日期,有明确的终点。 独特的产品、服务或成果(独特性) 逐步完善 资源约束(资源是有限的) 目的性(时间、成本、质量、范围) 项目日常运作的关系 主要区别: 日常运作是持续不断重复进行的,项目是临时的、独特的 目标不同,日常运作是维持经营,项目是完成目标。 实现机制不同,日常运作是持续进行,项目实现目标即完成。 项目战略规划 战略

zhang_kk12的博客 352

管理信息系统重要知识点整理

目录信息的概念性质:信息系统的概念系统:信息系统:信息系统的发展:需求:管理信息系统的概念管理信息系统环境:管理信息系统的技术基础数据处理:数据组织:数据库技术计算机网络技术物联网技术区块链管理信息系统的战略规划开发方法战略规划的作用、内容步骤MIS战略规划方法MIS开发方法管理信息系统的系统分析可行性分析管理信息系统的系统设计管理信息系统的系统实施物理系统的实施计算机系统的实施网络系统的实施程序设计程序系统调试 信息的概念性质: 信息是客观世界各种事物特征的反应 信息是可以通讯的 信息经过加工

Eros1on的博客 6894

ResNet18实战:如何用1089张犬类图片微调模型提升分类准确率?

本文详细解析了如何利用ResNet18模型,在仅有1089张犬类图片的小数据集上进行微调,以显著提升分类准确率。文章系统性地介绍了从数据集构建、模型加载改造、参数冻结策略,到数据增强、训练优化及评估调试的全流程实战方法,为小样本场景下的计算机视觉任务提供了可复用的解决方案。

salt9的博客 75
上一篇: 001-软件工程概述与发展历程
下一篇: 003-软件生命周期与过程模型
lvjesus001
博客等级 码龄15年 674粉丝 243原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值