软件工程基础
软件开发方法
- 结构化方法
- 将整个系统的开发过程分为若干阶段,然后依次进行,前一阶段是后一阶段的工作依据按顺序完成。
- 应用最广泛。
- 特点是注重开发过程的整体性和全局性。
- 缺点是开发周期长文档设计说明繁琐,工作效率低
- 开发前要求全面获取需求和所有变更,但这不现实。
- 原型法
- 基于对用户需求的初步理解,先快速开发一个原型系统,然后通过反复修改来实现用户的最终系统需求。
- 面向对象方法
- 用对象表示客观事物,对象是一个严格模块化的实体,在系统开发中可被共享和重复引用以达到复用的目的。
- 其特点是在整个开发过程中使用的是同一套工具。
- 面向对象方法主要涉及分析、设计、实现三个阶段。
- 敏捷方法
- 以人为核心、选代、循序新进的开发方法
- 适用于一开并没有或不能完整地确定出需求和范围的项目
- 或者需要应对迅速变化的环境,或者需求和范围难以事先确定,或者能够以有利于干系人的方式定义较小的增量改进。
软件开发模型
瀑布模型
该模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。
优点
瀑布模型的优点容易理解,管理成本低:强调开发的阶段性早期计划及需求调查和产 品测试。
不足之处
- 客户必须能够完整、正确和清晰地表达他们的需要
- 在开始的两个或 3 个阶段中,很难评估真正的进度状态
- 当接近项目结束时,出现了大量的集成和测试工作;
- 直到项目结束之前,都不能演示系统的能力。
在瀑布模型中,需求或设计中的错误往往只有到了 项目后期才能够被发现,对于项目风险的控制能力较弱,从而导致项目常常延期完成,开发费 用超出预算。
增量模型
该模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一 系列增量产品,每一个增量可以分别开发。该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的"增量"。当使用增量模型时,第一个增量往往是核心的产品。客户对每个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。
不足之处
增量模型有以下不足之处
- 如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定
- 如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布
- 管理发生的成本、进度和配置的复杂性可能会超出组织的能力。
演化模型
演化模型是迭代的过程模型,使得软件开发人员能够逐步开发出更完整的软件版本。演化模型特别适用于对软件需求缺乏准确认识的情况。典型的演化模型有原型模型和螺旋模型等。
原型方法
- 原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。原一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。当然能够采用原型方法是因为开发工具的快速发展,使得能够迅速地开发出一个让用户看得见、摸得着的系统框架。
螺旋模型
- 螺旋模型对于复杂的大型软件,开发一个原型往往达不到要求。
- 螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,每个螺旋周期分为如下 4 个工作步骤。
- 制订计划
- 确定软件的目标,选定实施方案,明确项目开发的限制条件。
- 风险分析
- 分析所选的方案,识别风险,消除风险。
- 实施工程
- 实施软件开发,验证阶段性产品。
- 用户评估
- 评价开发工作,提出修正建议,建立下一个周期的开发计划。
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,从而做 出应有的反应。因此,该模型特别适用于庞大、复杂并且具有高风险的系统。
喷泉模型
这是是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。
其优点是可以提高软件项目的开发效率,节省开发时间。由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理。此外,这种模型要求严格管理文档,使得审核的难度加大。
(5)统一过程(UP)模型
统一过程模型是一种"用例和风险驱动,以架构为中心,迭代并且增量"的开发过程,由 UML 方法和工具支持。
迭代的意思是将整个软件开发项目划分为许多个小的"袖珍项目",每统一过程定义了 4个技术阶段及其制品。
- 起始阶段 (InceptionPhase)
- 起始阶段专注于项目的初创活动
- 产生的主要工作产品有
- 构想文档(Vision Document)
- 初始用例模型
- 初始项目术语表
- 初始业务用例
- 初始风险评估
- 项目计划(阶段及迭代)
- 业条模型以及一个或多个原型(需要时)
- 精化阶段(ElaborationPhase)
- 该阶段在理解了最初的领域范围之后进行需求分析和架构演进
- 产生的主要工作产品有
- 用例模型
- 补充需求(包括非功能需求)
- 分析模型
- 软件体系结构描述
- 可执行的软件体系结构原型
- 初步的设计模型
- 修订的风险列表
- 项目计划(包括迭代计划、调整的工作流、里程碑和技术工作产品)以及初始用户手册
- 构建阶段(ConstructionPhase)
- 构建阶段关注系统的构建产生实现模型
- 产生的主要工作产品有
- 设计模型
- 软件构件
- 集成的软件增量、测试计划及步骤
- 测试用例以及支持文档(用户手册、安装手册和对于并发增量的描述)
- 移交阶段 (Transition Phase)
- 移交阶段关注于软件提交方面的工作,产生软件增量
- 产生的主要工作产品有
- 提交的软件增量,贝塔测试报告和综合用户反馈
题目
题目 1
某公司拟开发一个地面清洁机器人。机器人的控制者首先定义清洁任务和任务之间的关系,机器人接受任务后,需要响应外界环境中触发的一些突发事件,根据自身状态进行动态调整,最终自动完成任务。针对上述需求,该机器人应该采用( )架构风格最为合适。
A. 面向对象
B. 主程序---子程序
C. 规则系统
D. 管道---过滤器
题目 2
某公司拟开发一个语音识别系统,其语音识别的主要过程包括分割原始语音信号、识别音素、产生候选词、判定语法片断、提供语义解释等,每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。针对该系统的特点,采用( )架构风格最为合适。
A. 解释器
B. 面向对象
C. 黑板
D. 隐式调用
题目 3
某公司拟开发一个轿车巡航定速系统,系统需要持续测量车辆当前的实时速度,并根据设定的期望速度自动控制轿车的油门和刹车。针对上述需求,采用( )架构风格最为合适。
A. 解释器
B. 过程控制
C. 分层
D. 管道---过滤器
题目 4
某公司拟开发一套在线游戏系统,该系统的设计目标之一是支持用户自行定义游戏对象的属性、行为和对象之间的交互关系。为了实现上述目标,公司应该采用( )架构风格最为合适。
A. 管道---过滤器
B. 隐式调用
C. 主程序---子程序
D. 解释器
题目 5
某公司为其研发的硬件产品设计实现了一种特定的编程语言,为了方便开发者进行软件开发,公司拟开发一套针对该编程语言的集成开发环境,包括代码编辑、语法高亮、代码编译、运行调试等功能。针对上述描述,该集成开发环境应采用( )架构风格最为合适。
A. 管道---过滤器
B. 数据仓储
C. 主程序---子程序
D. 解释器
题目 6
软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和(请作答此空),并通过多种( )_全面描述特定系统的架构。
A. 实现方式
B. 交互作用
C. 设计方案
D. 测试方式
题目 7
A. 对象
B. 代码
C. 文档
D. 视图
题目 8
某公司拟开发一个 VIP 管理系统,系统需要根据不同商场活动,不定期更新 VIP 会员的审核标准和 VIP 折扣标准。针对上述需求,采用( )架构风格最为合适。
A. 规则系统
B. 过程控制
C. 分层
D. 管道-过滤器
题目 9
以下关于软件架构设计重要性的描述,()是错误的。
A. 软件架构设计能够满足系统的性能、安全性、可维护性等品质
B. 软件架构设计能够帮助项目干系人(Stakeholder)更好地理解软件结构
C. 软件架构设计能够帮助架构师更好地捕获和细化系统需求
D. 软件架构设计能够有效地管理系统的复杂性,并降低系统维护费用
题目 10
某公司拟开发一个新闻系统,该系统可根据用户的注册兴趣,向用户推送其感兴趣的新闻内容,该系统应该采用( ) 架构风格最为合适。
A. 事件驱动系统
B. 主程序-子程序
C. 黑板
D. 管道-过滤器
带解析版
题目 4
某公司拟开发一个地面清洁机器人。机器人的控制者首先定义清洁任务和任务之间的关系,机器人接受任务后,需要响应外界环境中触发的一些突发事件,根据自身状态进行动态调整,最终自动完成任务。针对上述需求,该机器人应该采用( )架构风格最为合适。
A. 面向对象
B. 主程序---子程序
C. 规则系统
D. 管道---过滤器
正确答案:正确答案: C
解析:
机器人需要根据自身状态的外界环境进行自动调整,这是一个典型的根据外部事件进行响应的场景。比较4个候选项,规则系统比较适合根据外部事件,以自身状态为基础自动进行处理和动作的场景。
题目 5
某公司拟开发一个语音识别系统,其语音识别的主要过程包括分割原始语音信号、识别音素、产生候选词、判定语法片断、提供语义解释等,每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。针对该系统的特点,采用( )架构风格最为合适。
A. 解释器
B. 面向对象
C. 黑板
D. 隐式调用
正确答案:正确答案: C
解析:
根据题目描述,语音识别系统是一个十分典型的专家系统,其特点是求解的正确结果不止一个,求解过程比较复杂,需要通过专家知识和反馈逐步得到正确结果。因此对比4个候选项,黑板结构特别适合求解这类问题。
题目 6
某公司拟开发一个轿车巡航定速系统,系统需要持续测量车辆当前的实时速度,并根据设定的期望速度自动控制轿车的油门和刹车。针对上述需求,采用( )架构风格最为合适。
A. 解释器
B. 过程控制
C. 分层
D. 管道---过滤器
正确答案:正确答案: B
解析:
根据题目描述,轿车巡航定速系统是一个十分典型的控制系统,其特点是不断采集系统当前状态,与系统中的设定状态进行对比,并通过将当前状态与设定状态进行对比从而进行控制
题目 7
某公司拟开发一套在线游戏系统,该系统的设计目标之一是支持用户自行定义游戏对象的属性、行为和对象之间的交互关系。为了实现上述目标,公司应该采用( )架构风格最为合适。
A. 管道---过滤器
B. 隐式调用
C. 主程序---子程序
D. 解释器
正确答案:正确答案: D
解析:
该软件系统特别强调用户定义系统中对象的关系和行为这一特性,这需要在软件架构层面提供一种运行时的系统行为定义与改变的能力,根据常见架构风格的特点和适用环境,可以知道最合适的架构设计风格应该是解释器风格
题目 8
某公司为其研发的硬件产品设计实现了一种特定的编程语言,为了方便开发者进行软件开发,公司拟开发一套针对该编程语言的集成开发环境,包括代码编辑、语法高亮、代码编译、运行调试等功能。针对上述描述,该集成开发环境应采用( )架构风格最为合适。
A. 管道---过滤器
B. 数据仓储
C. 主程序---子程序
D. 解释器
正确答案:正确答案: B
解析:
编程语言的集成开发环境需要提供代码编辑、语法高亮、代码编译、运行调试等功能,这些功能的特点是以软件代码为中心进行对应的编译处理与辅助操作。根据常见架构风格的特点和适用环境,可以知道最合适的架构设计风格应该是数据仓库风格。
题目 9
软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和(请作答此空),并通过多种( )_全面描述特定系统的架构。
A. 实现方式
B. 交互作用
C. 设计方案
D. 测试方式
正确答案:正确答案: B
解析:
软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构。
题目 10
A. 对象
B. 代码
C. 文档
D. 视图
正确答案:正确答案: D
解析:
软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构。
题目 11
某公司拟开发一个 VIP 管理系统,系统需要根据不同商场活动,不定期更新 VIP 会员的审核标准和 VIP 折扣标准。针对上述需求,采用( )架构风格最为合适。
A. 规则系统
B. 过程控制
C. 分层
D. 管道-过滤器
正确答案:正确答案: A
解析:
根据题目中描述,VIP管理系统会根据不同商场活动,不定期更新VIP会员的审核标准和折扣标准,属于典型规则系统应用场景。
题目 12
以下关于软件架构设计重要性的描述,()是错误的。
A. 软件架构设计能够满足系统的性能、安全性、可维护性等品质
B. 软件架构设计能够帮助项目干系人(Stakeholder)更好地理解软件结构
C. 软件架构设计能够帮助架构师更好地捕获和细化系统需求
D. 软件架构设计能够有效地管理系统的复杂性,并降低系统维护费用
正确答案:正确答案: C
解析:
软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。软件架构设计能够满足系统的性能、安全性、可维护性等品质;软件架构设计能够帮助项目干系人(Stakeholder)更好地理解软件结构;软件架构设计能够有效地管理系统的复杂性,并降低系统维护费用;软件架构设计对系统开发具有指导性;软件架构设计为系统复用奠定的基础;软件架构设计能够支持冲突分析。需要注意的是,软件架构设计与系统需求是直交的,两者并无必然联系。
题目 13
某公司拟开发一个新闻系统,该系统可根据用户的注册兴趣,向用户推送其感兴趣的新闻内容,该系统应该采用( ) 架构风格最为合适。
A. 事件驱动系统
B. 主程序-子程序
C. 黑板
D. 管道-过滤器
正确答案:正确答案: A
解析:
根据题目的意思,用户会注册自己的兴趣,然后系统也会把新闻按兴趣分类,如果某个新闻事件发生,可以通过事件来触发推送动作,将新闻推送给对其感兴趣的用户。这是典型的事件驱动系统应用场景。