总软件工程复习大纲

发布 2021-05-13 17:34:28 阅读 7998

[记忆]软件工程层次(质量关注点、过程、方法、工具)(1.2)

软件工程是一种层次的技术,任何工程方法(包括软件工程)必须构建在质量的基础上。支持软件工程的根基在于质量关注点。

软件工程的基础是过程层,软件过程将各个技术层次结合在一起,使得合理,及时地开发计算机软件成为可能。过程定义了一个框架,构建该框架是有效实施软件工程技术必不可少的。

软件工程方法为构建软件提供技术上的解决方法,方法覆盖很广,包括沟通,需求分析,设计建模,编程,测试和技术支持。

软件工程工具为过程和方法提供自动化或半自动化的支持。

理解]软件神话(1.5)

软件神话,即关于软件及开发过程被人盲目相信的一些说法,可以追溯到计算技术发展的初期,神话具有一些特点,让人们觉得不可捉摸。

记忆]增量过程模型的思想(2.2.2)

运用增量模型的时候,第一个增量往往是核心产品,也就是,满足了基本的需求,但是许多附加的特性没有提供,客户使用该核心产品进行或者进行仔细的评价,并根据评价结果制定下一个增量的计划。增量模型侧重于每个增量都提交一个可以运行的产品。

记忆]演化过程模型中的原型开发的思想(2.2.3)

原型开发模型开始于沟通,软件开发人员和利益相关者进行会唔,定义软见的整体目标,明确已知的需求,并大致勾画出以后再进一步定义的东西。然后迅速策划一个原型并发迭代并进行建模。

记忆]统一过程(up)的阶段(2.4.2)

up的起始阶段——包括客户沟通和策划活动。通过与利益相关者合作定义软件的业务需求,提供系统大致的架构,并制定开发计划以保证项目开发具有迭代和增量的特性。

细化阶段——包括沟通和通用过程模型的建模活动。细化阶段扩展了初始阶段定义的用例,并扩展了体系结构以包括软件的五种视图—用例模型,需求模型,设计模型,实现模型和部署模型。

up的构建阶段——与通用软件过程中的构建活动相同。构建阶段采用体系结构模型作为输出,开发或是获取软件构件,使得最终用户能够操作用例。

up转换阶段——包括通用构建活动的后期阶段以及通用部署活动的第一部分。

up生产阶段——与通用过程部署活动一致。在该阶段,监控软件的持续使用,提供运行环境(基础设施)的支持,提交并评估缺陷报告和变更请求。

理解]敏捷原则(3.3.1)

1.我们最优先要做的是通过尽早,持续地交付有价值的软件来使客户满意。

2.即使在开发的后期,也欢迎需求变更。敏捷过程利用变更为客户创造竞争优势。

3.经常交付可运行软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。

4.在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。

5.围绕有积极性的个人构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。

6.在团队内部,最富有效果和效率的信息传递方法是面对面交谈。

7.可运行软件是进度的首要度量标准。

8.敏捷过程提倡可持续的开发速度。责任人,开发者和用户应该能够长期保持稳定的开发速度。

9.不断地关注优秀的技能和好的设计会增强敏捷能力。

10.简单(使不必做的工作最大化的艺术)是必要的。

11.最好的构架,需求和设计出自于自组织团队。

12.每隔一定的时间,团队会反省如何才能有效地工作,并相应调整自己的行为。

理解]极限编程(xp)中结对编程的思想。

xp编程活动的关键概念之一是结对编程。xp建议两个人面对同一台计算机共同为一个故事开发**。这一方案提供了实时解决问题和实时质量保证的机制,同时也使得开发者能集中精力于手头的问题。

记忆]需求工程过程中包含的7个活动(1起始:在项目起始阶段中,要建立基本的理解,包括对问题,谁需要解决方案,所期望解决方案的性质,与项目利益相关者何开发者和开发人员之间达成初步交流合作的效果。2导出:

3精化:在起始和导出阶段获得的信息将在精华阶段进行扩展和提炼。4协商:

通过协商过程来调解冲突。5规格说明:6确认:

对需求工程产品进行质量评估。7管理:用于帮助项目组在项目进展中标识,控制和跟踪需求以及需求变更的一组活动。

)理解]重构、信息隐藏、功能独立、抽象、求精等基本概念(7.3)

重构:一种重新组织的技术,可以简化构件的设计而无需改变其功能或行为。(fowler定义:

重构是一种方式改变软件系统的过程:不改变**的外部行为而是改进其内部结构)信息隐蔽:“特征:

每个模块对其他所有模块都隐藏自己的设计决策。即,模块应该规定并设计成为在模块中包含的信息不被不需要这些信息的其他模块访问。功能独立:

是关注点分离,模块化,抽象和信息隐蔽概念的直接产物。独立性可以通过两条定性的标准进行评估:内聚性和耦合性。

内聚性显示了某个模块相关功能的强度;耦合性显示了模块间的相互依赖性。抽象:过程抽象是指具有明确和有限功能的指令序列。

过程抽象的命名暗示了这些功能,但是隐藏了具体细节。数据抽象是描述数据对象的冠名数据集合。

求精:是一个细化的过程,该过程从高抽象级上定义的功能陈述(信息描述)开始。即,该陈述概念性地描述了功能或信息,但没有提供有有关功能内部的工作或信息内部的结构。

记忆]组织良好的设计类的4个特征的含义(7.3.12)

1完整性与充分性:设计类应完整地封装所有可以合理预见的存在于类中的属性和方法。充分性确保设计类只包含哪些“对实现这个类的目的足够“的方法,不多不少。

2原始性:和一个设计类相关的方法应该关注于实现类的某一个服务。一旦服务已经被某个方法实现,类就不应该再提供完成同一事情的另一方法。

3高内聚性:一个内聚的设计类具有小的集中的职责集合,并且专注于使用属性和方法来实现那些职责。

4低耦合性:在设计模型内,设计类之间相互协作是必然的,但是,协作应保持在一个可以接受的最小范围内。

理解]软件设计模型包含的元素(7.4)

1、 数据设计元素。

2、 体系结构设计元素。

3、 接口设计元素。

4、 构件级设计元素。

5、 部署级设计元素。

理解]常用的几种体系结构风格(1以数据为中心的体系结构数据存储驻留在这种体系结构中心,其它构件会经常访问该数据存储,并对存储中的数据进行更新,增加,删除或修改。

2数据流体系结构:当输入数据经过一系列的计算机构件和操作构件的变换形成输出数据时,可以应用这种体系结构。

3调用和返回体系结构:易于修改和扩展的抽象结构。4面向对象体系结构。5层次体系结构)

[理解]开闭原则、lisklv替换原则、依赖倒置原则、接口分离原则的含义(9.2.1)

开闭原则:1、对扩展开放,意味着有新的需求或变化时,可以对现有**进行扩展,以适应新的情况。2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。

liskov替换原则:其核心思想是:子类必须能够替换其基类。

这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。在父类和子类的具体行为中,必须严格把握继承层次中的关系和特征,将基类替换为子类,程序的行为不会发生任何变化。同时,这一约束反过来则是不成立的,子类可以替换基类,但是基类不一定能替换子类。

接口隔离原则:其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。

具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

接口有效地将细节和抽象隔离,体现了对抽象编程的一切好处,接口隔离强调接口的单一性。而胖接口存在明显的弊端,会导致实现的类型必须完全实现接口的所有方法、属性等;而某些时候,实现类型并非需要所有的接口定义,在设计上这是“浪费”,而且在实施上这会带来潜在的问题,对胖接口的修改将导致一连串的客户端程序需要修改,有时候这是一种灾难。在这种情况下,将胖接口分解为多个特点的定制化方法,使得客户端仅仅依赖于它们的实际调用的方法,从而解除了客户端不会依赖于它们不用的方法。

分离的手段主要有以下两种:1、委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。2、多重继承分离,通过接口多继承来实现客户的需求,这种方式是较好的。

依赖倒置原则:其核心思想是:依赖于抽象。

具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。我们知道,依赖一定会存在于类与类、模块与模块之间。当两个模块之间存在紧密的耦合关系时,最好的方法就是分离接口和实现:

在依赖之间定义一个抽象的接口使得高层模块调用接口,而底层模块实现接口的定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标。抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。依赖于抽象是一个通用的原则,而某些时候依赖于细节则是在所难免的,必须权衡在抽象和具体之间的取舍,方法不是一层不变的。

依赖于抽象,就是对接口编程,不要对实现编程。

理解]内聚性以及耦合性的不同类型和强弱排序.2.4)

1、功能内聚:主要通过操作来体现,当一个模块只完成某一组特定操作并返回结果时,就称此模块是功能内聚的。

2,、 分层内聚:由包、构件和类来体现。高层能够访问低层的服务,但低层不能访问高层的服务。

3、通信内聚:访问相同数据的所有操作被定义在一个类中。一般来说,这些类只着眼于数据的查询、访问和存储。

1、内容耦合:当一个构件“暗中修改其他构件的内部数据”时,就会发生这种类型的耦合。这违反了基本设计概念当中的信息隐蔽原则。

2、共用耦合:当大量的构件都要使用同一个全局变量是发生这种耦合。尽管有时候这样做是必要的,但是当这种耦合进行变更时,会导致不可控制的错误蔓延和不可预见的***。

3、控制耦合:当操作a调用操作b,并且向b传递控制标记时,就会发生这种耦合。

4、标记耦合:当类b被声明为类a某一操作中的一个参数类型时,就会发生这种耦合。

5、数据耦合:当操作需要传递长串的数据参数时,就会发生这种耦合。随着类和构件之间通信“带宽”的增长以及接口复杂性的增加,测试和维护就会越来越困难。

6、例程调用耦合:当一个操作调用另一个操作时,就会发生这种耦合。

软件工程复习大纲

1 软件工程定义,本质特性,出现背景。软件工程是指导计算机软件开发和维护的一门工程学科。软件工程是 把系统的 规范的 可度量的途径应用于软件开发 运行和维护过程,也就是把工程应用于软件 研究中提到的途径。本质特性 1 软件工程关注于大型程序的构造。2 软件工程的中心课题是控制复杂性。3 软件经常变化...

软件工程复习大纲

考试题型。名词解释 填空 简答题 应用题 分析 设计 测试等 重点内容。第1章软件与软件工程的概念。1.了解与软件相关的基本概念,包括软件 程序 数据 文档。2.了解软件危机的表现及发生的原因。3.掌握软件工程的概念。4.软件生命周期由哪三个时期组成,每个时期又可划分为哪些阶段?每个阶段的主要任务是...

软件工程复习大纲

软件工程概论复习大纲。一 选用教材 软件工程导论 张海藩清华大学出版社 第5版 课程负责人 马丽。授课教师 08 软件工程1 3班马丽。二 考试方法。一 考试方法 笔试,闭卷,满分100分。二 考试时间 110分钟。三 试卷结构 一 题型及分数比例。选择题20 填空题 10 判断题 10 简答题20...