软件工程基础<一>

本文深入探讨了软件工程的核心概念,包括软件定义、软件类型、软件工程过程、模型(瀑布、原型、RAD、演化)、软件危机、基本原理、生命周期、需求分析、设计、实现、测试和维护。重点介绍了面向对象方法学,涵盖分析、设计和实现过程,以及关键概念如对象模型、动态模型、功能模型和维护。本文旨在为软件开发人员提供全面的指南,以提高软件开发的效率和质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

***********************软件工程导论************

***软件工程定义:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程。

***软件:1.一个信息转换器,功能:产生管理、获取、修改、显示或转换信息。2.计算机系统中与硬件相互依存的另一部分,它包括程序、数据及相关文档的完整性集合。

***根据用途划分软件:1.系统软件 2. 实时软件 3.商业管理软件 4. 工程与科学计算软件 5.嵌入式软件 6.人工智能软件 7. 个人计算机软件。

***软件产品的特征:逻辑实体,生产与硬件不同,不会磨损。

***软件工程过程包括:软件规格说明,软件开发,软件确认,软件演进。

***软件工程的特点:易理解性,可见性,可支持性,可接受性,可靠性,健壮性,可维护性,高效率。

***几种软件工程模型:瀑布模型,原型模型,快速应用开发模型RAD,演化软件工程(1.增量型 2.螺旋型)

**瀑布模型:是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。


***原型模型:原型模型通过向用户提供原型获取用户的反馈,使开发出的软件能够真正反映用户的需求。同时,原型模型采用逐步求精的方法完善原型,使得原型能够“快速”开发,避免了像瀑布模型一样在冗长的开发过程中难以对用户的反馈作出快速的响应。相对瀑布模型而言,原型模型更符合人们开发软件的习惯,使目前较流行的一种实用软件生存期模型。


***快速应用开发模型RAD:

快速应用开发(RAD)是一个线性顺序的 软件开发模型,强调极短的开发周期。RAD 模型是 线性顺序模型的一个“高速”变种,通过使用基于 构件的建造方法获得了快速开发。如果需求理解得很好,且约束了项目范围①, RAD过程使得一个开发组能够在很短时间内(如60 到90 天)创建出“功能完善的系统”[MAR91]。RAD 方法主要用于信息系统 应用软件的开发,它包含如下几个开发阶段[KER94]:
业务建模:业务活动中的信息流被模型化,以回答如下问题:什么信息驱动业务流程?生成什么信息?谁生成该信息?该信息流往何处?谁处理它?
数据建模:业务建模阶段定义的一部分信息流被精化,形成一组支持该业务所需的 数据对象。标识出每个对象的特征(称为属性),并定义这些对象间的关系。
处理建模:数据建模阶段定义的 数据对象变换成为要完成一个业务功能所需的信息流。创建处理描述以便增加、修改、删除或获取某个 数据对象
应用生成:RAD 假设使用第四代技术。RAD 过程不是采用传统的第三代 程序设计语言来创建软件,而是复用已有的程序 构件(如果可能的话)或是创建可复用的构件(如果需要的话)。在所有情况下,均使用自动化工具辅助软件建造。
测试及反复:因为RAD 过程强调复用,许多程序 构件已经是测试过的,这减少了测试时间。但新 构件必须测试,所有接口也必须测到。
RAD模型的不足之处:
1 对大型项目而言,RAD需要足够的人力资源。
2 开发者和客户都要实现承诺,否则将导致失败。
3 并非所有系统都适合:不能合理模块化的系统、高性能需求并且要调整 构件接口的系统均不适合。
4 不适合技术风险很高的情况
**演化软件工程(1.增量型 2.螺旋型):

 增量过程模型:
  这种模型融合了线性顺序模型的基本成份和原型实现模型的迭代特征。增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都做为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断从复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。

  缺点:

  1、至始至终开发者和客户纠缠在一起,直到完全版本出来。

  优点:

  1、人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。

  2、当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。

  3、具有一定的市场。

 螺旋过程模型:
  这是一个演化软件过程模型,它将原型实现的迭代特征和线性顺序模型中控制的和系统化的方面结合起来。使得软件的增量版本的快速开发成为可能。在螺旋模型中,软件开发是一系列的增量发布。在每一个迭代中,被开发系统的更加完善的版本逐步产生。螺旋模型被划分为若干框架活动,也称为任务区域。典型地,有3到6个任务区域:

  1、客户交流:建立开发者和客户之间有效通信所需要的任务。

  2、计划:定义资源、进度、及其它相关项目信息所需要的任务。

  3、风险分析:评估技术的及管理的风险所需要的任务。

  4、工程:建立应用的一个或多个表示说需要的任务。

  5、构造及发布:构造、测试、安装和提供用户支持所需要的任务。

  6、客户评估:基于对在工程阶段产生的或在安装阶段实现的软件表示的评估,获得客户反馈所需要的任务。

  这是一个相对较新的模型,它的功效还需要经历若干年的使用方能确定下来。

  缺点:

  1、需要相当的风险分析评估的专门技术,且成功依赖于这种技术。

  2、很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。

  3、这种模型相对比较新,应用不广泛,其功效需要进一步的验证。

  优点:

  1、对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。


***

***软件危机定义:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
***软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求;
如何维护数量不断膨胀的已有软件。
***软件危机的典型表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对“已完成的”软件系统不满意的现象经常发生。
(3) 软件产品的质量往往靠不住。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本在计算机系统总成本中所占的比例逐年上升。
(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
 
***软件工程的基本原理:严格管理,阶段评审、审查和brooks原则。

***软件工程方法学,三要素:方法、工具和过程。

***软件生命周期(概念、三时期,八阶段)
**软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成。
**软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
***快速原型:所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌
*
***瀑布模型
 特点
 阶段的顺序性和依赖性(规范化)
 推迟实现的观点(系统化)
 质量保证(阶段评审)
 存在问题
 不适合需求模糊的系统(需求的迷糊性和不确定性)
适用于操作系统、编译系统、数据库管理系统等系统软件的开发 
*
*** 可行性研究的目的:在明确了所要研究问题定义之后,分析员应该在明确目标系统所有限制和约束的前提下,去确定该问题是否值得去解决。

*

**可行性研究实质:
 技术可行性
 经济可行性
 社会可行性
 
***系统流程图的定义和作用:
可行性研究对现有系统做概括的物理模型描述,如用图形工具表示则更加直观简洁。系统流程图是描绘物理系统的传统工具,它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等)。系统流程图表达的是部件的信息流程,而不是对信息进行加工处理的控制过程。在可行性研究过程中,利用系统流程图来描述所建议系统的物理模型。
***数据流程图的组成:外部实体(外部实体是指系统之外的人或单位,它们和本系统有信息传递关系)数据流,处理、数据存储。
如何绘制数据流程图:
(1)识别系统的输入和输出,画出顶层图
(2)画系统内部的数据流、加工与文件,画出一级细化图
(3)加工的进一步分解,画出二级细化图
(4)其它注意事项
***数据流程图的定义和作用:数据流程图有两个特征:抽象性和概括性。
 抽象性指的是数据流程图把具体的组织机构、工作场所、物质流都去掉,只剩下信息和数据存储、流动、使用以及加工情况。
 概括性则是指数据流程图把系统对各种业务的处理过程联系起来考虑,形成一个总体
***数据字典
** 数据字典是在数据流程图的基础上,对数据流程图中的各个元素进行详细的定义与描述,起到对数据流程图进行补充说明的作用。 
** 数据字典的内容包括:数据项、数据结构、数据流、数据存贮、处理逻辑和外部实体。
***需求分析的任务:需求分析的主要任务不是确定系统如何完成它的具体工作,而是确定系统必须完成哪些工作,在用户的参与下提出目标系统的完整、准确、清晰、具体的实际要求,软件应完成的具体功能和性能,确定软件设计受到的限制及软件同其它系统的接口细节,描述软件用到的数据形式,逐步细化到详细定义,并为软件验收和质量评价提供依据
**如何做需求分析
*1.确定被开发系统的综合要求:系统分析员与用户共同讨论,澄清模糊要求,删除做不到的要求,改正错误的要求,确定具体的功能要求和性能要求。如:精确度要求,运行要求,软硬件限定条件要求,出错率限定要求,文件使用权限要求与读写保护要求,资源使用要求,运行维护成本消耗要求等;
*2.分析系统信息,抽象出系统的数据要求:通过系统的调查分析,由系统的信息流归纳、汇集,抽象出系统的数据模型(ER图),包括数据的组成元素、数据间的逻辑关系、数据的输入、输出、存储的形式及数据结构关系等;
*3.由描述的系统问题结构导出系统的目标逻辑模型:利用软件需求工具和数据流分析方法导出系统的目标逻辑模型(数据流程图)。如:利用结构化分析工具、数据流程图进行描述和表达;功能模型和行为模型
*根据系统实际需求审定和修正软件项目的开发计划:一般可由用户、开发方、专家组成的小组对项目预算、开发成本估计、计划安排、进度安排、人员和资源安排进行审定和修正,看其是否一致,是否符合软件的实际认定范围,确定出切实可行的开发计划;
*4.审定系统需求分析的正确性:利用原型、需求分析验证工具、或人工的方法进行审定;
*5.提交软件需求规格说明书,作为系统的开发和验收的依据。 
**需求分析的难点
*1.问题空间理解
*2.人与人之间的通信
*3.需求的不断变化
***ER图:可以把实体-联系图简称为ER图,相应地可把用ER图描绘的数据模型称为ER模型。
   ER图中包含了实体(即数据对象)、关系和属性等3种基本成分,通常用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。
***状态转换图:指明了作为外部事件结果的系统行为。为此,状态转换图描绘了系统的各种行为模式(称为“状态”)和在不同状态间转换的方式。状态转换图是行为建模的基础。

***设计原理分析(模块化,在模块化程序设计中,按功能划分模块的原则是,模块化和软件成本关系)

***模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求.
***衡量模块的独立性的标准是两个定性的度量标准:耦合性和内聚性。 
(1)耦合性。也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 
(2)内聚性。又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系得越紧密,则它的内聚性就越高。 
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
***
**详细设计
1、详细设计目的:对模块的算法设计和数据结构设计(设计出的处理过程应该尽可能简明易懂)
2、过程设计的工具,具体有那些:程序流程图,盒图(NS),PAD(问题分析图)图,判定表,判定树,过程设计语言(PDL)也称伪码
3、Jackson设计方法:
(1)分析并确定输入数据和输出数据的逻辑结果,并用Jackson图描绘这些数据结构.
(2)找出输入数据结构和输出数据结构中有对应关系的数据单元。
(3)从描绘数据结构的Jackson图导出描绘程序结构的Jackson图
(4)列出所有操作和条件(包括分支条件和循环结束条件),并且把他们分配到程序结构图的适当位置
(5)用伪代码表示程序
4、程序复杂程度的定量度量

**实现
1、实现定义: 通常把编码和测试统称为实现
2、软件测试定义: 为了发现程序中的错误而执行程序的过程
3、软件测试目标: 测试是为了发现程序中的错误而执行程序的过程
4、软件测试方法: 第一种方法是黑盒测试,第二种方法是白盒测试
5、软件测试步骤: 1单元测试(模块测试) 2.子系统测试3. 系统测试4. 验收测试5. 平行运行
5、软件测试和软件生命周期的关系:软件测试在软件生命周期中横跨两个阶段,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期的另一个独立的阶段。
6、白盒测试技术: 白盒测试时将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部的逻辑测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试。
7、测试用例: 输入的数据和预期的结果
8、黑盒测试技术: 黑盒测试时完全不考虑程序内部的结构和处理过程,只按照规格说明书的规定来检查程序是否符合它的功能要求。黑盒测试是在程序接口进行的测试,又称为功能测试。
9、软件可靠性分析: :软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件可靠性可以根据与技术系统可靠性接近的平行定义来表示。我们可以这样来定义软件可靠性:程序故障的频率和临界值。这里,故障是指在许可的运行条件下一个不可接受的结果或行为。同硬件一样,软件可靠性可以用错误出现和被纠正的速率来表示。
**维护
1、软件维护定义:就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程.
2、软件维护分类:改正性维护;适应性维护;完善性维护;预防性维护
3、为什么软件难维护:因为结构化维护与非结构化维护差别巨大;维护的代价高昂;维护的问题很多.
4、决定软件课维护性的因素:可理解性;可测试性;可修改性;可移植性;可重用性;
**面向对象方法学引论
1、为什么提出面向对象的方法:随着大型软件系统的出现,在中小型软件系统取得成功的传统的软件工程方法面临巨大的危机:
       1、软件生产率无法满足市场需求
       2、软件复用率不高
       3、软件维护困难    
       4、软件往往不能真正满足用户需求
2、面向对象方法学的优点:与人类习惯的思维方法一致;稳定性好;可重用性好;较易开发大型软件产品;可维护性好
3、面向对象的基本概念:对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体.
4、模型定义:模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
5、面向对象开发软件的三种模型以及关系::对象模型;动态模型;功能模型; 它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。关系:功能模型指明了系统应该”做什么”;动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;对象模型则定义了做事情的实体.
6、对象模型:描述系统数据结构
7、功能模型:描述系统控制结构
8、动态模型:描述系统功能
**面向对象分析
1、面向对象开发方法主要包括面向对象分析、面向对象设计和面向对象实现
2、00A的主要任务:是识别出问题域内的类与对象,并分析它们相互间的关系,最终建立起问题域的简洁,精确,可理解的正确模型.
3、OOA定义就是抽取和整理用户的需求并建立问题域精确模型的过程.
4、如何建立对象模型:确定类与对象;确定关联;划分主题;确定属性;识别集成关系.对象模型通常有5个层次:主题层;类与对象层;结构层;属性层;服务层
5、如何建立动态模型: 第一步,是编写典型交互行为的脚本
第二步,从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象,建立事件跟踪图。
第三步,排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们
6、如何建立功能模型: 功能模型由一组数据流图或一组用例图组成。
首先画出基本系统模型图(基本系统模型由若干个数据源点/终点,及一个处理框组成);然后画出功能级数据流图(把基本系统模型中单一的处理框分解成若干个处理框);最后描述处理框功能
**面向对象设计
1、面向对象设计定义:就是用面向对象观点建立求解域模型的过程.
2、设计准则:模块化;抽象;信息隐藏;弱耦合;强内聚;可重用.
3、启发规则:1设计结果应该清晰易懂;2一般-特殊结构的深度应适当;3设计简单的类;4使用简单的协议;5使用简单的服务;6把设计变动减至最小.
4、重用定义:也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用.广义的说1知识重用;2方法和标准的重用3软件成分的重用
6、软件成分的重用级别:1代码重用2设计结构重用3分析结构重用
7、系统分解:大多数系统的面向对象设计模型,在逻辑上都由4大部分组成,这4大部分对应于组成目标系统的4个子系统,它们分别是问题域子系统;人机交互子系统;任务管理子系统;数据管理子系统.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值