中国石油大学华东软件工程导论复习资料.docx

上传人:b****8 文档编号:27798254 上传时间:2023-07-05 格式:DOCX 页数:29 大小:1.14MB
下载 相关 举报
中国石油大学华东软件工程导论复习资料.docx_第1页
第1页 / 共29页
中国石油大学华东软件工程导论复习资料.docx_第2页
第2页 / 共29页
中国石油大学华东软件工程导论复习资料.docx_第3页
第3页 / 共29页
中国石油大学华东软件工程导论复习资料.docx_第4页
第4页 / 共29页
中国石油大学华东软件工程导论复习资料.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

中国石油大学华东软件工程导论复习资料.docx

《中国石油大学华东软件工程导论复习资料.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东软件工程导论复习资料.docx(29页珍藏版)》请在冰豆网上搜索。

中国石油大学华东软件工程导论复习资料.docx

中国石油大学华东软件工程导论复习资料

软件工程的定义:

◆传统定义

为了经济地获得可靠的和能在实际机器上有效运行的软件,确立并应用健全的工程原理

◆IEEE定义

软件工程是

.将系统的、规范的和可计量的方法应用于软件的开发、操作和维护,即将工程化应用于软件

软件的构成要素:

软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。

程序:

是按事先设计的功能和性能要求执行的指令序列;

数据:

是使程序能正常操纵信息的数据结构;

文档:

是与程序开发、维护和使用有关的图文材料。

软件的特点:

1.软件是一种逻辑实体,具有抽象性;

2.是开发的,而不是制造的

3.具有柔性

4.不磨损

软件工程的范围:

每个软件项目都是为某种商业需要而设计的

已经成为基于计算机的系统和产品演变过程中的关键因素

已经从专门问题的解决方案和分析信息的工具,转变为完整的结构良好的行业

涉及广泛的技术和应用领域,然而所有软件的演变都遵循着30多年来一成不变的规律

软件工程为构建高质量的软件提供基础框架

软件工程的三个要素是方法、工具、过程。

瀑布模型的特点:

1.阶段间具有顺序性和依赖性

2.推迟实现的观点

3.质量保证的观点

快速原型模型的特点:

◆快速原型模型先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。

◆快速实现和提交一个有限的版本,可以应付市场竞争的压力。

螺旋模型的特点:

◆对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;

◆减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;

◆更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。

◆螺旋模型的主要优势在于它是风险驱动的,但这也是其一个弱点,要求开发人员具有丰富的风险评估经验和这方面的专门知识。

螺旋模型主要适用于内部开发的大规模软件项目

增量模型的特点:

◆采用瀑布模型和快速原形模型等开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。

而增量模型则是一个构件接一个构件地提交,因此能在较短的时间内向用户提交可完成部分工作的产品;

◆逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品;

◆开发人员既要把软件看作一个整体,又要把它分解成合适的构件序列,每个构件本质上都独立于另一个构件,这一点较难做到

喷泉模型特征:

◆喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程

◆软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。

◆各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏

可行性分析考虑的方面:

技术,经济,操作,法律,时间,社会等;

可行性研究的步骤:

1、复查确认系统的目标规模,明确限制的约束

2、研究目前正在使用的系统

3、导出新系统的高层逻辑模型(conceptualdesign)

4、重新定义

5、导出和评价供选择的方案

6、推荐可行的方案

7、草拟开发计划(粗略)

8、编写可行性研究报告、审查、存档

需求分析的任务:

一、确定对系统的综合要求

二、分析系统的数据要求

三、导出系统的逻辑模型

四、修正系统开发计划

数据建模:

数据模型包括三种互相关联的信息:

数据对象,描述对象的属性,描述对象间相互连接的关系。

数据对象是对软件必须理解的复合信息的抽象。

所谓复合信息是指具有一系列不同性质或属性的事物,仅有单个值的事物不是数据对象。

由一组属性来定义的实体都可以被认为是数据对象。

属性定义了数据对象的性质。

必须把一个或多个属性定义为“标识符”,也就是说,当我们希望找到数据对象的一个实例时,用标识符属性作为“关键字”(通常简称为“键”)。

应该根据对所要解决的问题的理解,来确定特定数据对象的一组合适的属性。

数据建模

数据对象彼此之间相互连接的方式称为联系,也称为关系。

联系可分为以下3种类型:

(1)一对一联系(1∶1)

(2)一对多联系(1∶N)

(3)多对多联系(M∶N)

联系也可能有属性。

在需求分析阶段,通常使用E-R图(entity-relationshipdiagram)来建立数据模型,描述数据对象和它们之间的关系。

相应地可把用E-R图描绘的数据模型称为E-R模型。

E-R模型使用简单的图形符号表达系统分析员对问题域的理解,不熟悉计算机技术的用户也能理解它,因此,ER模型可以作为用户与分析员之间有效的交流工具。

E-R图中包含了实体(即数据对象)、关系和属性等3种基本成分。

通常用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。

例如,在教学管理中,一个教师可以教授零门、一门或多门课程,每位学生也需要学习几门课程。

因此,教学管理中涉及的数据对象(实体型)有学生、教师和课程。

数据流图

数据流图(DFD)是一种图形化技术,它描绘数据从输入移动到输出的过程中所经受的变换。

在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。

数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,是分析员与用户之间极好的通信工具。

设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。

数据流图的基本要点是描绘“做什么”而不考虑“怎样做”。

数据流图(DFD)中的主要图形元素

数据加工(数据变换)

数据源点或终点(外部实体)

数据流

数据存储

注意:

在数据流图中,应该描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件。

数据字典

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

数据流图描述了系统的“分解”;

依靠“词典”来说明各个成分的含义;

数据流图中所有名字的定义就构成一本词典;

数据字典和数据流图共同构成系统的逻辑模型。

只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明;

数据流图中出现的每一个数据流名、每一个文件名和每一个加工名在词典中都应该有一个条目给出这个名字的定义。

行为建模

行为建模给出需求分析方法的所有操作原则,但只有结构化分析方法的扩充版本才提供这种建模的符号。

状态转换图提供了行为建模机制。

状态转换图(简称为状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。

状态图还指明了作为特定事件的结果系统将做哪些动作。

1.状态

状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。

系统对事件的响应,既可以是做一个(或一系列)动作,也可以是仅仅改变系统本身的状态,还可以是既改变状态又做动作。

在状态图中定义的状态主要有:

初态(即初始状态)、终态(即最终状态)和中间状态。

在一张状态图中只能有一个初态,而终态则可以有0至多个。

2.事件

事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。

3.表示符号

在状态图中,初态用实心圆表示,终态用一对同心圆(内圆为实心圆)表示。

中间状态用圆角矩形表示,可以用两条水平横线把它分成上、中、下3个部分。

上面部分为状态的名称,这部分是必须有的;中间部分为状态变量的名字和值,这部分是可选的;下面部分是活动表,这部分也是可选的。

行为建模

活动表的语法格式如下:

事件名(参数表)/动作表达式

其中:

“事件名”可以是任何事件的名称。

在活动表中经常使用下述3种标准事件:

entry,exit和do。

entry事件指定进入该状态的动作,exit事件指定退出该状态的动作,而do事件则指定在该状态下的动作。

需要时可以为事件指定参数表。

活动表中的动作表达式描述应做的具体动作。

事件表达式的语法如下:

事件名(参数表)[守卫条件]/动作表达式

其中:

守卫条件是一个布尔表达式。

如果同时使用事件名(参数表)和守卫条件,则当且仅当事件发生且守卫条件的布尔表达式为真时,状态转换才发生。

如果只有守卫条件,没有事件名(参数表),则只要守卫条件为真状态转换就发生。

动作表达式是一个过程表达式,当状态转换开始时执行该表达式。

1、耦合

◆耦合是对一个软件结构内不同模块之间的互相连接的紧密程度的度量。

◆耦合强弱取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。

◆一般模块间可能的连接方式有7种,构成耦合性的7种类型:

(1)非直接耦合(NondirectCoupling)

▪两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。

▪非直接耦合的模块独立性最强。

(2)数据耦合(DataCoupling)

一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,称此为数据耦合。

数据耦合是松散的耦合,模块间的独立性比较强,在软件程序结构中至少必须有这种耦合。

(3)标记耦合(StampCoupling)

一组模块通过参数表传递记录信息,就是标记耦合。

这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。

在设计中应尽力避免这种耦合(但允许使用),它使在数据结构上的操作复杂化了。

(4)控制耦合(ControlCoupling)

⏹如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。

⏹控制耦合意味着控制模块必须知道所控制模块内的一些逻辑关系,这样会降低模块的独立性。

去除模块间控制耦合的方法

控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。

去除方法:

◆将被调用模块内的判定上移到调用模块中进行;

◆被调用模块分解成若干单一功能模块。

(5)外部耦合(ExternalCoupling)

⏹一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。

例如:

C语言程序中各个模块都访问被说明为extren类型的外部变量。

(6)公共耦合(CommonCoupling)

若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。

公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

只有在模块之间共享的数据很多,而且通过参数表传递不方便时,才使用公共耦合,否则,还是使用模块独立性比较高的数据耦合较好些。

这种耦合会引起下列问题:

⏹所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块;

⏹无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性;

⏹公共数据名的使用,明显降低了程序的可读性。

慎用公共数据区和全程变量!

!

!

公共耦合的复杂程度随耦合模块的个数增加而显著增加。

若只是两模块间有公共数据环境,则公共耦合有两种情况,即松散公共耦合和紧密公共耦合。

(7)内容耦合(ContentCoupling)

如果发生下列情形,两个模块之间就发生了内容耦合:

⏹一个模块直接访问另一个模块的内部数据;

⏹一个模块不通过正常入口转到另一模块内部;

⏹两个模块有一部分程序代码重迭;

⏹一个模块有多个入口。

模块独立性比较强的模块应是低耦合的模块。

耦合是影响软件复杂程度的一个重要因素。

应该采取下述设计原则:

尽量使用数据耦合,少用控制耦合和标记耦合,限制公共耦合的范围,完全不用内容耦合。

2、内聚

◆内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量;

◆内聚是信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度;

◆一般模块的内聚性分为七个类型:

(1)功能内聚(FunctionalCohesion)

一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。

则称该模块为功能内聚模块。

功能内聚模块的优点是模块的内聚程度最高,容易修改和维护,模块间的耦合是简单的。

(2)信息内聚(SequentialCohesion)

亦称顺序内聚,模块中所有处理元素和同一个功能密切相关,且这些处理必须顺序执行。

通常,信息内聚的模块,其前一成分的输出是后一成分的输入。

(3)通信内聚(CommunicationCohesion)

如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。

(4)过程内聚(ProceduralCohesion)

⏹如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。

⏹使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。

例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。

(5)时间内聚(ClassicalCohesion)

时间内聚又称为经典内聚。

这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。

例如初始化模块、终止模块、紧急故障处理模块等均是时间性聚合模块。

(6)逻辑内聚

(LogicalCohesion)

这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。

(7)巧合内聚

亦称偶然内聚

当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。

模块独立性比较强的模块应是高内聚的模块。

总体设计准则

1、改进软件结构,提高模块独立性

2、模块规模适中,功能单一

3、模块的深度、宽度、扇出和扇入

4、模块的作用域应该在控制域之内

5、力争降低模块接口的复杂程度

6、设计单入口单出口的模块

7、模块功能应该可以预测

过程设计

1.程序流程图也称为程序框图,有五种基本控制结构:

顺序型、先判断重复型、选择型、后判断重复型、多分支选择型

2.n-s图N-S图也叫做盒图

程序复杂程度的定量度量

程序复杂性主要指模块内程序的复杂性。

它直接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。

◆减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少。

一、代码行度量法

◆统计一个程序的源代码行数,以源程序行数作为程序复杂程度的量度,源程序代码行数越大认为越复杂。

◆源代码行数度量法基于两个前提:

􀂋程序复杂性随着程序规模的增加而均衡地增长;􀂋控制程序规模的方法最好是采用分而治之的办法。

将一个大程序分解成若干个简单的可理解的程序段。

二、McCabe度量法

◆McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂

度。

◆为了突出表示程序的控制流,通常使用流图(也称为程序图)。

所谓流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。

流图的表示:

◆在流图中用圆表示结点,一个圆代表一条或多条语句。

程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。

◆流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。

在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句(实际上相当于一个空语句)。

◆由边和结点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。

当过程设计中包含复合条件时,生成流图的方法稍微复杂一些。

所谓复合条件,就是在条件中包含了一个或多个布尔运算符。

在这种情况下,应该把复合条件分解为若干个简单条件,每个简单条件对应流图中一个结点。

包含条件的结点称为判定节点,从每个判定结点引出两条或多条边。

下图是由包含复合条件的PDL片断翻译成的流图。

计算环形复杂度的方法

可以用下述3种方法中的任何一种来计算环形复杂度:

(1)流图中的区域数等于环形复杂度。

(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中有向边的条数,N是结点数。

(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。

三、Halstead方法

采用程序中运算符和操作数的总数来度量程序复杂程度

(1)实际的Halstead长度:

N=N1+N2

N1:

为运算符出现的总次数。

N2:

为操作数出现的总次数。

在定义中,运算符包括:

算术运算符赋值符(=或:

=)

逻辑运算符分界符(,或;或:

关系运算符括号运算符

子程序调用符数组操作符

循环操作符等。

特别地,成对的运算符,例如

begin…end、if…then…else、for…to、

repeat…until、while…do、(…)

等都当做单一运算符。

运算对象包括变量名和常数。

(2)预测的Halstead长度公式:

H=n1log2n1+n2log2n2

n1:

为运算符的数量(不同类型)

n2:

为操作数的数量(不同类型)

H:

为预测程序长度。

(3)实践验证表明,预测长度与实际长度非常接近。

一、软件维护的类型

◆完善性维护(PerfectiveMaintenance)

扩充原有系统的功能,提高原有系统的性能,满

足用户的实际需要。

◆纠错性维护(CorrectiveMaintenance)

对在测试阶段未能发现的,在软件投入使用后才逐

渐暴露出来的错误的测试、诊断、定位、纠错以及

验证、修改的回归测试过程。

◆适应性维护(AdaptiveMaintenance)

要使运行的软件能适应运行环境的变动而修

改软件的过程。

◆预防性维护(PreventiveMaintenance)

为了进一步改善软件的可靠性和易维护性,

或者为将来的维护奠定更好的基础而对软件进

行修改。

软件测试方法分为两类:

白盒测试法、黑盒测试法

白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确的。

①语句覆盖:

选择足够的测试用例,使得程序中每个语句至少都能被执行一次。

②判定覆盖:

执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值。

③条件覆盖:

执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。

④判定/条件覆盖:

执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。

⑤条件组合覆盖:

执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。

例:

用白盒法测试以下程序段:

Procedure(VARA,B,X:

REAL);

BEGIN

IF(A>1)AND(B=0)

THENX:

=X/A;

IF(A=2)OR(X>1)

THENX:

=X+1

END;1)选择逻辑覆盖标准。

2)按照覆盖标准列出所有情况。

3选择确定测试用例。

4)验证分析运行结果与预期结果。

小结:

逻辑覆盖测试的5种标准

独立路径是指包括一组以前没有处理的语句或条件的一条路径。

用流图术语描述,一条独立路径是至少包含有一条在定义该路径之前不曾用过的边。

用于测试循环结构的有效性。

在结构化程序中,循环通常有三类:

简单循环

嵌套循环

串接循环

1.调试技术①输出存储器内容(memorydump):

以八进制或十六进制的形式印出存储器的内容。

缺点:

♦输出信息量极大,不易解读且大多无用;

♦输出的是程序在某一时刻的静态情况,且往往不是出错时的状态。

②插入“watchpoints”(或称“spypoints”)

缺点:

改动源代码,增加了出错机会;

打印信息有可能太多

自动调试工具——无须打印额外信息,且不改动源代码

2.调试策略。

主要有:

1试探法凭经验猜测

②回溯法:

由症状(symptom)最先出现的地方,沿controlflow向回检查。

适用于小型程序。

③对分法:

在关键点插入变量的正确值,则:

④归纳法:

从错误症状中找出规律,推断根源。

⑤演绎法:

普通→特殊

从假设中逐步排除、精化,从而导出错误根源。

7.5软件可靠性(Reliability)

♦可靠性(Reliability):

程序在给定的时间间隔内,按照说明书的规定,成功地运行的概率。

♦可用性(Usability):

程序在给定的时间点,按照说明书的规定,成功地运行的概率。

♦正确性(Correctness):

程序的功能正确。

设系统故障停机时间为td1,td2,…;正常运行时间为tu1,tu2,…;则系统的“稳态可用性”为

MTTF平均无故障时间MTTR平均维修时间

其中:

K为经验常数(典型值约在200左右);

ET为测试前故障总数;

IT为程序长度(机器指令总数);

τ为测试(包括调试)时间;

EC(τ)为时间从0至τ期间改正的错误数。

①ET/IT≈Constant(通常为0.5~2%)

2试中没有引入新故障(即ET与时间τ无关)

③MTTF与剩余故障成反比

意义:

可根据对软件平稳运行时间的要求,估算需改正多少个错误后才能结束测试。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1