软件工程基本概念.docx
- 文档编号:8240196
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:16
- 大小:128.17KB
软件工程基本概念.docx
《软件工程基本概念.docx》由会员分享,可在线阅读,更多相关《软件工程基本概念.docx(16页珍藏版)》请在冰豆网上搜索。
软件工程基本概念
软件工程基本概念
考点1 软件的定义与软件特点
1软件的组成
软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和相关的文档。
软件由两部分组成:
(1)机器可执行的程序和数据;
(2)与软件开发、运行、维护及使用等有关的文档。
2软件的特点
软件具有如下特点:
(1)软件是逻辑产品,而不是物理实体,它具有无形性,通过计算机的执行才能体现它的功能和作用;
(2)没有明显的制作过程,其成本主要体现在软件的开发和研制上,可进行大量的复制;
(3)不存在磨损和消耗问题;
(4)软件的开发、运行对计算机系统具有依赖性;
(5)开发和维护成本高;
(6)软件开发涉及诸多社会因素。
3软件的分类
结合应用观点,软件可分应用软件、系统软件和支撑软件3类。
(1)应用软件是特定应用领域内专用的软件;
(2)系统软件居于计算机系统中最靠近硬件的一层,是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件;
(3)支撑软件介于系统软件和应用软件之间,是支援其他软件的开发与维护的软件。
4软件的作用
软件是用户与硬件之间的接口,是计算机系统的指挥者,是计算机系统结构设计的重要依据。
考点2 软件危机与软件工程
1软件危机
随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。
软件危机主要表现在:
(1)软件需求的增长得不到满足;
(2)软件开发成本和进度无法控制;
(3)软件质量难以保证;
(4)软件不可维护或维护程度非常低;
(5)软件成本不断提高;
(6)软件开发生产效率的提高赶不上硬件的发展和应用需求的增长。
总之,可以将软件危机归结为成本、质量和生产率等问题。
2软件工程的产生
国标(GB)中指出软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。
软件工程包括3个要素,即方法、工具和过程。
方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。
考点3 软件工程过程
ISO9000定义:
软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。
软件工程过程包含4种基本活动:
(l)软件规格说明P(Plan):
规定软件的功能及其运行机制;
(2)软件开发D(Do):
产生满足规格说明的软件;
(3)软件确认C(Check):
确认软件能够满足客户提出的要求;
(4)软件演进A(Action):
为满足客户的变更要求,软件必须在使用的过程中演进。
考点4 软件生命周期
软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。
在国家标准“计算机软件开发规范”中,把软件生命周期划分为三个阶段、八个子阶段,即定义阶段(可行性研究与计划、需求分析)、开发阶段(概要设计、详细设计、实现、综合测试、确认测试)、维护阶段(使用与维护),对每个阶段,都明确规定了该阶段的任务、实施方法、实施步骤和完成标志,其中特别规定了每个阶段需要产生的文档。
考点5 软件工程的目标与原则
1软件工程的目标
软件工程的目标是,在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性巨满足用户需求的产品。
软件工程研究的内容主要包括:
软件开发技术和软件工程管理。
(1)软件开发技术。
软件开发技术包括:
软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。
(2)软件工程管理包括软件管理学、软件工程经济学、软件心理学等内容。
2软件工程的原则
软件工程原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
(1)抽象。
抽象事物最基本的特性和行为,忽略非本质细节,采用分层次抽象,自顶向下,逐层细化的办法控制软件开发过程的复杂性。
(2)信息隐蔽。
采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单
(3)模块化。
模块是程序中相对独立的成分,一个独立的编程单位,应有良好的接口定义。
模块的大小要适中,模块过大会使模块内部的复杂性增加,不利于模块的理解和修改,也不利于模块的调试和重用;模块太小会导致整个系统表示过于复杂,不利于控制系统的复杂性。
(4)局部化。
要求在一个物理模块内集中逻辑上相互关联的计算资源,保证模块间具有松散的耦合关系,模块内部有较强的内聚性,这有助于控制系统的复杂性。
(5)确定性。
软件开发过程中所有概念的表达应是确定的、无歧义的且规范的这有助于入与入的交互,不会产生误解和遗漏,以保证整个开发工作的协调一致。
(6)一致性包括程序、数据和文档的整个软件系统的各模块应使用已知的概念、符号和术语;程序内外部接口应保持一致,系统规格说明与系统行为应保持一致。
(7)完备性。
软件系统不丢失任何重要成分,完全实现系统所需的功能:
(8)可验证性。
开发大型软件系统需要对系统自顶向下,逐层分解。
系统分解应遵循容易检查、测评、评审的原则,以确保系统的正确性。
考点6 软件开发工具与软件开发环境
(l)软件开发工具。
是协助开发入员进行软件开发活动所使用的软件或环境,它包括需求分析工具、设计工具、编码工具、排错工具、测试工具等。
(2)软件开发环境。
是指支持软件产品开发的软件系统,它由软件工具集和环境集成机制构成。
工具集包括支持软件开发相关过程、活动、任务的软件工具,以便对软件开发提供全面的支持。
环境集成机制为工具集成和软件开发、维护与管理提供统一的支持,它通常包括数据集成、控制集成和界面集成3个部分。
3.2 结构化分析方法
考点7 可行性研究
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
1经济可行性研究
分析系统的估算开发成本是否会超过项目预期的全部利润。
分析系统开发对其他产品或利润的影响。
2技术可行性研究
根据客户提出的系统功能、性能及现实系统的各项约束条件,从技术角度研究实现系统可行性。
3法律可行性分析
研究在系统开发过程中可能涉及的各种合同、侵权、责任以及同法律相抵触的问题。
4开发方式的选择性研究
提出并评价实现系统的各种开发方案,并从中选出一种最适宜项目的开发方案。
考点8 需求分析方法
1需求分析
软件需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。
需求分析的任务是发现需求、求精、建模和定义需求的过程。
(l)需求分析的定义。
IEEE软件工程标准词汇表对需求分析定义如下:
①用户解决问题或达到目标所需的条件或权能;
②系统或系统部件要满足合同、标准、规范或其他正式规定文档所具有的条件或权能;
③一种反映①或②所描述的条件或权能的文档说明。
(2)需求分析阶段的工作。
需求分析阶段的工作可概括为4个方面:
①需求获取;
②需求分析;
③编写需求规格说明书;
④需求审评。
2需求分析方法
(l)结构化分析方法。
主要包括面向数据流的结构化分析方法、面向数据结构的Jackson方法和面向数据结构的结构化数据系统开发方法
(2)面向对象的分析方法。
从需求分析建立的模型的特点来分,需求分析方法又分为静态分析方法和动态分析方法。
考点9 结构化分析方法
结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。
结构化分析方法(StructureAna1ysis,简称SA)是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。
考点10 结构化分析常用工具
1数据流图
数据流图即DFD图,它以图形的方式描绘数据在系统中流动和处理的过程,它只反映系统必须完成的逻辑功能,所以是一种功能模型。
见表3-1。
表3-1 数据流图的元素说明
2数据字典
数据字典是结构化分析方法的核心。
数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。
在数据字典的编制过程中,常使用定义式描述数据结构,见表3-2。
表3-2 数据字典定义式中出现的符号
考点11 软件需求规格说明书
软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。
(1)软件需求规格说明书有以下几个方面的作用。
①便于用户、开发人员进行理解和交流;
②反映出用户问题的结构,可以作为软件开发工作的基础和依据;
③作为确认测试和验收的依据。
(2)软件需求规格说明书有以下几个方面的内容。
①概述;
②数据描述;
③功能描述;
④性能描述;
⑤参考文献;
⑥附录。
(3)软件需求规格说明书有以下几个方面的特点。
①正确性;
②无歧义性;
③完整性;
④可验证性;
⑤一致性;
⑥可理解性;
⑦可修改性;
⑧可追踪性。
3.3结构化设计方法
考点12 软件设计的基本概念
1软件设计的基础
软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。
软件设计的重要性和地位概括为以下几点:
(l)软件开发阶段(设计、编码、测试)占软件项目开发总成本的绝大部分,是在软件开发中形成质量的关键环节;
(2)软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;
(3)软件设计做出的决策,最终影响软件实现的成败;
(4)设计是软件工程和软件维护的基础。
从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。
从工程管理角度来看,软件设计分两步完成:
概要(总体)设计和详细设计。
2软件设计的基本原理
(1)抽象。
抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其他细节。
(2)模块化.模块是指把一个待开发的软件分解成若千小的简单的部分。
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。
(3)信息隐蔽。
是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。
(4)模块独立性。
是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
模块的独立程度是评价设计好坏的重要度量标准。
衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。
内聚性是度量一个模块功能强度的一个相对指标,耦合性则用来度量模块之间的相互联系程度。
耦合可以分为下列几种,它们之间的耦合度由高到低排列:
内容耦合――若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。
公共耦合――若一组模块都访问同一全局数据结构,则称为公共耦合。
外部耦合――若一组模块都访问同一全局简单变量,则称为外部耦合。
控制耦合—一若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。
标记耦合――若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。
数据耦合――若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。
非直接耦合――若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。
内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。
内聚有如下种类,它们之间的内聚度由弱到强排列。
偶然内聚—指一个模块内的个处理元素之间没有任何联系。
逻辑内聚――这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成哪一种功能。
时间内聚――这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。
通信内聚――指它的所有功能都通过使用公用数据而发生关系。
顺序内聚――如果一个模块内各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,处理元素的输出数据作为下一个处理元素的输入数据,则称为顺序内聚。
功能内聚――是最强的一种内聚,它是指模块内所有元素共同完成一个功能,缺一不可,模块已不可能再分。
耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。
在程序结构中,各模块的内聚性越强,则耦合性越弱。
一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。
考点13 概要设计任务
概要设计的基本任务有4条:
(1)设计软件系统结构:
以模块为基础,影响软件质量及一些整体特性。
(2)数据结构和数据库设计:
对于大型数据处理的软件系统是重要的。
在概要设计阶段,数据结构设计宜采用抽象的数据类型,数据库设计对应于数据库的逻辑设计。
(3)编写概要设计文档:
编写概要设计说明书、数据库设计说明书、用户手册和修订测试计划。
(4)评审:
针对设计方案的可行性、正确性、有效性、一致性等。
软件结构图的基本图符如图3-2所示
图3-2 结构图的基本图符
软件结构图是软件系统的模块层次结构,反映了整个系统的功能实现。
软件结构图往往用网状或树状结构的图形来表示。
如图3-3所示。
图3-3结构图的基本形式
结构图的形态特征:
①深度(模块的层数);
②宽度(一层中最大的模块个数);
③扇出(一个模块直接调用下属模块的个数);
④扇入(一个模块直接上属模块的个数)。
经常使用的结构图有如图3-4所示的4种模块类型:
①传入模块;
②传出模块;
③变换模块;
④协调模块。
图3-44种模块类型
考点14 面向数据流的设计方法
1数据流的类型
数据流类型有两种:
变换型和事务型。
(1)变换流是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式,离开软系统。
变换型数据处理问题的工作过程大致分为3步,即取得数据、变换数据和输出数据,如图3-5所示。
图3-5 变换型数据流结构
变换型系统结构图由输入、中心变换和输出3部分组成,如图3-6所示。
图3-6 变换型数据流结构组成
(2)当信息沿输入通路到达一个处理,这个处理根据输入数据的类型从若干个动作序列中选择出一个来执行,这类数据流归为特殊的二类,称为事务流。
在一个事务流中,事务中心接收数据,分析每个事务以确定它的类型,根据事务类型选取一条活动通路。
如图3-7所示。
图3-7 事务型数据流结构
考点15 设计准则
设计准则包括如下几点:
(l)提高模块独立性;
(2)模块规模适中;
(3)深度、宽度、扇出和扇入适当;
(4)使模块的作用域在该模块的控制域内;
(5)应减少模块的接口和界面的复杂性;
(6)设计成单入口、单出口的模块;
(7)设计功能可预测的模块。
考点16 详细设计
详细设计主要确定每个模块具体执行过程,也称过程设计。
详细设计的结果基本上决定了最终的程序代码的质量。
详细设计的常用工具有:
(1)程序流程图、N一S、PAD(问题分析图)和HIPO;
(2)判定表;
(3)PDL(伪码)。
1程序流程图
程序流程图是一种传统的、应用广泛的、巨有争议的软件设计表示工具。
它用方框表示一个处理步骤,菱形代表一个逻辑条件,箭头表示控制流。
如图3-8所示。
图3-8 程序流程图基本图符
程序流程图的5种控制结构:
(1)顺序型;
(2)选择型;
(3)先判断重复型;
(4)后判断重复型;
(5)多分支选择型。
2N-S图
为了避免流程图在描述程序逻辑时的随意性与灵活性,1973年Nossi和Shneiderman提出了用方框图代替传统的程序流程图,引起了人们的重视,人们也把这种图称为N-S图。
方框图中仅含5种基本的控制结构,即顺序型、选择型、多分支选择型、WHILE重复型和UNTIL重复型。
如图3-10所示。
图3-10 N-S图的5种控制结构
在方框图中,每个处理步骤都是用一个盒子来表示的,这些处理步骤可以是语句或语句序列,在需要时,盒子中还可以嵌套另一个盒子,嵌套深度一般没有限制,只要整张图可以在一张纸上容纳下就行。
3PAD图
PAD是问题分析图(ProblemAnalysisDiagram)的英文缩写。
它是继流程图和方框图之后,由日本的二村良彦等人在1979年提出的又一种主要用于描述软件详细设计的图形表示下具。
与方框图一样,PAD也只能描述结构化程序允许使用的几种基本结构、PAD图的一个独特之处在于,以PAD为基础,遵循一个机械的规则就能方便地编写出程序,这个规则称为走树(freeWalk)。
PAD图的基本图符表示5种基本控制结构,如图3-11所示。
图3-11 PAD图图符构成的5种控制结构
4PDL
PDL又称伪码(Pseudo一code),它是一种非形式化的比较灵活的语一言,实际上PDL语言是对伪码的-种补充、它借助于某些高级程序语一言的控制结构和一些自然语言的嵌套。
一般说来,伪码的语法规则分成外语法和内语法外语法应当符合一般程序设计语言常用的程序语句的语法规则;而内语法是没有定义的,它可以用自然语言的一些简洁的句子、短语和通用的数学符号来描述程序应该执行的功能。
用PDL表示的基本控制结构的常用词汇如下:
顺序:
A/AEND
条件:
IF/THEN/ELSE/ENDIF
循环:
DOWHILE/ENDDO
循环:
REPEATUNTIL/ENDREPEAT
分支:
CASEOF,/WHEN/SELECT/WHEN/SELECT/ENDCASE
3.4 软件的测试
考点17 软件测试的目的和准则
1软件侧试的目的
(l)软件测试是为了发现错误而执行程序的过程;
(2)一个好的测试用例能够发现至今尚未发现的错误;
(3)一个成功的测试是发现了至今尚未发现的错误。
2软件测试的准则
(l)所有测试都应追溯到需求;
(2)严格执行测试计划,排除测试的随意性;
(3)充分注意测试中的群集现象;
(4)程序员应避免检查自己的程序;
(5)穷举测试不可能;
(6)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
考点18 软件测试技术与方法
测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。
软件测试是对软件规格说明、设计和编码的最后复审,所以软件测试贯穿在整个软件开发期的全过程。
测试是为了发现程序中的错误而执行程序的过程。
好的测试方案是尽可能地发现至今尚未发现的错误,显然,成功的测试是发现至今尚未发现的错误。
1静态测试与动态测试
(l)静态测试一般是指人工评审软件文档或程序,借以发现其中的错误。
由于被评审的文档或程序不必运行,所以称为静态的。
静态测试包括代码检查、静态结构分析、代码质量度量等。
(2)动态测试是指通常的上机测试,这种方法是使程序有控制地运行,并从多种角度观察程序运行时的行为,以发现其中的错误。
测试是否能够发现错误取决于测试实例的设计。
动态测试的设计测试实例方法一般有两类:
黑盒测试方法和白盒测试方法。
2白盒测试方法与测试用例设计
自盒测试法即结构测试,根据产品的内部工作过程,检查内部成分,以确认每种内部操作符合设计规范要求。
它将涉及程序设计风格、控制方法、源语句、数据库设计、编码细节。
使用白盒测试法需要了解程序内部的结构,此时的测试用例是根据程序的内部逻辑来设计的,如果想用白盒测试法发现程序中的所有错误,则至少必须使程序中每种可能的路径都执行一次。
白盒测试法主要有逻辑覆盖、基本路径测试等。
(l)逻辑覆盖测试。
泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。
通常所指的程序中的逻辑表示有判断、分支、条件等几种表示方式。
①语句覆盖。
语句覆盖是一个比较弱的测试标准,它的含义是,选择足够的测试实例,使得程序中的每个语句都能执行一次。
②路径覆盖。
执行足够的测试用例,使程序中所有的可能路径都至少经历一次。
③判定覆盖。
设计足够的测试实例,使得程序中的每个判定至少都获得一次“真值”和“假值”的机会。
判定覆盖要比语句覆盖严格,因为如果每个分支都执行过了,则每个语句也执行过了。
④条件覆盖。
对于每个判定中所包含的若干个条件,应设计足够多的测试实例,使得判定中的每个条件都取到“真”和“假”两个不同的结果。
条件覆盖通常比判定覆盖强,但也有的测试实例满足条件覆盖而不满足判定覆盖。
⑤判断一条件覆盖设计足够多的测试实例,使得判定中的每个条件都能取得各种可能的“真”和“假”值,并且使每个判定都能取到“真”和“假”两种结果。
(2)基本路径测试。
它的思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。
3黑盒测试方法与测试用例设计
黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例。
在使用黑盒测试法时,手头只需要有程序功能说明就可以了。
黑盒测试法分等价类划分法、边界值分析法和错误推测法。
(1)等价类划分法是一种典型的黑盒测试方法它是将程序的所有可能的输入数据划分成若干部分,然后从每个等价类中选取数据作为测试用例。
(2)边界值分析法。
是对各种输入、输出范围的边界情况设计测试用例的方法。
实践证明,程序往往在处理边缘情况时出错,因而检查边缘情况的测试实例查错率较高,这里边缘情况是指输入等价类或输出等价类的边界值。
(3)错误推测法。
测试人员也可以通过经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。
错误推测法在很大程度依靠直觉和经验进行,它的基本想法是列出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。
考点19 软件测试的实施
软件测试是保证软件质量的重要手段,软件测试是一个过程,其测试流程是该过程规定的程序,目的是使软件测试工作系统化
软件测试过程分4个步骤,即单元测试、集成测试、验收测试和系统测试.
1单元测试
单元测试是对软件设计的最小单位—模块(程序单元)进行正确性检验测试。
单元测试的目的是发现各模块内部可能存在的各种错误。
2集成测试
集成测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 基本概念