软件工程重点知识doc.docx

上传人:b****6 文档编号:6985678 上传时间:2023-01-15 格式:DOCX 页数:22 大小:172.59KB
下载 相关 举报
软件工程重点知识doc.docx_第1页
第1页 / 共22页
软件工程重点知识doc.docx_第2页
第2页 / 共22页
软件工程重点知识doc.docx_第3页
第3页 / 共22页
软件工程重点知识doc.docx_第4页
第4页 / 共22页
软件工程重点知识doc.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

软件工程重点知识doc.docx

《软件工程重点知识doc.docx》由会员分享,可在线阅读,更多相关《软件工程重点知识doc.docx(22页珍藏版)》请在冰豆网上搜索。

软件工程重点知识doc.docx

软件工程重点知识doc

第1章软件工程学概述

1.1软件危机

概念:

指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

实际上,几乎所有软件都不同程度地存在这些问题。

原因:

1.与软件本身的特点有关。

1)软件不同于硬件,缺乏“可见性”,它是计算机系统的逻辑部件而不是物理部件。

2)软件不同于一般程序,规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。

2.与软件开发与维护的方法不正确有关。

1)忽视软件需求分析的重要性。

对用户要求没有完整准确的认识就匆忙着手编写程序。

2)认为软件开发就是写程序并设法使之运行。

3)在软件开发的不同阶段进行修改需要付出的代价是很不相同的。

4)轻视软件维护。

消除途径:

1.对计算机软件有正确的认识:

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

即Software=Program+Data+Document。

2.必须充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。

3.推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。

4.开发和使用更好的软件工具。

1.2软件工程

概念:

是指导计算机软件开发和维护的一门工程学科。

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

软件工程的本质特性:

1.软件工程关注于大型程序的构造;2.软件工程的中心课题是控制复杂性;3.软件经常变化;4.开发软件的效率非常重要;5.和谐地合作是软件开发的关键;6.软件必须有效地支持它的用户;7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。

软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。

软件工程方法学的3要素:

方法、工具和过程。

目前使用最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。

1.传统方法学也称为生命周期方法学或结构化范型。

结构化方法(StructureMethod)有:

1)结构化设计方法(SD);2)结构化分析方法(SA);3)结构化分析与设计技术(SADT);4)JACKSON方法;5)WARNIER方法。

2.面向对象方法学是把数据和对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程。

面向对象方法学4个要点:

对象(object)、类(class)、继承、消息。

1.3软件生命周期

软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时期又进一步划分成若干个阶段。

1.4软件工程过程

软件工程过程是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。

通常包括以下4类基本过程:

1.软件规格说明:

规定软件的功能及其运行环境。

2.软件开发:

产生满足规格说明的软件。

3.软件确认:

确认软件能够完成客户提出的要求。

4.软件演化:

为满足客户的变更要求,软件必须在使用的过程中演化。

软件开发模型是描述软件开发过程中各种活动如何执行的模型,又称为软件过程模型。

1.瀑布模型

传统瀑布模型实际瀑布模型

瀑布模型的特点:

1)阶段间具有顺序性和依赖性;2)推迟实现的观点;3)质量保证的观点。

瀑布模型的优点:

1)可强迫开发人员采用规范的方法;2)严格地规定了每个阶段必须提交的文档;3)要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

瀑布模型的缺点:

1)“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。

2)实际项目很少按照该模型给出的顺序进行;3)用户常常难以清楚地给出所有需求;4)用户必须有耐心,等到系统开发完成。

2.快速原型模型

快速原型(RapidPrototypeModel):

是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

快速原型模型的特点:

1)快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的。

2)快速原型的本质是“快速”。

应该尽可能快地建造出原型系统,以加速软件开发过程,节约成本。

原型模型存在的问题:

1)为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。

2)为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。

3)开发过程不便于管理。

3.增量模型

增量模型(IncrementalModel):

把软件产品作为一系列的增量构件来设计、编码、集成和测试。

每个构件由多个相互作用的模块构成,并且能够完成特定的功能。

增量模型的优点:

•人员分配灵活,刚开始不用投入大量人力资源。

•当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。

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

•增量模型的难点:

•软件体系结构必须是开放的。

•模型本身是自相矛盾的。

整体——独立构件。

•不同的构件并行地构建有可能加快工程进度,但是冒无法集成到一起的风险。

增量模型适用于:

•适用于需求经常改变的软件开发过程。

•如果在项目既定的商业要求期限之前不可能找到足够的开发人员,在这种情况下,增量模型显得特别有用。

4.螺旋模型

螺旋模型(SpiralModel):

使用原型及其他方法来尽量降低风险。

把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。

螺旋模型的优点:

•主要优势在于它是风险驱动的。

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

•减少了过多测试或测试不足所带来的风险;

•维护只是模型的另一个周期,维护和开发之间没有本质区别。

螺旋模型的缺点:

•采用螺旋模型需要软件开发人员具有相当丰富的风险评估经验和这方面的专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。

•过多的迭代次数会增加开发成本,延迟提交时间。

•螺旋模型适用于:

•特别适用于庞大、复杂并具有高风险的系统。

•适用于内部开发的大规模软件项目。

5.喷泉模型

喷泉模型(FountainModel):

是典型的面向对象生命周期模型。

“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。

为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程(例如,快速原型模型或图中的中心垂线)作为总目标。

喷泉模型的优点:

•该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。

•多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。

喷泉模型的缺点:

•由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理。

•要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

喷泉模型适用于:

•适用于面向对象的软件开发过程。

基于构件的开发模型:

•支持软件复用。

利用预先包装好的软件构件来构造应用系统。

形式化方法模型:

•形式化方法是建立在严格数学基础上的一种软件开发方法。

软件开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成、直至维护各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法。

6.Rational统一过程(RationalUnifiedProcess,RUP)

•RUP是一种迭代的,以架构为中心的,用例驱动的软件开发方法。

•RUP是一种具有明确定义和结构的软件工程过程。

•RUP还是一个过程产品,提供了可定制的软件工程的过程框架。

•RUP被广泛应用在不同工业领域中的不同企业中。

RUP总结了6条软件开发经验—最佳实践:

迭代式开发、管理需求、使用基于构件的体系结构、可视化建模、验证软件质量、控制软件变更。

7.敏捷过程与极限编程

价值观声明提出的软件过程统称为敏捷过程。

极限编程(eXtremeProgramming,XP):

•敏捷过程中最富盛名的一个;

•广泛适用于需求模糊且经常改变的场合;

•使得敏捷过程能够较好地适应商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。

微软过程模型

•每一个生命周期发布一个递进的版本,各生命周期持续快速地迭代循环;

•优点:

综合了Rational统一过程和敏捷过程的优点;

•缺点:

对方法、工具和产品等方面不够全面。

第2章可行性研究

可行性研究的目的:

用最小的代价在尽可能短的时间内确定问题是否能够解决。

(不是解决问题,而是确定问题是否值得去解决。

可行性研究的内容:

技术可行性、经济可行性、操作可行性和社会可行性

可行性研究过程包括:

1)复查系统规模和目标;2)研究目前正在使用的系统;3)导出新系统的高层逻辑模型;4)重新定义问题;5)导出和评价供选择的解法(物理解决方案);6)推荐行动方案;7)草拟开发计划;8)书写文档提交审查。

系统流程图是概括地描绘物理系统的传统工具。

它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。

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

数据流图的4种成分:

1)数据的源点/终点2)处理3)数据流4)数据存储

数据流图和(数据字典)共同组成系统的逻辑模型

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

没有数据字典数据流图就不严格,没有数据流图数据字典也难于发挥作用。

数据字典的组成:

1)数据流;2)数据流分量(即数据元素);3)数据存储;4)处理。

定义数据的方法:

对数据自顶向下分解。

数据组成方式:

顺序、选择、重复(三种基本类型)以及可选(附加类型)。

数据字典的用途:

1)作为分析阶段的重要工具;2)每个数据元素的控制信息给出了使用该元素的所有程序(或模块);3)有助于开发数据库,是开发数据库的第一步。

实现数据字典两种方式:

1)计算机程序处理;2)卡片式人工书写。

软件开发成本主要表现为人力资源的消耗。

成本估计不能用精确科学来估计。

成本估算技术包括:

1)代码行技术、2)任务分解技术、3)自动成本估计、4)算法模型估计。

成本/效益分析要估计开发成本、运行费用和新系统将带来的经济效益。

第3章需求分析

需求分析是软件定义时期的最后一个阶段,它的基本任务不是确定系统怎样完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。

需求分析的具体任务:

1)功能需求、2)性能需求、3)可靠性和可用性需求、4)出错处理需求、5)接口需求、6)约束、7)逆向需求、8)将来可能提出的要求。

需求获取方法:

用户访谈、面向数据流自顶向下求精、简易应用规格说明技术、快速建立软件原型、需求诱导方法。

结构化分析是面向数据流进行分析的方法,主要建立以下几种模型:

1)实体联系图(Entity-RelationshipDiagram,E-R图):

描述数据对象及数据对象之间的关系,是建立数据模型的基础,2)数据流图(DataFlowDiagram,DFD):

描绘数据在移动时的逻辑过程,是建立功能模型的基础;3)状态转换图(State-TransitionDiagram,STD):

描绘系统的状态和状态间转换的方式,是建立行为模型的基础。

需求分析过程需建立的3种模型分别是:

1)数据模型2)功能模型3)行为模型

结构化分折模型的组成结构

软件需求规格说明书,是需求分析阶段得出的最主要的文档。

ER图是用来建立数据模型的工具。

数据模型是一种面向问题的数据模型,包含3种相互关联的信息:

数据对象(实体)、数据对象的属性及数据对象彼此间相互连接的关系。

数据规范化:

通常用“范式(NormalForms)”定义消除数据冗余的程度。

第一范式(1NF)数据冗余程度最大,第五范式(5NF)数据冗余程度最小。

从实用角度看来,在大多数场合选用第三范式都比较恰当。

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

此外,状态图还指明了作为特定事件的结果系统将做哪些动作(例如,处理数据)。

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

状态规定了系统对事件的响应方式。

状态主要有:

初态(即初始状态),只能有1个;终态(即最终状态),可以有0至多个;中间状态

事件是引起系统做动作或(和)转换状态的控制信息。

验证软件需求的正确性,一般应从4个方面进行:

一致性、完整性、现实性和有效性。

第5章总体设计

软件设计的任务:

将分析阶段获得的需求说明转换为计算机中可实现的系统。

包括:

软件体系结构的设计、用户界面的设计、数据结构的设计、算法的设计。

软件设计的重要性:

是软件开发阶段的第一步,最终影响软件实现的成败和软件维护的难易程度。

软件设计的目标:

软件设计的目标就是构造一个高内聚、低耦合的软件模型。

从工程管理的角度:

可以将软件设计分为概要(总体)设计阶段和详细(过程)设计阶段。

从技术的角度:

传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计4部分。

面向对象方法:

将软件设计划分为体系结构设计、类设计/数据设计、接口设计和构件级设计4部分。

总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。

总体设计任务:

根据软件需求,设计软件系统结构和数据结构,确定程序的组成模块及模块之间的相互关系。

详细设计任务:

确定模块内部的算法和数据结构;选定某种过程的表达形式来描述各种算法;产生精确描述各模块程序过程的详细文档,并进行评审。

总体设计由两个主要阶段组成:

系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。

软件设计过程中应该遵循的基本原理包括:

模块化、抽象、逐步求精、信息隐藏和局部化、模块独立。

其中最主要的是模块独立原理。

模块的独立程度可以由两个定性标准度量:

耦合与内聚。

耦合衡量不同模块彼此间互相依赖(连接)的紧密程度,而内聚衡量一个模块内部各个元素彼此结合的紧密程度。

模块的耦合分四类:

1)数据耦合、2)控制耦合、3)公用耦合、4)内容耦合。

内聚:

偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、信息内聚、功能内聚

软件设计中应该:

力求做到高内聚,尽量少用中内聚,不用低内聚。

用来改进软件设计的启发式规则包括:

1)改进软件结构,提高模块独立性2)模块规模应该适中3)深度、宽度、扇出和扇入都应适当4)模块的作用域应该在控制域之内5)力争降低模块接口的复杂程度6)设计单入口、单出口的模块7)模块功能应该可以预测。

描述软件结构的图形工具包括:

层次图、HIPO图、结构图。

面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。

数据流有两种类型:

变换型数据流和事务型数据流。

具有较明确的输入、变换(或称主加工)和输出界面的数据流图称为变换型数据流图。

事务型数据流图中存在一个事务中心(也就是数据处理、加工中心),它将输入分离成若干个发散的数据流,形成许多活动路径,并根据输入值选择其中一条路径。

变换设计就是从变换型数据流图映射出软件模块结构的过程,也称以变换为中心的设计。

面向数据流设计软件结构的基本步骤有七步:

1)复审基本系统模型;2)复查并精化数据流图;3)确定数据流图具有变换特性还是事务特性;4)确定输入流和输出流的边界,从而孤立出变换中心;5)完成“第一级分解”;6)完成“第二级分解”;7)使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。

事务设计就是从事务型数据流图映射出软件模块结构的过程,也称为以事务为中心的设计。

事务设计的基本方法有两步:

1)建立主控模块、接收输入类型分析模块和事务调度模块;2)分别设计输入类型分析模块和调度模块的下层模块结构。

 

第六章

1.详细设计根本目标:

确定如何具体实现所要求的系统。

任务:

不是具体编写程序,而是设计程序的“蓝图”。

详细设计的结果决定最终程序代码的质量

2.结构程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。

经典的结构程序设计:

只允许使用顺序、IF_THEN_ELSE选择DO_WHILE循环。

3.设计人机界面过程中会遇到的4个问题:

系统响应时间、用户帮助设施、出错信息处理、命令交互

4.设计过程

5.过程设计的工具:

1)程序流程图:

是一种描述程序的控制结构流程和指令执行情况的有向图。

程序流程图的缺点:

(1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。

(2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。

(3)程序流程图不易表示数据结构。

2)盒图

特点:

(1)功能域明确,可以从盒图上一眼就看出来;

(2)不可能任意转移控制;

(3)很容易确定局部和全程数据的作用域;

(4)很容易表现嵌套关系,也可以表示模块层次结构

3)PAD图

它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易

特点:

(1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序;

(2)PAD图所描绘的程序结构十分清晰;

(3)用PAD图表现程序,通俗易懂,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点;

(4)容易将PAD图转换成高级语言源程序,这种转换可以用软件工具自动完成;

(5)可用于表示程序逻辑,也可用于描绘数据结构;

(6)PAD图的符号支持自顶向下、逐步求精的方法。

4)判定表

当算法中包含多重嵌套的条件选择时,用程序流程图、盒图、PAD图或后面即将介绍的过程设计语言(PDL)都不易清楚地描述判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。

5)判定树

判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。

6)过程设计语言(PDL)

过程设计语言(PDL)也称为伪码,它是用正文形式表示数据和处理过程的设计工具。

6.面向数据流的设计方法是根据数据流确定软件结构;面向数据结构的设计方法是根据数据结构设计程序处理过程,对程序处理过程进行描述。

通常面向数据结构的设计方法的设计步骤如下:

(1)画出系统中输入、输出数据对应的数据结构图。

(2)根据数据结构图,映射得到相应的程序结构图。

(3)按照程序结构图,分析得到程序的详细过程性描述。

在面向数据结构的设计方法中,最典型的代表是Jackson方法和Warnier方法

Jackson方法的特点:

优点:

1、适合于层次结构表达;

2、形象直观、可读性强;

3、同时表示数据结构和程序结构。

缺点:

不能直接在图上表示选择条件和循环结束条件。

影响了图的表达能力,也不易直接把图翻译成程序,此外,框间连线为斜线,不易在行式打印机上输出。

7.Jackson结构程序设计方法由五个步骤组成:

1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构;

2)找出输入数据结构和输出数据结构中有对应关系的数据单元;

3)用三条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图

A.为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框;

B.根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;

C.根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;

4)列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置;

5)用伪码表示程序。

第七章

1.通常把编码和测试统称为实现。

编码:

把软件设计结果翻译成面向对象方法学用某种程序设计语言书写的程序,是对设计的进一步具体化。

测试:

检测程序并改正错误的过程。

测试的目的:

在软件投入运行之前,尽可能发现软件中的错误,并改正错误。

选择一种编程语言的理论标准:

1)有理想的模块化机制;

2)可读性好的控制结构和数据结构;

3)便于调试和提高软件可靠性;

4)编译程序发现程序错误的能力强;

5)有良好的独立编译机制。

2.编码风格是指编程遵循的基本原则。

良好的编码风格有利于弥补语言的缺陷,编写出高质量的软件。

包括程序内部的文档、数据说明、语句构造、输入/输出、效率等方面的问题。

3.测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。

测试决不能证明软件是正确的,也不能证明错误的不存在,它只能证明错误的存在。

软件测试应贯穿于软件定义与开发的整个期间.

4.软件测试准则:

1)所有测试都应该能追溯到用户需求;

软件中的问题根源可能在开发前期的各阶段解决、纠正错误也必须追溯到前期工作。

2)应该远在测试前就制定出测试计划;

完成需求模型既可以着手制定测试计划,建立了设计模型之后就可以立即开始设计详细的测试方案。

因此,在编码之前就可以对所有测试工作进行计划和设计。

3)把Pareto原理应用到软件测试中

Pareto(帕雷特:

意大利经济学家)原则:

也称为80/20法则,即:

在众多现象中,80%的结果取决于20%的原因。

4)从“小规模”测试逐步进行“大规模”测试;

通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。

5)穷举测试是不可能的;

穷尽测试:

包含所有可能情况的测试称为穷尽测试。

6)为了达到最佳测试效果,应该由独立的第三方从事测试工作。

5.测试方法包括:

静态测试和动态测试

静态测试:

基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。

静态测试约可找出30~70%的逻辑设计错误。

动态测试:

通过运行软件来检验软件的动态行为和运行结果的正确性。

包括黑盒测试和白盒测试。

动态测试的两个基本要素:

被测试程序、测试数据(测试用例)。

动态测试方法:

(1)选取定义域有效值,或定义域外无效值;

(2)对已选取值决定预期的结果;

(3)用选取值执行程序;

(4)执行结果与预期的结果相比不吻合,则程序有错。

6.如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进称为白盒测试。

7.如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用称为黑盒测试。

黑盒测试技术包括:

等价划分、边界值分析、错误推测。

8.白盒测试的内容:

对程序模块的所有独立执行路径至少测试一次、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次、在循环的边界和运行边界内执行循环体、测试内部数据结构的有效性。

9.黑盒测试的内容:

Alpha/BetaTesting、菜单/帮助测试、发行测试、回归测试。

10.软

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

当前位置:首页 > 法律文书 > 判决书

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

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