几种软件开发方法对比

几种软件开发方法对比

1 综述

软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。

本文对净室方法、结构化方法、面向对象方法、原型法、逆向工程等方法进行梳理,并对各种开发方法特点、优点进行对比。

2 净室方法

2.1 特点

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

2.2 缺点

CSE太理论化,需要更多的数学知识。其正确性验证的步骤比较困难且比较耗时。CSE要求采用增量式开发、采用盒子结构、采用统计测试方法,普通工程师必须经过加强训练才能掌握。

CSE开发小组不进行传统的模块测试,这是不现实的。工程师可能对编程语言和开发环境还不熟悉,而且编译器或操作系统的bug也可能导致未预期的错误。

CSE毕竟脱胎于传统软件工程,不可避免地带有传统软件工程的一些弊端。

3 结构化方法

3.1 特点

结构化方法的主要特点是:开发目标清晰化、开发工作阶段化、开发文档规范化和设计方法结构化。结构化方法特别适合于数据处理领域的问题,但是不适应于规模较大、比较复杂的系统开发。

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

结构化分析是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能类型,从而完成需求分析工作。结构化方法分析模型的核心是数据字典,围绕这个核心,有三个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。在实际工作中,一般使用E-R图表示数据模型,用DFD表示功能模型,用状态转换图表示行为模型。这三个模型有着密切的关系,它们的建立不具有严格的时序性,而是一个迭代的过程。

结构化设计是根据模块独立性准则、软件结构优化准则将数据流图转换为软件的结构体系,用软件结构图来建立系统的物理模型,实现系统的概要设计。

结构化程序设计使用3种基本控制结构构造程序,任何程序都可以由顺序、选择和重复3种基本控制结构构造。

自顶向下方法是一种决策策略。软件开发涉及作什么决策、如何决策和决策顺序等决策问题。

自顶向下方法在任何时刻所作的决定都是当时对整个设计影响最大的那些决定。如果把所有决定分组或者分级,那么决策顺序是首先作最高级的决定,然后依次地作较低级的决定。同级的决定则按照随机的顺序或者按别的方法。一个决策的级别是看它距离要达到的最终目的(因此是软件的实际实现)的远近程度。从问题本身来看,或是由外(用户所见的)向内(系统的实现)看,以距离实现近的决定为低级决定,远的为高级决定。

3.2 缺点

对系统分析和设计人员的要求较高。

开发周期长,系统复杂,一般属于一种高成本、大投资的工程。

对于大系统而言,自上而下的规划对于下层系统的实施往往缺乏约束力,

从经济角度来看,很难说自顶向下的做法在经济上市合算的。

4 面向对象方法

4.1 特点

面向对象方法是系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,有利于系统开发过程中用户与开发人员的交流和沟通,缩短开发周期,提高系统开发的正确性和效率。

面向对象方法包含面向对象分析OOA、面向对象设计OOD、面向对象程序设计OOP。

面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成。用例建模用来描述待开发系统的功能需求,主要元素是用例和参与者。参与者是指系统以外的,需要使用系统或与系统交互的事物,包括:人或组织、设备、外部系统等,比较隐晦的参与者包括:时间、温度;用例是对系统行为的动态描述,用例获取是需求分析阶段的主要任务之一,用例之间的关系包括:包含、扩展、泛化。

面向对象的设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。在面向对象设计中,类可以分为三种类型:实体类、边界类和控制类。类之间的关系包括6种:关联、聚合、组合、依赖、泛化、实现。

4.2 缺点

类和继承等特点使得程序会多很多指针操作来定位函数入口和自身要维护虚拟方法表等额外的工作,程序的处理效率相对要低(但程序开发效率高)。

5 原型法

5.1 特点

原型是软件系统的初始版本,用来演示概念并尝试设计选择,通常用来发现更多的问题和可能的解决方案。快速迭代式的原型开发能够有效控制成本,根据原型与最终产品之间的关系,原型开发分为三类:抛弃式原型开发利用原型验证和澄清系统的需求描述,重新构造系统:演化式原型开发逐步改进和细化原型,将原型进化直至产生出目标系统;增量式原型开发在建立软件总体设计的基础上,采用增量开发方法,使原型成为最终系统。

以原型开发思想为基础,提出了螺旋模型、敏捷方法等。

5.2 缺点

原型法不适用于开发大型的信息系统;系统难于维护;如果用户合作不好,盲目纠错,会拖延开发进程。

6 逆向工程

6.1 特点

逆向工程与重构工程是目前预防性维护采用的主要技术。所谓软件的逆向工程就是分析已有的程序,寻求比源代码更高级的抽象表现形式。一般认为,凡是在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。逆向工程导出的信息可以分为:实现级、结构级、功能级、领域级,信息的抽象级别越高,它与代码的距离就越远,通过逆向工程恢复的难度亦越大,而自动工具支持的可能性相对变小,要求人参与判断和推理的工作增多。

7 敏捷方法

7.1.1 Scrum

Scrum是橄榄球比赛中“争球”的意思,你可以脑补争球时的敏捷、激情和你争我夺。现在Scrum是广泛应用于IT界的一套项目管理工具

Scrum的核心,是把整个项目分成若干个冲刺,每次2-4周,冲完一次再来一次。

Scrum的本质,是把一次漫长的长跑,分割成一段段全力以赴的冲刺,通过一套标准流程方法,提高效率。

Scrum是由三个角色(产品负责人,Scrum Master,团队成员)、四个仪式(冲刺计划会,每日站会,冲刺评审会,冲刺回顾会)和三个物件(产品积压,冲刺积压,燃尽图)组成的一套项目管理方法。

产品负责人,召开冲刺计划会,定下三件事:冲刺目标。定下目标后,把它们从“产品积压”,移入“冲刺积压”。

冲刺方法。选定冲刺方法。

分配任务。团队成员若干人,在6个步骤中,各自主动领取任务。

燃尽,是烧完了的意思。随着时间推移,剩余工作量越来越少。把计划进度,画成一根从左上到右下的直线。然后,把实际进度用红线标在旁边,看着工作量像蜡烛一样,不断燃尽。

冲刺评审会,由主编负责主持,一起审阅最终交付的文章。冲刺回顾会,讨论开始做什么,停止做什么,继续做什么。

7.1.2 极限编程

XP (Extreme Programming,极限编程)在所有的敏捷型方法中,XP是最引人瞩目的。它源于Smalltalk圈子,特别是Kent Beck和Ward Cunningham在20世纪80年代末的密切合作。XP在一些对费用控制严格的公司中的使用,已经被证明是非常有效的。

7.1.3 水晶方法

Cockburn的水晶系列方法,水晶系列方法是由AlistairCockburn提出的。它与XP方法一样,都有以人为中心的理念,但在实践上有所不同。Alistair考虑到人们一般很难严格遵循一个纪律约束很强的过程,因此,与XP的高度纪律性不同,Alistair探索了用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。也就是说,虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。

7.1.4 开源界的开发方法

开放式源码,这里提到的开放式源码指的是开放源码界所用的一种运作方式。开放式源码项目有一个特别之处,就是程序开发人员在地域上分布很广,这使得它和其他敏捷方法不同,因为一般的敏捷方法都强调项目组成员在同一地点工作。开放源码的一个突出特点就是查错排障(debug)的高度并行性,任何人发现了错误都可将改正源码的“补丁”文件发给维护者。然后由维护者将这些“补丁”或是新增的代码并入源码库。

7.1.5 FDD

Coad的功用驱动开发方法(FDD-Feature Driven Development),FDD是由Jeff DeLuca和大师Peter Coad提出来的。像其他方法一样,它致力于短时的迭代阶段和可见可用的功能。在FDD中,一个迭代周期一般是两周。在FDD中,编程开发人员分成两类:首席程序员和“类”程序员(classowner)。首席程序员是最富有经验的开发人员,他们是项目的协调者、设计者和指导者,而“类”程序员则主要做源码编写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net旅游交流管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 旅游交流管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c# 语言开发 asp.net旅游交流网站1 应用技…

学术生活|如何有效参与学术会议

参与学术会议是研究生展示自己、提高学术能力、拓展人脉关系的重要途径。拟参会者可以从研究参加人员名单,找共同点,平等地与大佬展开交流。进行有用的学术社交需要真诚、多积累个人学术作品和发表,并不要仅仅加微信。这些经验将帮助学者更好…

阿里云的OSS云存储的基本使用

阿里云官网:阿里云-计算,为了无法计算的价值 通过阿里云官网,登录进入用户的界面,在搜索框中输入OSS,然后进入阿里云的对象存储OSS的控制台。(未开通的开通即可) 创建 Bucket 点击【Bucket 列…

Product owner的职责

Product owner就是产品的负责人。Product owner的职责就是使Scrum团队创造增量能够实现产品价值最大化。那么Product owner该如何做呢?作为Scrum团队的一员,他(她)要为团队提供清晰的产品信息,如产品的愿景、目标。当然…

执行source命令显示 command not found

1)修改完成/etc/profile,使其生效 source /etc/profile -提示找不到命令 试试:A)locate source /etc/profile 试试:B)usr/bin/source /etc/profile 也就是source命令无法识别而已,至…

4.数据库的基本操作

1.创建数据库 系统安装完成后会有部分默认数据库存在: 注意:mysql的语句每一个输入完后要有分号才能写下一个 这初始的四个库不要删除 其中:mysql数据库中存储用户访问权限。 创建自己的数据库命令如下: create database database_name(数据库名字&am…

Stable Diffusion系列(二):ControlNet基础控件介绍

文章目录 线稿提取类Canny:边缘检测SoftEdge:软边缘检测Lineart:精细线稿提取Scribble/Sketch:涂鸦提取MLSD:建筑领域的线条提取 3D提取类Normal map:法线贴图Depth:深度计算Segmentation&#…

linux 出现Access-Your-Private-Data.desktop README.txt

参考:https://blog.csdn.net/h66295112/article/details/81085643 参考:https://askubuntu.com/questions/71708/how-do-i-open-access-your-private-data-desktop 原因应该是通过terminal修改了ubuntu密码,然后重启 THIS DIRECTORY HAS BEEN UNMOUNTED TO PROTECT…

Nginx 部署多个安全域名,多个服务【工作记录】

以下是本人通过Docker 部署的Nginx挂载出来的文件目录 先看下 nginx.conf 配置文件内容:如下 ps:当前文件就是安装后的初始内容,无修改。主要关注最后一行 include /etc/nginx/conf.d/*.conf;表示引入其他目录下的.conf配置文件;…

在线数据库关系图设计工具,选Itbuilder

一旦数据库超出了人类可消化的大小,使用关系图工具来辅助其设计就变得至关重要。创建数据库听起来像是一个复杂的过程,但使用现代数据库图表工具,情况并非如此。 itbuilder在线数据库设计工具使用户可以创建和导入数据库关系图以查看数据库对…

【Java笔试强训】Day8(WY20 两种排序方法、HJ108 求最小公倍数)

WY20 两种排序方法 链接&#xff1a;两种排序方法 题目&#xff1a; 考拉有n个字符串字符串&#xff0c;任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法&#xff1a; 1.根据字符串的字典序排序。例如&#xff1a; “car” < “carriage” < “c…

如何与极星Polestar建立 EDI连接?

Polestar是一家总部位于瑞典的电动汽车制造商&#xff0c;是沃尔沃汽车集团&#xff08;Volvo Car Group&#xff09;的子公司。Polestar专注于开发和制造高性能电动汽车&#xff0c;并在可持续性、创新和技术方面进行了重点投资。他们的目标是推动电动汽车市场的发展&#xff…

网络协议--TCP的超时与重传

21.1 引言 TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认&#xff0c;它就重传该数据。对任何实现而言&#xff0c;关键之处就在于超时和重…

Matplotlib教程(非常详细)(第一部分)

Matplotlib是一款免费开源的Python数据可视化工具。 Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一&#xff0c;支持跨平台运行&#xff0c;它是 Python 常用的 2D 绘图库&#xff0c;同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用&…

Go语言入门-函数

函数 函数的声明 在Go语言中&#xff0c;函数的声明方式有以下几种&#xff1a; 普通函数声明 普通函数声明是最基本的函数声明方式&#xff0c;它的语法如下&#xff1a; func 函数名(参数列表) 返回值类型 {// 函数体 }其中&#xff0c;参数列表可以是零个或多个参数&am…

【C++的OpenCV】第十五课-OpenCV的绘图工具(rectangle、circle、line、polylines、putText)常用方法简介

&#x1f389;&#x1f389;&#x1f389; 欢迎各位来到小白 p i a o 的学习空间&#xff01; \color{red}{欢迎各位来到小白piao的学习空间&#xff01;} 欢迎各位来到小白piao的学习空间&#xff01;&#x1f389;&#x1f389;&#x1f389; &#x1f496; C\Python所有的入…

若依spring-boot myBatis Xml查询部分字段为null的解决方案

原因很简单 &#xff0c;仔细看发现都是带有下划线的字段无法查询&#xff0c;因为实体类的命名是驼峰&#xff0c;和数据库不对应&#xff0c;这时候只需要在myBatis-config.xml中配置一下使用驼峰转换即可。因为默认是关闭的。 <!-- 使用驼峰命名法转换字段 --> <s…

你知道什么是 Ping 吗?

欢迎到我的博客浏览 胤凯 (oyto.github.io) 这次我们来看一下什么是 Ping 操作&#xff0c;以及它有什么用处&#xff0c;并且我们来动手实现一个简易版的 Ping 工具。 Ping 是什么&#xff1f; ​ ping 是一个计算机网络工具&#xff0c;通常用于测试网络连接的可达性和测…

中文编程软件怎么下载,中文编程语言

中文编程软件怎么下载&#xff0c;中文编程语言 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;想如图这个实例就是用这个工具…

【MySQL】视图

文章目录 一. 基本使用二. 视图规则和限制结束语 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。 视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图 一. 基本使用 创建视图 …