软件开发方法 | 软件开发过程 辨析

软件开发方法

 

净室方法

净室工程是软件开发的一种形式化方法,可以生成高质量的软件,主要强调模型的重要性,其目标和结果是非常高低的出错率,这是使用非形式化方法难以实现或者不能达到的。

高度严谨,可以通过数据模型证明,偏向于理论的研究方法,模型生成软件等。

结构化方法

结构化方法是一种面向数据流的开发方法,由结构化分析、结构化设计、结构化程序设计构成。

指导思想:自顶而下,逐步分解。

基本原则:功能的分解和抽象。

不适合解决大规模、特别复杂的项目,且难以适应需求的变化。

系统开发过程工程化、文档资料标准化。

常见的瀑布开发模型就属于结构化方法。

面向对象方法

面向对象方法的解决思路是从现实世界中的客观对象入手,尽量运用人类的自然思维方式来构造软件系统。是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。

面向对象方法中,把一切都看成是对象。对象是功能抽象和数据抽象的统一。

面向服务的方法

面向服务的方法主要是为了标准化,系统之间可以通过统一的标准进行集成。

面向服务的方法本身就是面向对象的,有三个主要的抽象级别:操作、服务和业务流程。SOAD分为三个层次:基础设计层(底层服务构件)、应用结构层(服务之间的接口和服务级协定)、和业务组织层(业务流程建模和服务流程编排)

服务建模分为服务发现、服务规约和服务实现三个阶段。

原型法

针对的是需求分析阶段,需求不明确的情况,可以快速得到用户需求的反馈。

调研用户的基本需求,按照基本需求快速开发一个”系统原型“,将原型交给用户使用,启发用户提出新的要求,按照新的要求改进原型,在交给客户使用,如此反复。

按功能分:水平原型(界面)、垂直原型(复杂算法)。

按最终结果分:抛弃式原型、演化式原型。

逆向工程

核心思想是从最终结果,运用解密、反编译、系统分析、程序理解等反推源代码、设计、结构、算法、处理过程等,然后充分考虑新的需求,在通过正向工程的方式,进行开发,形成新系统。

逆向工程导出的信息可分为实现级、结构级、功能级、和领域级四个抽象层次。

实现级:包括程序的抽象语法树、符号表、过程的设计表示。

结构级:包括反应程序分量之间相互依赖关系的信息、例如调用图、结构图、程序和数据结构。

功能级:包括反应程序段功能和程序段之间关系的信息,例如数据和控制流模型。

领域级:包括反映程序分量或程序实体与应用领域概念之间的对应关系,如实体关系模型

  软件开发模型

瀑布模型:瀑布模型也称之为生命周期法,是结构化方法中最常用的开发模型,从需求获取到开发到测试像瀑布样顺流而下。缺点是不灵活比较死板,其适用于需求明确、或二次开发的场景下使用。

瀑布模型对文档要求较高,每个阶段必须交付出合格的文档。惧怕用户测试中的反馈、惧怕需求变更。


 

软件开发方法 | 软件开发过程 辨析_第1张图片

增量模型:把软件产品作为一系列的增量构件(模块)来设计、编码和集成测试,每个构件由多个相互作用的模块构成,并且能够完成特定功能。每一个增量均发布一个可操作、可测试的产品。可以有效的把瀑布模型的顺序特征与快速原型法的迭代特征相结合。

优点:1)能在较短的时间内向用户提交完成部分能独立运行的产品。2)模块化、分批次交付可以让用户更好的了解进展。3)以组件为单位进行开发,降低了开发风险。4)开发的顺序灵活。

缺点:需求的变化不可避免,增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也容易退化成边做边改模型,从而使软件过程的控制失去整体性。


螺旋模型:螺线模型是瀑布+增量的结合产物,强调风险分析,不需要再一开始就把所有事情定义清楚,仅定义最重要功能,然后实现,评估后,在进入下一个阶段,如此反复。每一轮循环,一般包括6个步骤:

确定目标、可选项以及强制条件。

识别并化解风险。

评估可选项。

开发并测试当前阶段。

规划下一个阶段。

确定进入下一个阶段的方法步骤。

优点:相对灵活,并且把风险前置,以小的分段来构建大型系统,可以在任意阶段进行变更、并且客户参与度较高,确保不偏离正确方向和有效交互。

缺点:很难让用户确信这种演化方法的结果是可以控制的.建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。

软件开发方法 | 软件开发过程 辨析_第2张图片

喷泉模型:区别于瀑布模型,各个阶段之间没有明显的界限,可以提高软件开发效率,节省开发时间。但缺点是开发阶段重叠、对文档要求高、审核难度大、项目管理容易失控

软件开发方法 | 软件开发过程 辨析_第3张图片

V模型 / 快速应用开发模型:是以测试驱动的模型,强调测试贯穿整个始终,是瀑布模型的演化版。

构件组装模型:利用模块化思想将整个系统模块化,并在一定构建模型的支持下复用组件库中的一个或多个软件构件,通过组装高效率、高质量的构件软线系统。模型本质上也是演化的,开发过程是迭代的。缺点是对通用组件的标准化程度要求较高,导致风险较大、且构件质量影响最终产品质量。

敏捷方法模型:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。敏捷方法基本特点:短平快的会议、小型版本发布、较少的文档、合作为重、客户直接参与、自动化测试、适应性计划调整、持续集成、允许重构。强调四大价值观、五大原则。

四大价值观:沟通、简单、反馈和勇气,敏捷方法不像瀑布模型那样,对文档的要求较低,文档的核心价值是为了保存信息、便于阶段和阶段间的沟通,敏捷中提倡简单、沟通,并且鼓励每个人发声、减少质疑等等,可以确保信息可以正确的传达。

五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。

常见的敏捷开发方法由XP(极限编程)、水晶法、Scrum、FDD(特征驱动开发)、ASD、开放式源码

软件开发方法 | 软件开发过程 辨析_第4张图片

统一过程模型:是一个面向对象且基于网络的程序开发方法论,检查i用力驱动,以架构为中心,迭代和增量的开发方法。主要分为四个阶段:初始、细化、构建、交付。

初始阶段:确定项目范围和边界,识别系统的关键用例、展示系统的候选架构、估计项目费用和时间,并且评估项目的风险。

细化阶段,需要分析系统问题、建立软件架构基础,完成软件架构设计,并对最高风险进行淘汰(规避、转移)

构建阶段,主要是系统详细设计和编码开发,对构件进行开发、组装和单元测试。

交付阶段,进行集成测试、发布版本、文档归档等等。交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该再早期解决掉。

关注公众号:IT转型指北,回复【经典书籍】

软件开发方法 | 软件开发过程 辨析_第5张图片

 

你可能感兴趣的:(团队开发)