软件工程考试范围
1. 什么是软件?软件与硬件的区别?软件的特点?
软件的定义:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
软件与硬件的区别:
软件的特点:(1)软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性
(2)软件的生产与硬件不同,在它的开发过程中没有明显的制造过程
(3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题
2. 软件危机的定义、产生原因、如何消除?
软件危机定义:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 软件危机产生原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
如何消除软件危机:首先应该对计算机软件有一个正确的认识。
应该开发和使用更好的软件工具。
3. 软件生命周期定义、阶段划分、每个阶段任务、软件生命周期模型。
软件生命周期定义:软件生命周期由软件定义、软件开发和运行维护3个时期组成。
阶段划分:·软件定义时期通常进一步划分为3个阶段:问题定义、可行性研究、需求分析。 ·软件开发时期通常由下述4个阶段组成:概要设计、详细设计、编码和单元测试、 综合测试。
·运行维护时期一般不再进行进一步划分。
每个阶段任务:
·问题定义:问题定义阶段必须回答的关键问题是:“要解决的问题是什么”,明确软件干什么。
·可行性研究:这个阶段要回答的关键问题是:“上一个阶段所确定的问题是否有行得通的解决办法”。
·需求分析:(1)这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。
(2)这个阶段的另外一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明
·概要设计:(1)这个阶段的基本任务是,概括地回答“怎样实现目标系统? ”这个问题。
(2)概要设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。
·详细设计:详细设计阶段的任务就是把解法具体化,也就是回答“应该怎样具体地实现这个系统”这个关键问题。这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。 ·编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。 ·综合测试:这个阶段的关键任务是通过各种类型的测试(及相应的调试) 使软件达到预定的要求。
·软件维护:维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。
软件生命周期模型:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型
瀑布模型的特点:(1) 阶段间具有顺序性和依赖性
(2) 推迟实现的观点
(3) 质量保证的观点
每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。 瀑布模型的优点:(1)可强迫开发人员采用规范的方法(如结构化技术)
(2)严格规定了每个阶段必须提交的文档
(3)要求每个阶段交出的所有产品都必须经过质量保证小组的自习验证 瀑布模型的缺点:瀑布模型是由文档驱动的,这是它的特点,也是它的主要缺点。 快速原型模型、增量模型、螺旋模型、喷泉模型要会分辨。
4. 详细设计的基本任务,哪些工具用于详细设计、过程设计的分类。
详细设计的基本任务:详细设计阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。
过程设计工具的分类:图形、表格、语言。
过程设计的工具:程序流程图、盒图(N-S 图)、PAD 图、判定表、判定树、过程设计语言
5. 软件维护
软件维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。 软件维护的分类:改正性维护、适应性维护、完善性维护、预防性维护
需求分析是发现、求精、建模、规格说明和复审的过程。
6. 需求分析说明书的作用
· 描述用户的需求。
· 为软件设计工作奠定基础。
· 定义一组需求,一旦开发出软件产品之后,就可以用这组需求为标准来验收该产品。
7. 结构化分析(建模)、面向对向分析的任务。
结构化分析的任务:结构化分析就是一种建立模型的活动,通常建立数据模型、功能模型和行为模型3种模型。除了用分析模型表示软件需求之外,还要写出准确的软件需求规格说明。 面向对向分析的任务:抽取和整理用户需求并建立问题域精确模型。
8.E-R 图、数据流图、数据字典、用例图的相关知识。
·E-R 图又叫实体-关系图,是数据模型。数据模型包含3种相互关联的信息:数据对象、描述数据对象的属性及数据对象彼此间相互连接的关系。
数据对象:数据对象是对软件必须理解的复合信息的表示。
属性:属性定义了数据对象的性质。
关系:数据对象彼此之间相互连接的方式称为关系,也称为联系。(联系有一对一,一对多,多对多)
·数据流图:数据流图是一种图形化技术,它描绘信息流和数据流从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理元素,它只是描绘信息在软件中流动和被处理的情况。(功能模型)
·状态图:状态图中定义的状态主要有:初态(初始状态)、终态(最终状态)、中间状态。 在一张状态图中只能有一个初态,而终态则可以有0至多个。
初态用实心圆表示,终态用一对同心圆表示(内圆为实心圆),中间状态用圆角矩形表示。 在活动表中,经常使用下述3种标准事件:entry 、exit 、do 。entry 事件指定进入该状态的动作,exit 事件指定退出该状态的动作,而do 事件则指定在该状态下的动作。
·数据字典:数据字典是所有与系统相关的数据元素的有组织的列表,并且包含了对这些数据元素的精确、严格的定义,从而使得用户和系统分析员双方对输入、输出、存储的成分甚至中间计算结果有共同的理解。
用例图:p241
9. 白盒测试及其覆盖标准,黑盒测试
白盒测试:白盒测试法的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理的过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。白盒测试又称为结构测试。
白盒测试覆盖标准:
·语句覆盖:为了暴露程序中的错误,至少每个语句应该执行一次。(语句覆盖对程序的逻辑覆盖很少)
·判定覆盖(分支覆盖):不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。(满足判定覆盖的一定满足语句覆盖)
·条件覆盖:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。
·判定/条件覆盖:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。(既满足判定覆盖,也满足条件覆盖) ·条件组合覆盖:条件组合覆盖是更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。
黑盒测试:黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性,黑盒测试又称为功能测试。
黑盒测试方法:等价划分、边界值分析、错误推测。
10. 结构化设计的概念与原理、模块独立、启发规则。
模块:是由边界元素限定的相邻的程序元素(如数据说明,可执行的语句)的序列,而且有一个总体标识符来代表它。
模块化:是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
·模块独立:模块独立是模块化、抽象、逐步求精和信息隐藏等概念的直接结果,也是完成
模块的独立程度可以由两个定性标准来度量,这两个标准分别称为内聚和耦合。 耦合:是对一个软件结构内不同模块之间互连程度的度量。
尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。 内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。 (高内聚低耦合)
·启发规则:
(1)改进软件结构提高模块独立性 (2)模块规模应该适中
(3)深度、宽度、扇出和扇入都应适当 (4)模块的作用域应该在控制域之内
(5)力争降低模块接口的复杂程度 (6)设计单入口单出口的模块
(7)模块功能应该可以预测
11. 测试用例的相关知识、如何设计
测试单元类的方法主要有随即测试,划分测试,基于故障的测试等三种
12. 人机界面设计问题
(1)系统响应时间(两个重要属性:长度、易变性)
易变性:系统响应时间相对于平均响应时间的偏差。
(2)用户帮助设施:几乎交互式系统的每个用户都需要帮助。
(3)出错信息处理
(4)命令交互
13. 软件项目管理
软件项目管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以便在预定成本和期限内开发出符合客户需要的软件的过程。
14.UML 静态建模机制
UML 的静态建模机制:包括用例图、类图、对象图、包。
15原型
16. 面向对象的相关知识:类与对象,可重用性等
确定类与对象:1找出候选的类与对象 2筛选出正确的类与对象
选择面向对象语言时的因素:1将来能否占主导地位2可重用性 3类库和开发环境 4其他因素
提高可重用性的准则:1提高方法的内聚 2 减小方法的规模 3保持方法的一致性 4把策略与现实分开 5全面覆盖 6尽量不使用全局信息 7利用继承机制
17面向对象的测试方法:
1面向对象的单元测试 2面向对象的集成测试 3面向对象的确认测试
18面向对象语言的选择
选择编程语言的关键因素,是语言的一致的表达能力、可重用性及可维护性。从面向对象观点看来,能够更完整、更准确地表达问题域语义的面向对象语言的语法是非常重要的,因为这会带来下述几个重要优点:1. 一致的表示方法 2. 可重用;面向对象方法的一个主
3. 可维护性
选择面向对象语言时,还应着重考虑以下一些实际因素:
类库和
19面向对象分析的方法步骤:
面向对象分析的目的是对客观世界的系统进行建模。
系统分析的第一步是:陈述需求
系统分析的第二步是:建立对象模型首先标识和关联,因为它们影响了整体结构和解决问题的方法,其次是增加属性,进一步描述类和关联的基本网络,使用继承合并和组织类, 最后操作增加到类中去作为构造动态模型和功能模型的副产品。1. 确定类(1)找出候选的类与对象2. 准备数据字典3. 确定关联
系统分析第三步是:确定类属性 属性是对象的性质, 属性通常用修饰性的名词词组来表示 系统分析的第四步是:使用继承来细化类
系统分析的第五步是: 完善对象模型
系统分析的第六步是:建立动态模型
系统分析的第七步是:建立功能模型
系统分析的第八步是:确定操作(定义服务)
20面向对象设计:
面向对象设计准则:
模块化:对象就是模块。它把数据结构和操作这些数据方法紧密地结合在一起所构成的模块 抽象 :类实际上是一种抽象数据类型,某些面向对象的程序设计语言还支持参数化抽象。 信息隐藏 :在面向对象方法中,信息隐藏通过对象的封装性实现
弱耦合 :耦合主要指不同对象之间相互关联的紧密程度
强内聚:设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。 可重用:一是尽量使用已有的类,二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。
系统分解:大多数系统的面向对象的设计模型,在逻辑上都有4大部分组成。这四大部分组成目标系统的四个子系统:1问题域子系统 2人机交互子系统 3任务管理子系统 数据管理子系统