软件工程教材知识点整理文档格式.docx
《软件工程教材知识点整理文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程教材知识点整理文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
(数据流图是逻辑系统的图形表示)
第二章软件项目计划
1、软件项目计划的目标就是提供一个框架,使管理者有能够对资源、成本、风险及进度进行合理的估算分析和调度,为软件工程过程提供管理依据。
项目计划一般由软件项目的管理员、系统分析员与用户经过“可行性研究后”共同制订,并在“需求分析”阶段确定软件系统的详细需求后定稿,随着项目的进展定期更新。
2、软件项目计划的主要内容:
风险分析、进度安排和项目组织。
3、风险分析活动:
风险标识(项目风险、技术风险和商业风险)、风险估计、风险评价和风险管理与监控。
4、进度安排方法:
PERT技术和Gantt图方法(看看书上的过程)。
5、小结:
由于经过风险分析,能够做到“知已知彼”(彼即风险),从而“百战不殆”,使得开发者能够战胜风险带来的损失,使项目成功。
进度安排的落空不仅会造成项目开发成本的提高,造成有形的经济损失,而且会使客户的不满意度、不信任度增加,造成无形的经济损失。
在软件开发过程中,人是最活跃的部分。
第三章需求分析
1、需求分析是指开发人员通过细致的调查分析,详细、准确和完整地理解用户需要什么样的软件,将用户非形式的需求陈述转化为完整的需求定义,再将需求定义转换到相应的需求规格说明的过程。
2、通常,把一整套的需求分析方法、技术和工具等的集合称为建模方法。
3、需求收集的方式:
访谈(程式化的访谈和非程式化的访谈);
问卷调查;
使用用例;
用户资料收集;
建立快速原型。
4、需求分析主要任务:
问题分析、需求描述、需求评审。
5、需求分析主要目的:
确定用户需要系统做什么。
6、需求规格说明:
需求分析的主要成果是得到需求规格说明(SRS)。
需求规格说明为用户、分析人员、设计人员和测试人员之间的理解和交流提供了方便,是系统设计、测试和验收的依据。
大量统计数字表明,软件系统中15%的错误起源于需求的错误。
一个有效的需求规格说明应具有如下特征:
正确性、无歧义性、完整性、一致性、可验证性、可理解性、可修改性、可追踪性和注释等。
需求分析说明书的作用:
①用户与开发人员之间的合同②概要设计的依据
③软件验收测试的依据。
数据流建模(功能建模)
7、数据流建模:
数据流建模方法是一种结构化分析方法(SA);
自顶向下、逐层分解地定义系统需求;
主要是利用数据流图(DFD)来对用户需求进行分析。
8、数据流图:
数据流图描述的是系统的逻辑模型,图中没有具体的物理元素,只是描绘信息在系统中的流动和处理情况。
9、数据流图的四种基本符号:
数据流(用箭头表示);
加工(加工一般用一个圆圈或圆角方框来表示);
数据存储(一般用开口的矩形框或双划线来表示);
数据的源点和终点(一般用正方形或立方体来表示)。
10、分层数据流图:
将数据流图分为顶层数据流图,中间层数据流图以及底层数据流图,可以避免一次引入过多的细节,有利于控制问题的复杂度,从而便于对大型系统描述的实现。
①顶层数据流图:
主要描述整个系统的作用范围,说明系统的边界,反映系统和外部环境之间的关系,即系统的输入和输出数据流。
顶层数据流图只有一张。
②中间层数据流图:
通过分解高层加工得到的,其中有些加工还需进一步分解。
③底层数据流图:
底层数据流图由一些不必再进行分解的加工组成。
11、数据流建模步骤:
原则上是由外向里、自顶向下去模拟问题的处理过程.
画顶层数据流图;
画分层数据流图;
用数据词典定义数据流图中的所有数据;
用加工说明描述数据流图中的基本加工。
12、数据词典:
又称数据字典,是关于数据信息的集合,是对数据流图中的每个数据,包括数据流和数据存储,进行严格定义的场所,以保持数据在系统中的一致性。
数据字典的作用:
①为用户与开发人员之间统一认识②作为概要设计的依据③便于需求分析阶段定义各类条目
13、加工说明:
数据流图中的“基本加工”由于没有进一步分解得到子图,因而需要加工说明来对其进行描述。
加工说明是描述基本加工如何把输入数据流变换成输出数据流的加工规则,是描述实现加工的策略而不是实现加工的细节。
IPO图、结构化语言(PDL,伪代码,是一种介于自然语言和形式语言之间的一种半形式语言)、判定表、判定树等均可作为加工说明的工具。
IDEF0图(功能建模)
14、IDEF0功能建模:
IDEF方法是一套用来对复杂系统进行建模分析和设计的系统方法:
IDEF0进行功能建模,IDEF1X用来建立数据模型,IDEF4方法则用于面向对象设计,等等。
15、IDEF0方法用严格的自顶向下、逐层分解的方式来构造系统的功能模型,用IDEF0图来描述。
IDEF0图:
只能反映系统做什么,系统功能由谁做,但不能反映系统如何做,因为盒子内部的结构如何无从得知。
16、IDEF0图:
也称为活动图形。
主要元素是简单的盒子及箭头。
盒子代表系统的功能(活动)。
箭头表示系统处理的数据约束,可以是具体的事物,也可以是抽象的信息。
IDEF0功能建模方法要求一张IDEF0图中的盒子最多只能有6个(子图形还要求不少于3个)。
17、IDEF0建模步骤:
IDEF0方法在详细的功能需求调研基础上,用严格的自顶向下、逐层分解的方式来进行;
确定建模的范围、观点及目的;
建立系统的内外关系图,即A-0图;
建立A0图的一系列子图;
书写文字说明。
(P49)
IDEF1X(数据建模)
18、IDEF1X数据建模:
IDEF1X方法是IDEF1方法的扩展版本。
IDEF1用来表示系统的信息结构和语义。
IDEF1X方法增强了图形的表达能力,丰富了语义和简化了开发过程。
19、IDEF1X图:
实体是具有相同属性或特征的现实或抽象事物的集合,这个集合中的一个元素便称为实体的一个实例。
在一张IDEF1X图中,一个实体只能在图中出现一次。
属性:
表示现实或抽象的事物一种特性或性质。
IDEF1X建模步骤:
0阶段——确定建模目标和计划;
1阶段——定义实体;
2阶段——定义联系;
3阶段——定义键;
4阶段——定义属性。
需求分析
(2)面向对象方法
1、UML建模语言:
是一种可以应用于任面向对象软件开发方法的标记法和语义语言。
2、UML各种图:
动态模型图(反映系统行为):
用例图、顺序图、协作图、状态图、活动图。
静态模型图(反映系统结构):
类图、包图、组件图、部署图、对象图。
3、UML特点:
统一了面向对象方法的基本概念(UML融合了Booch方法、OMT方法和OOSE方法中的有关概念);
具有更强的建模能力(正如G.Booch在他的一本书中所说:
“如果你有好的思想,那它也是我们的。
”);
独立于特定的开发语言和开发过程。
4、UML应用:
需求分析(用例图---功能的需求;
类图---静态结构;
状态图、顺序图和协作图等---类之间所需的协作,实现用例。
);
设计(定义软件系统中的技术细节用到的类,如引入处理用户交互的类、处理数据的类、处理通信和并行性的类等。
实现(组件图---代码组件的物理结构以及组件之间的关系;
部署图---硬件的拓扑结构和组件的分布。
测试(类图---单元测试;
组件图、协作图---集成测试;
用例图---确认测试)
第四章概要设计
1、软件设计:
需求分析:
软件系统必须“做什么”;
软件设计:
“如何做”才可以满足需求规格说明中规定的各项需求。
2、从工程管理的角度来看,软件设计通常分为两步,即概要设计和详细设计。
3、概要设计的基本目的是回答“概括地说,软件系统应如实现”这一问题。
因此,概要设计有时称为初步设计或总体设计。
概要设计的主要任务是确定软件的总体结构,即确定软件系统的组成成份(子系统或模块)以及各组成成份之间的相互关系。
方法:
结构化方法、面向对象方法。
详细设计是对概要设计结果的进一步细化,其主要任务是确定软件系统各组成成份内部的数据结构和算法过程。
4、抽象与求精:
抽象,即过程抽象、数据抽象和控制抽象。
抽象使得设计人员能够避开过早地陷入细节之中刻画过程和数据。
求精能够帮助设计人员随着设计过程的深入而不断呈现更低层次的信息。
5、模块化和信息隐藏:
软件应该分解成可单独命名的且可访问的部件,这些部件称为模块。
由Parnas倡导的“信息隐藏”是指模块中所包含的信息(包括数据和过程)对不需要这些信息的其它模块是不可访问的。
抽象有助于定义组成软件的过程(或信息)实体;
隐藏定义并加强了对模块内部访问的约束,有助于分离模块的实现者和使用者。
6、模块独立性:
模块独立性是模块化、抽象和信息隐藏的直接产物。
模块的功能独立性可以使得模块既容易开发又容易维护。
模块独立性有两个定性的度量标准:
内聚度和耦合度。
7、内聚度:
模块内部各成分联系紧密的程度。
内聚度越高,模块的独立性就越强。
内聚程度从高到低的顺序是:
功能内聚、信息内聚、通信内聚(数据相关—数据或标记耦合)、过程内聚(程序流程图;
过程相关---控制耦合)、时间内聚(初始化模块)、逻辑内聚和偶然内聚。
设计模块时,应该尽可能避免使用偶然内聚等低级内聚的模块,争取高级内聚的模块,以提高模块的独立性。
8、耦合度:
模块之间相互关联紧密的程度。
模块的耦合度越低,模块的独立性越强。
耦合程度从低到高也可分为七种:
非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
在设计模块时,应该尽量使用数据耦合,必要时使用标记耦合,少用控制耦合,限制使用公共耦合,最好不要使用内容耦合。
结构化设计方法
面向数据流图的软件结构设计
面向数据流图的设计方法是一种结构化设计方法。
过程:
首先,研究、分析和审查数据流图,确保数据流图符合实际,必要时还要进一步精化数据流图;
然后,确定数据流图的类型,即变换型数据流或事务型数据流;
再依据数据流图的类型采用变换分析法或事务分析法导出系统初始的软件结构;
最后,依据软件设计原理和一些优化策略改进系统初始的软件结构,形成最终的软件结构。
1、在结构化设计方法中,软件结构是软件系统模块层次结构,反映了整个系统功能及其之间的关系。
软件结构图的主要内容有:
模块、模块间的调用关系和模块之间传递的信息。
2、模块:
在软件系统的软件结构图中,有6种类型的模块:
传入模块、传出模块、变换模块、协调模块、源模块和漏模块。
在软件结构图中,模块用方框来表示,并用名字标识该方框。
3、调用关系:
在软件结构图中,模块间的调用关系主要有三种:
顺序调用、选择调用和循环调用。
方框之间的箭头表示模块之间的调用与被调用关系。
模块间调用的次序,习惯上是从左至右。
4、数据或控制信息:
在软件结构中,模块传递的信息用带名称的短线箭头来表示。
箭头方向代表信息传递的方向。
若箭头线尾是带空心圆圈,则表示该箭头线代表的是数据;
若箭头线尾是带实心圆圈,则表示该箭头线代表的是控制。
5、数据流变换分析法:
一种将变换型数据流图映射为变换型软件结构图的软件系统设计方法。
(P101)
6、数据流事务分析法:
是将事务型数据流图映射为事务型软件结构图的软件系统设计方法。
(P103)
7、软件结构图的改进:
模块大小适中、模块扇入扇出合理、模块的作用域应在控制域内。
模块的扇出是指模块直接调用多少其它模块。
模块的扇入是指共有多个模块直接调用本模块。
良好的软件结构图,上层模快(主要是控制模块)往往具有较高的扇出,底层的模块(主要是功能型模块)具有较高的扇入,呈两头小、中间大的清真寺状。
模块的作用域是指模块中判定的作用范围,它是指所有受这个判定影响的模块。
模块的控制域是指模块本身及其直接或间接调用的模块。
如果模块的作用域不在控制域之内,则会增加模块间数据的传递量,使模块之间出现控制耦合。
面向IDEF0图的软件结构设计
8、面向IDEF0图的软件结构设计是一种结构化设计方法,它以系统的功能模型和信息结构(数据)为基础设计系统的软件结构。
9、概要设计时,一般可按照IDEF0图的分解层次,逐层将其转换成软件结构。
面向对象设计模式
1、对象建模:
主要任务是了解某个特定应用问题域内所涉及的对象,以及各种各样的结构和通信关系。
介绍Coad/Yourdon面向对象分析方法来进行对象建模,在表示符号上采用UML建模语言提供的标记法。
2、确定对象&
类的方法:
三视图模型法(实体一关系模型、数据流模型、状态—迁移模型)。
3、面向对象设计是在对象建模的基础进行逐渐扩充的过程。
在对象建模中,是以问题域为中心,而面向对象设计要在软件系统环境,即解空间,解决对象建模中要完成的事情。
对象建模是以问题域为中心确定“做什么”,面向对象设计则以软件系统实现环境为中心确定“如何做”。
4、面向对象设计主要设计内容:
问题域部分设计、人机交互部分设计、任务管理部分设计、数据管理部分设计、系统交互部件的设计。
(P110)
5、面向对象设计模式是普通面向对象设计问题的解决方案,这类问题以一组交互类的形式出现,用户根据需要定制这些交互类以形成专门的设计。
作用:
设计模式不仅使人们可以更加方便地复用成功设计方案,提高软件的灵活性和可复用性,也能提高已有系统的文档管理和系统维护的有效性。
6、创建型模式:
创建型模式帮助系统独立于对象的产生、组合和表示。
作用:
一方面均将关于系统使用哪些具体的类的信息封装起来;
另一方面隐蔽了这些具体类的实例是如何被创建和放在一起的。
因此,创建型模式在“什么”被创建、“怎样”被创建、“谁”创建它以及“何时”创建等方面带来了很大的灵活性,有利于设计可复用的软件成分。
主要有两种:
工厂方法模式、抽象工厂模式。
结构型模式:
结构型模式涉及如何组合类和对象构成更大的结构。
一种方法是采用继承机制来组合接口或实现来形成更大的结构;
另一种方法通过对象组合方式对一些对象进行组合来形成。
由于对象组合可以在运行时刻改变,而继承机制为静态类组合,因而对象组合方式具有更大的灵活性。
适配器模式、组合模式。
行为型模式:
行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式。
这些模式刻划了在运行时难以跟踪的复杂的控制流。
行为型模式使设计者的注意力从控制流转移到对象间的联系方式上。
迭代器模式、观察者模式。
7、MVC框架中类的交互:
当用户进行一些输入动作后,控制器接收用户事件,并根据事件的类型来改变模型;
视图事先会在模型中登记,当模型数据发生改变时,马上通知已向此模型登记的每个视图,视图从模型中取得最新的数据并刷新自己。
概要设计文档
1、概要设计说明包括软件系统的基本处理流程、软件结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等。
概要设计说明为软件的详细设计提供了基础,也是系统集成测试的主要依据。
2、概要设计文档复审:
目的:
较早期地发现设计中存在的错误和缺陷。
参与者:
除开发人员外,必须要有用户代表参加,必要时还应邀请有关领域的专家参加。
内容:
重点在软件系统的总体结构、模块划分、内外接口以及人机界面上。
方式:
正式复审和非正式复审。
小结:
①概要设计是由软件结构设计、内外接口设计、数据逻辑结构设计和用户界面设计等活动组成,是将用户需求转化为计算机可实现的系统的一个重要步骤。
②面向数据流图的设计方法和面向IDEF0图的设计方法是两种常用的结构化设计方法,其特点是自顶向下,逐层细化。
③Coad/Yourdon方法在面向对象设计方法中比较系统的一种方法,其四个部分的设计实际是对面向对象分析模型在五个层次上扩充,扩充的内容实质也就是用户界面设计、内外接口设计、数据逻辑结构设计等方面的内容。
第五章详细设计
1、详细设计的目标与任务:
概要设计确定了软件系统的总体结构,详细设计则对概要设计结果进一步细化,给出目标系统的精确描述,以便在编码阶段直接翻译成计算机上能够运行的程序代码。
详细设计的任务:
算法过程的设计;
数据结构的设计;
数据库物理设计;
信息编码设计;
测试用例的设计;
编写“详细设计说明书”。
(主要任务:
确定软件系统各组成成份内部数据结构和算法过程)
2、详细设计图形描述工具:
详细设计中用于过程设计的图形工具,包括程序流程图、盒图、问题分析图和协作图。
3、Jackson程序设计方法是一种面向数据结构的结构化程序设计方法。
通过分析问题的输入、输出数据结构(用Jackson图表示)的对应关系,按一定的映射规则将其映射成软件的过程描述,用Jackson伪代码表示。
(P134)
4、Warnier程序设计方法:
LCP(逻辑构造程序)程序设计方法。
5、程序规格说明文档及复审:
又称详细设计说明,与概要设计说明相比,程序规格说明着重描述模块的细节,包括算法过程和数据结构。
如果软件系统比较简单,则可将程序规格说明并入概要设计说明中。
程序规格说明的复审类似于概要设计说明的复审,但重点在于各个模块的具体设计上。
小结:
详细设计是进行逻辑系统开发的最后一个阶段,其质量的好坏将直接影响到系统的编码实现。
合理选择和正确使用有关工具、深入理解和掌握有关设计思想和方法,对搞好详细设计是非常重要的。
结构化程序的详细设计与面向对象程序的详细设计有许多共性。
第六章软件测试
1、软件验证:
是通过检查和提供客观证据表明软件已经满足规定的需求,是确保软件质量和降低软件成本的重要手段,涉及软件的整个生存周期。
进行软件验证的方式大体有两种:
测试和证明。
测试又分静态测试和动态测试两种。
(静态测试,又称评审,是对软件进行的一种分析和检查活动。
动态测试是通过运行软件来检验其动态行为和运行结果的正确性。
)证明是一种通过形式化的数学方法来确保软件正确性的活动。
2、软件测试:
是在软件投入运行前,对软件需求分析、设计规格说明和编码的复审,是为了发现错误,通过检查和提供客观证据表明软件已经满足规定的需求。
软件测试是确保软件质量和降低软件成本的重要手段,涉及软件的整个生存周期。
软件测试就是试图以最少的代价发现软件分析、设计和编码中存在的各种不同类型的错误,从而提高软件质量,降低软件成本。
一般的软件开发组织要将30%~40%的项目精力投入到测试之中,一些人命悠关的软件(如航空器的飞行控制软件)其测试费用往往更高。
3、软件测试对象:
软件生存周期各阶段文档和代码。
4、测试与调试:
测试是查找错误症状的过程,调试则是查找错误症状原因并改正错误的过程。
针对测试中发现的错误进行改正,这便是调试的工作。
测试和调试往往交替进行。
5、软件测试的根本任务就是发现软件中存在的错误。
由于软件错误往往出现在软件的分析和设计中,而且错误发现越晚,改正错误的工作量也越大,因而在开发前期利用静态测试非常重要,而且发现错误的效率也往往比较高。
6、测试只能说明软件中存在错误,不能表明程序没有错误,因而任何软件经过测试后不能保证软件中不再存在错误。
白盒测试
白盒测试是一种以程序的内部逻辑结构为依据设计测试用例的方法,因而又称结构测试或玻璃盒测试。
合理的白盒测试就是要选取足够的测试用例,对源代码实行比较充分的覆盖,以便尽可能多地发现程序中的错误。
(原因:
穷举测试不合理)。
主要有两种方法:
一种称为逻辑覆盖法,另一种称为路径覆盖法。
除此外,对循环的测试,可采用循环覆盖法。
①逻辑覆盖:
语句覆盖,测试用例能使被测程序的每条执行语句至少执行一次;
判定覆盖:
测试用例能使被测程序中的每个判定至少取得一次“真”和一次“假”。
又称分支覆盖;
条件覆盖:
测试用例能使被测程序中每个判定的每个条件至少取得一次“真”和一次“假”。
如果判定中只有一个条件,则条件覆盖便满足判定覆盖,否则,不一定;
判定/条件覆盖:
测试用例既满足判定覆盖,又满足条件覆盖;
条件组合覆盖:
测试用例使每个判定中所有可能的条件取值组合至少执行一次。
其中语句覆盖最弱。
②基本路径覆盖法:
是在程序图的基础上,通过分析环形复杂性,导出基本路径集,然后设计测试用例使基本路径集中的每条路径至少经过一次。
独立路径:
包含一组以前从未被处理的语句或条件的一条路径。
③循环覆盖法:
逻辑覆盖法和基本路径覆盖法对于循环只进行了循环一次的测试,显然是不充分的。
而循环是大多数软件实现算法的关键部分,因此对循环的测试是十分重要的。
对于结构化程序而言,循环主要有三种:
简单循环、嵌套循环和串接循环。
黑盒测试
黑盒测试:
又称功能测试、数据驱动测试等,它将待测试对象看成是一个黑盒子,不考虑程序内部的逻辑结构和特性,只依据规格说明书检查程序的功能是否能正常使用。
通常,白盒测试用于测试的早期,而黑盒测试由于不需了解程序内部情况,因而被许多后期测试(如确认测试、系统测试)采用。
测试用例设计方法:
用黑盒测试发现程序中的错误,主要根据输入条件和输出条件确定测试数据,来检查程序是否能产生正确的输出。
进行黑盒测试,主要有下述几种方法:
等价分类法、边界值分析法、猜错法、因果图法。
等价分类法和边界值分析法通过选择有代表性的测试数据来暴露程序错误。
但不同类型不同特点的程序通常又有一些特殊的容易出错的情况。
并且,有时分别使用某些测试用例测试时程序工作正常,但其组合可能会使程序出错;
猜错法是根据经验和直觉设计测试用例,尽管能考虑到输入组合的情况,但显得不充分;
因果图法借助图形来设计测试用例,特别适用于被测程序具有多种输入条件,程序的输出又依赖于输入条件的各种组合的情况。
黑盒法综合策略:
首先用边界值分析法设计测试用例;
必要时用等价分类法补充测试用例;
必要时再用猜错法补充测试用例;
如果在程序的说明中含有输入条件的组合,宜在一开始末就采用因果法,然后再按上述