软件工程-软件开发
Posted 小毕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程-软件开发相关的知识,希望对你有一定的参考价值。
一、软件开发方法⭐
-
结构化开发方法
用户至上,自顶向下,逐步分解(求解),严格区分工作阶段,每阶段有任务与成果,强调系统开发过程的整体性和全局性,系统开发过程工程化,文档资料标准化。
优点:
理论基础严密,它的指导思想是用户需求在系统建立之前就能被充分了解和理解。由此可见,结构化方法注重开发过程的整体性和全局性。缺点:
开发周期长;文档、设计说明繁琐,工作效率低;要求在开发之初全面认识系统的信息需求,充分预料各种可能发生的变化,但这并不十分现实;若用户参与系统开发的积极性没有充分调动,造成系统交接过程不平稳,系统运行与维护管理难度加大。阶段固化,不善变化,适用于需求明确。 -
原型法开发方法
适用于需求不明确的开发,按功能分-水平原型(界面)、垂直原型(复杂算法),按最终结果分-抛弃式原型、演化式原型。原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的,系统分析、设计与实现都是随着对一个工作模型的不断修改而同时完成的,相互之间并无明显界限,也没有明确分工。系统开发计划就是一个反复修改的过程。适于用户需求开始时定义不清、管理决策方法结构化程度不高的系统开发,开发方法更宜被用户接受;但如果用户配合不好,盲目修改,就会拖延开发过程。
抛弃型原型(Throw-It-Away Prototype),此类原型在系统真正实现以后就放弃不用了。
进化型原型(Evolutionary Prototype),此类原型的构造从目标系统的一个或几个基本需求出发,通过修改和追加功能的过程逐渐丰富,演化成最终系统。 -
面向对象的开发方法
最早来源于仿真领域,其特点是系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,有利于系统开发过程中用户与开发人员的交流和沟通,缩短开发周期,提供系统开发的准确性和效率。具有更好的复用性,关键在于建立一个全面、合理、统一的模型,分析、设计、实现三个阶段界限不明确。用面向对象方法开发软件,通常需要建立三种形式的模型:对象模型(描述系统数据结构)、动态模型(描述系统控制结构)、功能模型(描述系统功能)。
对象模型
对象模型表示静态的、结构化的系统的“数据”性质。对象模型是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
动态模型
动态模型表示瞬时的、行为化的系统的“控制”性质,规定了对象模型中对象的合法变化序列。即对象的动态行为。用状态图来描绘对象的状态、触发状态转换的事件、以及对象的行为(对事件的响应)。每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。
功能模型
功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,故更直接反映了用户对目标系统的需求。功能模型也通常由一组数据流程图表示。在面向对象方法中,数据流程图没有在结构化分析中重要,有时可以省略。
-
面向服务的方法SO
以粗粒度、松散耦合的系统功能为核心,强调系统功能的标准化和构件化,加强了系统的灵活性、可复用性和可演化性。
从概念上讲,SO 方法有三个主要的抽象级别:操作、服务、业务流程
操作:代表单个逻辑工作单元(LUW)的事务。执行操作通常会导致读、写或修改一个或多个持久性数据。SOA 操作可以直接与面向对象 (OO) 的方法相比。它们都有特定的结构化接口,并且返回结构化的响应。完全同方法一样,特定操作的执行可能涉及调用附加的操作。操作位于最底层。
服务:代表操作的逻辑分组。例如,如果我们将 CustomerProfiling 视为服务,则按照电话号码查找客户、按照名称和邮政编码列出顾客和 保存新客户的数据就代表相关的操作。
业务流程:为实现特定业务目标而执行的一组长期运行的动作或活动。业务流程通常包括多个业务调用。
业务流程的例子有: 接纳新员工、 出售产品或服务和完成订单。
SOAD 分为三个层次:基础设计层(底层服务构件)、应用结构层(服务之间的接口和服务级协定)和业务组织层(业务流程建模和服务流程编排)
服务建模:分为服务发现、服务规约和服务实现三个阶段
-
形式化方法使用于那些系统安全级别要求极高的软件的开发。也就是形式化方法强调的是安全级别高的软件。
二、软件开发模型⭐⭐⭐⭐⭐
-
原型模型
典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。(由原型开发阶段和目标软件开发阶段构成)
-
瀑布模型
瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、运行与维护。
瀑布模型的特点是容易理解,管理成本低,每个阶段都有对应的成果产物,各个阶段有明显的界限划分和顺序要求,一旦发生错误,整个项目推倒重新开始。
适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目。
-
增量模型
融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试**。强调每一个增量均发布一个可操作的产品**。
-
螺旋模型
在快速模型的基础上扩展而成的,典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。属于面向对象开发模型,强调风险引入。
-
V 模型
强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型。
-
喷泉模型
典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无明显界限,并且可以迭代交叉。
-
快速应用开发 RAD
概念:RAD 是瀑布模型的一个高速变种,适用比传统生命周期快得多的开发方法,它强调极短的开发周期,通常适用基于构件的开发方法获得快速开发。
过程:业务建模,数据建模,过程建模,应用生成,测试与交付
适用性:RAD 对模块化要求比较高,如果某项功能不能被模块化,则其构件就会出问题;如果高性能是一个指标,且必须通过调整结构使其适应系统构件才能获得,则 RAD 也有可能不能奏效;RAD 要求开发者和客户必须在很短的时间完成一系列的需求分析,任何一方配合不当都会导致失败;RAD 只能用于管理信息系统的开发,不适合技术风险很高的情况。
-
构件组装模型
在基于构件的软件开发中,
(1)逻辑构件模型用功能包描述系统的抽象设计,用接口描述每个服务集合,以及功能之间如何交互以满足用户需求,它作为系统的设计蓝图以保证系统提供适当的功能。
(2)物理构件模型用技术设施产品、硬件分布和拓扑结构、以及用于绑定的网络和通信协议描述系统的物理设计,这种架构用于了解系统的性能、吞吐率等许多非功能性属性。
检测并消除体系结构失配:体系结构失配问题由 David Garlan 等人在 1995 年提出。失配是指在软件复用的过程中,由于待复用构件对最终系统的体系结构和环境的假设(assumption)与实际状况不同而导致的冲突。在构件组装阶段失配问题主要包括:
(1)由构件引起的失配,包括由于系统对构件基础设施、构件控制模型和构件数据模型的假设存在冲突引起的失配;
(2)由连接子引起的失配,包括由于系统对构件交互协议、连接子数据模型的假设存在冲突引起的失配;
(3)由于系统成分对全局体系结构的假设存在冲突引起的失配等。要解决失配问题,首先需要检测出失配问题,并在此基础上通过适当的手段消除检测出的失配问题。
-
统一过程(在软考中 UP、RUP 都指统一过程)
典型特点是用例驱动、以架构为中心、迭代和增量。统一过程把一个项目分为四个不同的阶段:
构思阶段(初始/初启阶段):包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。
细化阶段(精化阶段):包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示。
构建阶段:将设计转化为实现,并进行集成和测试。
移交阶段:将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善。 -
敏捷开发
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
(1)极限编程 XP 是一种轻量级的开发方法,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作 40 小时、现场客户和编码标准。(在一些对费用要求严格的公司中使用,已被证实是非常有效的)
(2)水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。(用最少的纪律约束仍能成功的方法)
(3)并列争球法的核心是迭代、增量交付,按照 30 天进行迭代开发交付可实际运行的软件。
(4)自适应软件开发(ASD 方法) 的核心是三个非线性的,重迭的开发阶段:猜测、合作、学习。
(5)开放式源码,这里提到的开放式源码指的是开放源码界所用的一种运作方式。开放式源码项目有一个特别之处,就是程序开发人员在地域上分布很广,这使得它和其他敏捷方法不同,因为一般的敏捷方法都强调项目组成员在同一地点工作。开放源码的一个突出特点就是查错排障(debug)的高度并行性,任何人发现了错误都可将改正源码的“补丁”文件发给维护者。然后由维护者将这些“补丁”或是新增的代码并入源码库。
(6)Coad 的特征驱动开发方法(FDD-Feature Driven Development) FDD 是由 Jeff De Luca 和大师 Peter Coad 提出来的。像其他方法一样,它致力于短时的迭代阶段和可见可用的功能。在 FDD 中,一个迭代周期一般是两周。在 FDD 中,编程开发人员分成两类:首席程序员和“类”程序员(class owner)。首席程序员是最富有经验的开发人员,他们是项目的协调者、设计者和指导者,而“类”程序员则主要做源码编写。
-
逆向工程 ⭐
实现级:包括程序的抽象语法树、符号表、过程的设计表示
结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构
功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型
领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如实体关系模型
-
净室工程(形式化)
净室即无尘室、洁净室。也就是一个受控污染级别的环境。
使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。
使用统计的测试来获取认证被交付的软件的可靠性所必需的出错率信息。
-
SCRUM
明确定义了可重复的方法过程(2-4周一个冲刺) -
软件过程模型
基本概念:软件过程是制作软件产品的一组活动以及结果,这些活动主要由软件人员来完成,软件活动主要有:
(1)软件描述。必须定义软件功能以及使用的限制。
(2)软件开发。也就是软件的设计和实现,软件工程人员制作出能满足描述的软件。
(3)软件有效性验证。软件必须经过严格的验证,以保证能够满足客户的需求。
(4)软件进化。软件随着客户需求的变化不断地改进。
三、基于架构的软件开发 ABSD
以架构为核心的开发方法中,架构用来激发和调整设计策略,不同的视图用来表达与质量目标有关的信息。架构设计是一个迭代过程,在建立软件架构的初期,选择一个合适的架构风格是首要的,在此基础上,开发人员通过架构模型,可以获得关于软件架构属性的理解,为将来的架构实现与演化过程建立了目标。
基于架构的软件设计(Architecture-Based Software Design,ABSD)是一种架构驱动方法。这种方法有 3 个基础:
-
功能的分解。在功能分解中,ABSD 方法使用已有的基于模块的内聚和耦合技术。
-
通过选择架构风格来实现质量和业务需求。
-
软件模板的使用。软件模板利用了一些软件系统的结构。
ABSD 方法是递归的,且迭代的每一个步骤都是清晰定义的。因此,不管设计是否完成,架构总是清晰的,这有助于降低架构设计的随意性。
ABSD采用视角与视图来描述软件架构,采用用例与质量场景来描述需求。
1. 开发过程
2. 需求和设计过程
3. 实现和演化过程
扩展
处理流程设计工具
1、程序流程图又称程序框图,是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上,通过对输入输出数据和处理过程的详细分析,将计算机的主要运行步骤和内容标识出来。
2、N-S图,也被称为盒图或NS图(Nassi Shneiderman图),一种在流程图中完全去掉流程线,全部算法写在一个矩形阵内,容易表示嵌套关系和层次关系,并具有强烈的结构化特征 。NS图几乎是流程图的同构,任何的NS图都可以转换为流程图,而大部分的流程图也可以转换为NS图。其中只有像Goto指令或是C语言中针对循环的break及continue指令无法用NS图表示。
3、IPO是指结构化设计中变换型结构的输入(Input)、加工(Processing)、输出(Output)。IPO图是对每个模块进行详细设计的工具,它是输入加工输出(INPUT PROCESS OUTPUT)图的简称。主体是处理过程说明,可以采用流程图、判定树/表等来进行描述 。
4、PAD图指问题分析图(Problem Analysis Diagram),是一算法描述工具,也是详细设计(软件设计)中常用的图形工具,它是一种由左往右展开的二维树型结构.PAD图的控制流程为自上而下,从左到右地执行.包含5种基本控制结构,并允许递归使用。
面向对象的分析模型
面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。
CMM
CMM即软件开发能力成熟度模型,是用来指导软件过程改进的。
以上是关于软件工程-软件开发的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-131]-《软考-系统架构设计师》-软件工程-1-软件工程方法大全(软件开发过程方法软件开发过程模型逆向工程净室软件工程)