软件开发(方法、模型)

目录

1. 软件开发方法

2. 软件开发模型

参考


1. 软件开发方法

软件开发方法是指软件开发过程中所遵循的办法和步骤。

1) 从性质上,分为形式化方法和非形式化方法。

形式化方法在的数学基数上,采用的数学语言,具有精确的数学语义的方法,对系统和开发过程进行严格的处理和论证,适用于系统安全级别要求极高的软件开发。非形式化方法不把严格作为主要着眼点。

2) 从使用范围上,分为整体性方法和局部方法。整体性方法适用于软件开发的全过程,例如自顶向下、自底向上、软件自动化方法等;局部性适用于软件开发过程的某个具体阶段,例如各类需求分析方法、设计方法等。

  • 净室方法

净室方法是一种形式化方法,可以开发较高质量的软件。使用盒式结构规约进行分析和建模,并将正确性验证作为发现和排除错误的主要机制,使用统计测试 来获取认证软件可靠性所需要的信息。强调在规约和设计上的严格性,还强调统计质量控制技术,包括基于客户对软件的预期使用测试。

  • 结构化方法

思想是“自顶向下、逐步求精”,强调开发方法的结构合理性,和所开发软件的结构合理性。针对软件生存周期的各个不同阶段,包括了结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP 等方法。

结构化分析:是一种面向数据流的需求分析方法,使用抽象模型的概念,按照软件的内部数据传递、变换的关系,自顶向下、逐层分解。使用的手段有数据流图、数据字典、结构化语言、判定表和判定树。

结构化设计:在模块层次上区分设计质量的技术,与SA方法衔接,以数据流图为基础得到软件的模块结构。尤其适用于变换型结构事务性结构 的目标系统。

结构化方法是目前最成熟、应用较广泛的一种工程化方法。缺点如下:

1)开发周期长

2)早期结构化方法注重系统功能,兼顾数据机构方面不多

3)结构化程度较低的系统,在开发初期难于锁定功能需求

  • 面向对象方法

主要包括OMT方法(对象建模技术)、Coad/Yourdon方法、OOSE方法(面向对象软件工程)、Booch方法。 OMT、OOSE和Booch方法可以统一成UML(统一建模语言)

  • 原型方法

  • 逆向工程方法

1)再工程(reengineering):对现有软件系统的重新开发过程,包括逆向工程、新需求考虑(软件重构)和正向工程三个步骤。旨在对现存的大量的软件系统进行挖掘、整理得到有用的软件构件,或对已有软件构件进行维护以延长其生存期。再工程的基础是系统理解 ,包括对运行系统、源代码、设计、分析和文档得到全面理解。

2) 软件重构:对源代码和数据的修改,使其易于修改和维护,以适应将来的变更。通常并不改变体系结构,而是关注模块的细节。

软件重构的意义在于提高软件质量和生产率,减少维护工作量,提高软件可维护性。

3)逆向工程(reverse engineering):分析程序,力图在比源代码更高的抽象层次上建立程序表示过程。逆向工程是一个设计恢复的工程,可以从已有的程序中抽取出数据结构、体系结构和程序设计信息。

2. 软件开发模型

  • 瀑布模型

是结构化方法中最常用的开发模型,把软件开发分为六个过程:软件计划、需求分析、软件设计、程序编码、软件测试、运行维护。

六个阶段自上而下、相互衔接,如同瀑布流水,本质是“一次通过”。每个活动只做一次,也称作线性顺序模型。适用于大型软件项目开发的质量和效率。

软件开发(方法、模型)_第1张图片

缺陷:

1)开发模型呈线性,软件与用户见面的间隔较长,增加了一定风险。

2)前期阶段的错误会传导到后面阶段,导致开发回溯返工,甚至整个软件项目的失败

3)在需求分析阶段,完全确定用户需求比较困难,甚至是不可能的。

  • 原型模型

区分为快速原型模型原型进化模型(演化模型)

1)快速原型模型由原型开发阶段目标软件开发阶段 构成。需求获取之后丢弃原型,根据原型获取的需求进行目标软件的开发。

2)原型演化模型,也成为变换或演化模型,在快速开发一个原型的基础上,根据用户的调用原型过程中的反馈意见和建议对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品。

  • 螺旋模型

快速原型模型 的基础上扩展而成。以原型为基础,沿着螺线自内向外旋转,每旋转一圈都要经过目标制定、风险分析、开发和有效性验证、评审 活动,并开发原型的一个新版本。螺旋模型实际上是这四个过程的迭代过程,若干次迭代得到最终的软件产品。

软件开发(方法、模型)_第2张图片

  • 喷泉模型

  • 增量模型

  • 迭代模型

  • 构建组装模型

  • V模型

强调测试和开发工程同样重要,以测试为中心的开发模型。V模型的价值在于非常明确标明了测试过程中存在的不同级别,并清楚描述了这些测试阶段和开发过程期间各阶段的对应关系。

软件开发(方法、模型)_第3张图片

  • 快速应用开发(RAD,rapid application development)

一种增量型的软件开发模型,是瀑布模型的一个高速变种。通过大量使用可重复构件要求系统模块化程度高 ,采用基于构件的构造方法赢得快速开发。

与瀑布模型相比,RAD模型不采用第三代程序设计语言来创建软件,而是采用基于构件的开发方法,复用已有的程序结构或使用可重复构件。

缺点:

1)RAD对模块化要求比较高

2)开发者和客户必须在很短时间完成一系列需求分析

3)只能用于信息系统的开发,不适合技术风险很高的情况。

  • 敏捷方法

强调程序员团队和业务专家的紧密协作、面对面沟通、频繁交付新的软件版本。

主要特征:1)敏捷型方法是“适应性”的而非“预设性”的。敏捷型方法欢迎变化。2)敏捷型方法是“面向人的”而非“面向过程的”。强调软件开发充分利用人的特点,发挥人的创造能力。

1)极限编程(XP)

2)水晶方法

以人为中心的理念,与XP的高度纪律性不同,水晶系列方法用最少的几率约束而仍能成功。在产出效率上不如XP,但易于运作。

3)开放式源码

程序开发人员在地域上分布较广,任何人发现了错误都可将改正的源码的“补丁”文件发给维护者。突出特点是高度并行性

4)SCRUM

强调明确定义了的可重复方法过程只限于在明确定义了的可重复环境中,为明确定义了的可重复的人员所用,去解决明确定义了的可重复的问题。

5)特性驱动开发(FDD, Feature-Driven Development)

致力于短时的迭代阶段和可见可用的功能,一个迭代周期一般是两周。在FDD中,编程开发人员分成两类:首席程序员“类”程序员 ,首席程序员是最富有经验的开发人员,是项目的协调者、设计者和指导者,而”类“程序员则主要做源码编写。

6)自适应软件开发(Adaptive Software Development, ASD)

其核心是三个非线性、重叠的开发阶段:猜测、合作和学习

  • RUP(关系统一过程,Rational Unified Process)方法

  1. 9个核心工作流程:业务建模、需求、分析和设计、实现、测试、部署、配置和变更管理、项目管理、环境。
  2. 软件开发周期分为多个循环,每个循环:初始阶段、细化阶段、构造阶段、移交阶段 。每个阶段结束有一个里程碑。

        1)初始阶段的任务是为系统建立业务模型并确定项目的边界。在初始阶段,必须识别所有与系统交互的外部实体,定义系统与外部实体交互的特性。在这个阶段中,关注的是整个项目的业务和需求方面的主要风险。

        2)细化阶段的任务是分析问题领域,建立完整的架构。淘汰项目中最高风险的元素。在细化阶段,必须在理解整个系统的基础上,对架构做出决策,包括其范围、主要功能和诸如性能等非功能需求,同时为项目建立支持环境。通

        3)构建阶段,要开发所有剩余的构建和应用程序功能。把这些构件集成为产品,并进行详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制操作,以优化成本、进度和质量。构建阶段的主要任务是过优化资源和避免不必要的报废和返工,使开发成本降到最低。

        4)当基线已经足够完善,可以按照到最终用户的实际环境中,进入交付阶段。交付阶段的重点是确保软件对最终用户是可用的。交付阶段的主要任务是进行B测试,制作产品发布版本。

      3. 3个核心概念:角色、活动、制品

      4. 特点:1)用例驱动 2)以体系结构(架构)为中心 3)迭代和增量

      5. RUP采用4+1视图模型:

1)分析和测试人员关心的是系统行为,用例视图(场景视图)。2)最终用户关心的是系统功能,逻辑视图。3)程序员关心的是系统的配置、装配问题,实现视图(开发视图)。 4)系统集成人员关心的是系统的性能、可伸缩性、吞吐率,进程视图(处理视图)。 5) 系统工程师关心系统的发布、安装、拓扑,部署视图。

软件开发(方法、模型)_第4张图片

参考

  • 《系统架构设计师考试》

关于作者:

犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

专业方向爱好:数学、科学技术应用

关注犇叔,期望为您带来更多科研领域的知识和产业应用。

内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路。

你可能感兴趣的:(系统架构,系统架构,架构,团队开发)