期末考试救命版
文末有思维导图
一、软件工程概述
软件与软件危机
1.软件发展经历三个阶段
程序设计阶段:50-60年代
程序系统阶段:60-70年代
软件工程阶段:70年代以后
2.软件概念
软件是计算机系统中与硬件相互依存的另一部分,它包括程序,数据以其相关文档的完整集合(软件=程序+数据+文档)
3.软件的特性
- 逻辑性:逻辑产品,不会磨损和老化
- 复杂性:规模大,运行复杂
- 设计开发:是设计开发而成的
- 易变性:需求经常变
- 缺陷的隐蔽性:缺陷隐藏在逻辑代码中
4.软件的分类
- 应用软件:服务对象——行业和领域应用的用户
- 系统软件:服务对象——各类应用软件
- 支撑软件:服务对象——软件开发者和维护者
5.软件危机
定义:软件在开发和维护过程中所遇到的一系列严重问题。
爆发时间:20世纪六十年代末(这时候提出了软件工程的概念)
主要表现:软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求
典型表现:
- 速度经常延迟
- 质量无法保证
- 成本超出预算
- 软件维护困难
- 失败风险很大
6.软件工程的目标
运用先进的软件开发技术和管理方法来提高软件的质量和生产率
也就是以较短的周期,较低的成本生产出高质量的软件产品,并最终实现软件的工业化生产
7.习题
1.软件是(程序+数据+文档)
2.软件是一种(逻辑)产品
3.软件工程学科出现的主要原因是(软件危机的出现)
4.软件危机:在计算机软件开发和维护过程中所遇到的一系列严重问题。
5.软件工程的基本目标是(开发高质量的软件)
6.软件是程序?(错)
7.开发软件是编程序(错)
8.软件会逐渐退化而不会磨损,其原因在于(不断的变更使组件接口之间引起错误)
9.大多数软件仍然是定制开发的,其原因在于(软件在不使用其他组件的情况下很容易构造出来)
软件的生存周期
1.软件定义
问题定义:弄清用户要解决什么问题
可行性研究:上阶段确定问题是否可行
需求分析:为解决这个问题,系统需要具备什么功能
2.软件开发
概要设计:建立目标软件系统总体结构
详细设计:细化概要设计所生成的各个模块,并详细描述模块内部细节
编码:根据详细设计规格说明书编写源程序
测试:测试软件系统是否满足需求
3.软件维护
运行维护:使软件在整个生命周期内保证满足用户需求
4.习题
1.软件生命周期的开发阶段包含(概要设计,详细设计,编码,测试)。
2.从工程管理的角度,软件设计分为(概要设计阶段,详细设计阶段)
软件工程方法概述
- 三要素:方法,工具和过程
- 传统方法:
- 也称为结构化方法,生命周期方法学,结构化范型
- 将软件生命周期全过程依次划分为若干个阶段,用结构化技术来完成每个阶段的任务
- 强调自顶向下顺序完成软件开发的各个阶段任务
- 要么面向行为,要么面向数据,缺乏是两者有机结合的机制
- 面向对象方法:
- 将数据和对数据的操作,紧密结合
- 在概念和表示方法上的一致性,保证各项开发活动之间的平滑过渡
- 对于大型,复杂及交互性比较强的系统更有优势
习题
1.用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为( CASE)工具。
二、软件生存期模型(了解各个模型特点)
软件过程:是为了获得高质量软件所需要完成的一系列任务框架。通常用软件生命周期模型来描述软件过程。
主要包括:
- 瀑布模型
- 阶段间具有顺序性和依赖性
- 优:强迫开发人员使用规范化的方法;每个阶段必须完成规定的文档;每个阶段结束前完成文档审查。
- 缺:需求确定后,无法及时验证需求是否正确、完整,可能不能真正满足用户的需求。
- 只适用于项目开始时需求已确定的情况
- 快速原型模型
- 优:有助于获取用户需求,加强对需求的理解;尽早发现软件中的错误,支持需求的动态变化
- 缺:准确原型设计困难,原型理解可能不同,不利于开发人员创新
- 适合于需求动态变化,事先难以确定系统
- 增量模型
- 优:短时间内可以提交完成部分功能,逐渐增加产品功能,用户适应快
- 缺:增量构件划分以及集成困难,容易退化为边做边改模型
- 比瀑布模型和快速原型模型更需要精心的设计
- 螺旋模型
- 每个阶段前增加了风险分析的快速原型模型
- 优:利于把软件质量作为软件开发目标,减少测试,维护和开发不分开
- 缺:风险估计困难
- 喷泉模型:
- 面向对象的软件过程模型,体现迭代和无缝的特性
- 统一过程:
- 阶段:初始,细化,构造,移交
- 基于构件的开发模型:
- 考虑的焦点是”集成“,而不是”实现“
- 敏捷过程:
- 特点:小,简,快,变
- 轻量级的软件开发
习题
1.软件开发的瀑布模型是(适用于需求被清晰定义的情况)
2.快速开发模型是(适用于客户需求难以清楚定义的情况)
3.软件开发的增量模型是(一种需要快速构造核心产品的好方法)
4.下面关于敏捷模型描述正确是()
A.与传统模型相比,敏捷模型属于自适应过程
B.可以应对需求的不断变化
C.Scrum模型,XP模型,DevOps模型等都属于敏捷模型
D.敏捷模型是预测型和迭代型的混合模型
5.软件过程的基本活动是(分析、设计、实现、测试、演化)
6.包括风险分析的软件工程模型是(螺旋模型 )。
7.软件开发过程是(软件开发活动的集合)
8.增量模型本质上是(线性顺序模型)
9.在结构化的瀑布模型中,哪一阶段定义的标准将成为软件测试系统测试阶段的目标。(需求分析阶段)
10.适合于面向对象方法学的软件生存周期模型是(喷泉模型)
11.软件开发中常采用的结构化生命周期方法,由于其特征而一般称为(瀑布模型)
三、需求分析
可行性研究
1.目的
用最小的代价在最小的时间内确定是否能够解决
2.实质
系统分析和设计过程的大大压缩和简化,在较高层次上以较为抽象的方式进行系统的分析和设计过程
3.过程
- 分析和澄清问题定义
- 导出系统的逻辑模型:数据流图+数据字典
- 根据逻辑模型探索若干种可供选择解法
- 研究每种解法可行性
- 经济可行性:经济效益是否大于开发成本
- 技术可行性:现有技术能否实现
- 操作可行性:系统操作方式是否可行
- 其他可行性:法律,社会效益
4.习题
1.下列哪个阶段属于问题定义时期( 可行性研究) 。
2.可行性分析是解决项目的( 做还是不做)问题。
软件需求分析阶段的任务
- 获取需求
- 需求分析
- 需求定义
- 需求验证
结构化分析方式
1.需求分析(结构化方法)
- 功能模型——DFD图(数据流图)
- 数据模型——ERD图(实体关系图)
- 行为模型——STD图(状态迁移图)
2.功能模型——数据流图(了解各个符号的意义)
描述输入数据到输出数据流的变换过程(逻辑过程)
简述使用数据流图进行需求分析的过程:
- 获取需求:了解当前洗头膏的工作流程,获取当前系统的物理模型
- 抽象出当前系统的逻辑模型,建立目标系统逻辑模型
- 做进一步的补充和优化
2.数据建模——ERD
使用实体—关系建模技术,来建立数据模型
3.行为建模——STD
通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。
4.习题
1.数据流图是用于表示软件模型的一种图示方法,在下列可采用的绘制方法中,()是常采用的。
A.自顶向下 B.自底向上 C.分层绘制 D.逐步求精
2.数据字典是对数据定义信息的集合,它所定义的对象都包含于(数据流图)
3.软件需求分析一般应确定的是用户对软件的(功能需求和非功能需求)。
4.数据流图是常用的进行软件需求分析的图形工具,其基本元素包括(加工、数据流、数据存储和外部实体 )
5.判定表和判定树是数据流图中用以描述加工的工具,它通常描述的对象是( 组合组件)
6.在E-R中包含基本成分(实体,联系,属性)
7.结构化分析主要描述手段(数据流图)
8.数据字典:对数据流图的补充描述。包括数据项、数据结构、外部项、
9.结构化分析方法是面向数据流进行需求分析的方法。使用数据流图和数据字典来描述
四、结构化设计方法
软件设计的概念
针对软件需求,综合考虑各种制约因素,探求可行的,尽可能最优的软件解决方案的过程。
是需求模型与实现代码之间的桥梁,是达成软件质量目标的关键阶段
软件设计的原则
-
分而治之
-
模块独立性:高内聚,低耦合
高内聚
低耦合
-
提高抽象层次
-
复用性设计
-
灵活性设计
结构化设计
是基于模块化,自顶向下细化,结构化程序设计等程序设计技术基础上发展起来的
体系结构设计
1.基于数据流方法的设计过程
过程驱动的设计方法,可以方便地将数据流图中表示的数据流映射成软件结构。
2.变换型映射方法
处理问题的工作过程:取得数据,变换数据和给出数据
结构图由:输入,中心变换和输出三部分组成
3.事务型映射方法
通常接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果
完成选择分派任务的部分,称为事务处理中心,或分派部件
4.习题
1.(变换型 )数据处理问题的工作过程大致分为三步,即取得数据、变换数据和给出数据。
2.下层模块被调用时对应的上级模块数目是( 扇入)。
3.衡量模块独立性的度量标准是模块的(内聚性和耦合性 )。
4.好的软件结构应该是(低耦合、高内聚 )。
5.软件设计阶段一般又可分为( 概要设计与详细设计)。
6.最强的内聚是(功能性内聚)
7.最弱的耦合是(非直接耦合)
8.结构化设计的阶段从技术角度一般可以分为(体系结构设计,接口设计,数据设计,过程设计)
9.确定软件的模块划分及模块之间的关系是(概要设计)阶段的任务。
10.什么是结构化设计? 结构化设计的原则?
基于数据流的设计方法可以方便地将数据流图表示的数据流映射成软件结构,是一种结构化的软件体系结构设计方法。
原则:
-
自顶向下逐步求精
-
单入口单出口
-
模块化
-
只含有三种基本控制结构:顺序、选择和循环
五、UML
面向对象概念
是软件工程学科的一种典型的分析系统,设计系统的思维方法,它以对象为中心,逐一地独立分析或设计系统每一对象的各种特性,达到系统分析与设计的目标。
面向对象=对象+类+继承+消息通道
面向对象的三个基本特征:封装,继承,多态
- 对象:对象的状态只能被自身的行为所改变
- 类:类是一种抽象数据类型,对象是类的实例
- 消息:是对象发出的服务请求
- 封装:信息隐蔽技术,对象内部的细节对用户是隐蔽的
- 继承:提供了表述不同类之间的共性的方法
- 多态:根据为请求提供服务的对象不同,可以得到不同的行为。
- 参数多态:不同类型参数
- 包含多态:同样的操作可用于一个类型及其子类型
- 过载多态:同名,但不同含义
- 强制多态:强制转换
面向对象设计准则
- 模块化
- 抽象
- 信息隐藏
- 弱耦合
- 强内聚
- 可重用
界面设计目标
- 简单性
- 一致性
- 确定性
- 健壮性
- 导航性
- 视觉吸引
习题
1.类的结构是(由属性,关系,操作来表示)
2.(过载)多态是一种特定的多态,指同一个名字在不同上下文中可代表不同的含义。
3.继承是父类与子类之间共享数据和方法的机制。以下关于继承的叙述中,正确的是()
A.一个父类可以有多个子类,这些子类都是父类的特例
B.父类描述了这些子类的巩固属性和操作
C.子类可以继承它的父类中的属性和操作而不必自己定义
D.子类中可以定义自己的新操作而不能定义和父类同名的操作。
4.通过执行对象的操作改变对象的属性,但它必须通过(消息)的传递
5.系统体系结构的最佳表示形式是一个可执行的软件原型。(×)
6.软件体系结构描述是不同项目相关人员之间进行沟通的使能器(√)
7.程序编译器的体系结构适合使用(仓库体系结构)。
8.网站系统是一个典型的(瘦客户机/服务器结构)
9.在分层体系结构中,(控制层)实现与实体对象相关的业务逻辑。
10.(设计模式)可以帮助人们简单方便地复用已经成功的设计或体系结构
11.(抽象工厂模型)用于封装具体的平台,从而使应用程序可以在不同的平台上运行
12.(观察者)设计模式能使一个对象的状态发送改变时通知所有依赖它的监听者。
13.适配器设计模式可以用于(将已有类的接口转换成和目标接口兼容)
14.用于为一个对象添加更多功能而不使用子类的是(装饰器)设计模式
15.在程序设计中应尽可能对程序代码进行优化(×)
16.不要修补不好的程序,要重新写(√)
17.高级语言源程序翻译成目标程序是(编译程序)
18.在对程序语言进行翻译的过程中,常采用一些与之等价的中间代码来表示形式。常用的中间代码包括()。
A.树 B.后缀式 C.四元式 D.正则式
19.编译正确的程序必然不包含语法错误。(√)
20.面向对象分析的关键是识别出(问题域内的类与对象)
21.面向对象的特征(封装、继承、多态)
22.面向对象分析和面向对象设计的区别是什么?
答: (1)面向对象分析的输入是用户的功能需求,输出是简单的、理性化的分析模型,此阶段的工作更多侧重于如何解决软件的功能需求
(2)面向对象设计的输入是面向对象分析的结果,输出最终的、细化后的设计模型,此阶段的共工作更多侧重于如何得到一个合适的、完整的解决方案。
23.面向对象的分析方法主要是建立三类模型,(对象模型,动态模型,功能模型)
UML:统一建模语言
特点:统一标志,面向对象,可视化,独立于过程,容易掌握使用,与编程语言的关系
uml基本模型由事务,关系,图组成
UML事务
结构事务
行为事务
分组事务
注释事务
UML的关系
依赖关系
依赖:一个事物发生变化会影响另一个事务的语义,用虚线箭头表示
关联关系
关联:描述两个或多个类的实例之间的连接关系,是一种特殊的依赖。
关联分为:普通关联,限定关联,关联类,以及聚合与复合
普通关联(二元关联):
普通关联(多元关联):
限定关联
关联类
聚合
复合聚合
泛化关系
泛化就是类的继承
普通泛化(单继承)
普通泛化(多重继承)
实现关系
UML的图
- 用例图
- 类图,对象图,包图
- 交互图(顺序图,通信图,交互概览图,时间图)
- 状态图
- 活动图
- 实现图(构件图,部署图)
习题
1.UML语言支持面向对象的主要概念,并与具体的开发过程相关。(×)
2.顺序图反映对象之间发送消息的时间顺序,它与(协作图)是同构的。
3.(用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现。
4.状态图包括(类的状态,状态之间的转换,类执行的动作,触发类的动作的事件)
5.面向对象分析,它是(系统需求建模的方法)
6.下列的()是分析建模的目的
A.定义可验证的软件需求 B.描述客户需求 C.开发一个简单的问题解决方案 D.建立软件设计的基础
7.下列的()不属于面向对象分析模型
A.用例图 B.类图 C.实体关系图 D.顺序图
8.分析类用于描述系统中概念层次的对象(√)
9.在分析类中,(控制类)用于描述一个用例所具有的事件流控制行为。
六、用例图
参与者与参与者 | 泛化关系 |
---|---|
参与者和用例 | 关联关系 |
用例与用例 | 包含,扩展,泛化关系 |
包含关系(include)
一个用例可以简单地包含其他用例具有行为,并把它所包含的用例行为作为自身行为的一部分。
扩展关系(extend)
一个用例可以被定义为基础用例的增量扩展
泛化关系(Generalization)
泛化,就是继承,一个用例可以被列举为一个或多个子用例
案例
1.建立用例模型的主要步骤是什么?
-
识别参与者
-
识别用例
-
创建用例
2.在uml各图中(用例图)是描述软件功能的
七、状态图
所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件发生后,对象的状态将发生变化。
状态图中定义的状态可能有:初态(初始状态),终态(最终状态),中间状态和复合状态
在一张状态图中只能有一个初态,而终态则可以有多个
中间状态
案例
包含事件说明
增加状态变量
八、活动图
活动图是一种描述用例活动(系统行为)的模型视图
活动图的组成
1.分叉与结合
2.分支与合并
分支:将转换路径分为多个部分,每一部分都是单独的监护条件和不同的结果
合并:两个或多个控制路径汇合情况
3.泳道
用于对活动职责进行组织(划分),将活动状态分为不同的组
案例
九、E-R图
十、判定表,判定树
判定树:
判定表:
十一、测试与维护
白盒测试:一种测试用例设计方法,利用作为构件级设计的一部分所描述的控制结构来生成测设用例
黑盒测试:也称功能测试,它是通过测试来检测每个功能是否都能正常使用。
习题
1、 三种最基本的控制结构(顺序结构、选择结构、循环结构)
2、 软件测试的策略(单元测试、组装测试、确认测试 、系统测试)
3、 没连入一个模块,只需对更新模块 (都进行回归测试)
4、软件工程要解决的核心问题(功能性、易用性、可靠性 、效率 、可维护性 、可移植性)
5、什么是软件维护?软件维护的分类。
软件维护:在软件运行/维护阶段对软件产品所进行的修改就是所谓的维护。
根据维护工作的性质分为以下四类:
(1)改正性维护 (2)适应性维护 (3)完善性维护 (4)预防性维护
6、白盒法技术测试用例的设计中(语句)是最弱的覆盖标准
7、程序的三种基本控制结构的共同特点是(只能一个入口和一个出口)
8、软件测试过程中的确认测试主要是为了发现(需求分析)阶段的错误。
9、软件维护工作的主要部分是(完善性维护)
10、软件需求规格说明的内容应包括(主要功能,用户界面以及运行环境,软件的性能)
11、软件生命周期中所花费最多的阶段是(维护阶段)
12、单元测试一般以白盒测试为主,黑盒测试为辅
13、大型软件测试包括单元测试,继承测试,确认测试,系统测试
14、软件项目管理涉及(人员,产品,过程,项目)