软考笔记——9.软件工程

**软件工程的基本原理:**用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清除的审查、开发小组的人员应少而精、承认不断改进软件工程事件的必要性。

软件工程的基本要素: 方法、工具、过程

**软件生存周期:**可行性分析与项目开发计划、需求分析分析、概要设计(选择系统解决方案,规划子系统)、详细设计(设计子系统内部具体实现)、编码、测试、维护

1.信息系统生命周期

系统规划阶段 :任务是对组织的环境、目标及现行系统的状况进行初步调查,根据组织目标和发展战略确定信息系统的发展战略,对建设新系统的需求做出分析和预测,同时考虑建设新系统所受的各种约束,研究建设新系统的必要性和可能性。根据需要与可能,给出制建系统的备选方案。

输出:可行性研究报告、系统设计任务书

系统分析阶段 :任务是根据系统设计任务书所确定的范围,对现行系统进行详细调查,描述现行系统的业务流程,指出现行系统的局限性和不足之处,确定新系统的基本目标和逻辑功能要求,即提出新系统的逻辑模型。系统分析阶段又称为逻辑设计阶段(逻辑模型)。这个阶段是整个系统建设的关键阶段,也是信息系统建设与一般工程项目的重要区别所在

输出:系统说明书(需求规格说明书)

系统设计阶段 :系统分析阶段的任务是回答系统 "做什么" 的问题,而系统设计阶段要回答的问题是 "怎么做"。该阶段的任务是根据系统说明书中规定的功能要求,具体设计实现逻辑模型的技术方案,也就是设计新系统的物理模型。这个阶段又称为物理设计阶段(物理模型),可分为总体设计《概要设计》和详细设计两个子阶段。

输出:系统设计说明书(概要设计、详细设计说明书)

系统实施阶段 :是将设计的系统付诸实施的阶段。这一阶段的任务包括计算机等设备的购置、安装和调试、程序的编写和调试、人员培训、数据文件转换、系统调试与转换等。这个阶段的特点是几个互相联系、互相制约的任务同时展开,必须精心安排、合理组织系统实施是按实施计划分阶段完成的,每个阶段应写出实施进展报告。系统测试之后写出系统测试分析报告。

输出:实施进展报告、系统测试分析报告

系统运行与维护阶段:系统投入运行后,需要经常进行维护和评价,记录系统运行的情况,根据一定的规则对系统进行必要的修改,评价系统的工作质量和经济效益

2.能力成熟度模型

能力成熟度模型CMM

|------------------|------------------------------------------------------------------------------|-----------------------------------------------|
| 能力等级 | 特点 | 关键过程区域 |
| 初始级(Initial) | 软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用 | |
| 可重复级(Repeatable) | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功 | 软件配鲁管理。软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理 |
| 已定义级(Defined) | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件 | 同行评审、组间协调、软件产品工程、集成软件管理、培训大纲组织过程定义、组织过程集点 |
| 已管理级(Managed) | 制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量有定量的理解和控制 | 软件质量管理和定量过程管理 |
| 优化级(Optimized) | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进 | 过程更改管理、技术改革管理和缺陷预防 |

能力成熟度模型集成CMMI

是若干过程模型的综合和改进,不仅仅软件,而是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率

CMMI两种表示方法:

(1) 阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟度模型如下:

|------|-------------|----------------------------------------------------------------------------------|
| 能力等级 | 特点 | 关键过程 |
| 初始级 | 过程不可预测且缺乏控制 | |
| 已管理级 | 过程为项目服务 | 需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证 |
| 已定义级 | 过程为组织服务 | 需求开发、技术解决方案、产品集成、验证、确认组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
| 定量管理 | 过程已度量和控制 | 组织过程性能、定量项目管理 |
| 优化级 | 集中于过程改进和优化 | 组织级改革与实施、因果分析和解决方案 |

(2).连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。

【例题】( ) 是系统分析阶段结束后得到的工作产品,( )是系统测试阶段完成后的工作产品

A.系统设计规格说明 B.系统方案建议书 C.程序规格说明 D.单元测试数据

A.验收测试计划 B.测试标准 C.系统测试计划 D.操作手册

答案:B D

【例题】以下关于CMM的叙迷中,不正确的是 ()。

A、CMM是指软件过程能力成熟度模型

B、CMM根据软件过程的不同成熟度划分了5个等级,其中,1级被认为成熟度最高,5级被认为成

熟度最低

C、CMMI的任务是将已有的几个CMM模型结合在一起,使之构造成为"集成模型"

D、采用更成熟的CMM模型,一般来说可以提高最终产品的质量

答案:B

3.软件过程模型

瀑布模型

瀑布模型(SDLC):瀑布模型是一个经典的软件生命周期模型一般将软件开发分为: 可行性分析 (计划)、需求分析、软件设计(概要设计、详细设计) 、编码 (含单元测试)、测试、运行维护等几个阶段。

瀑布模型特点

  1. 从上一项开发活动接受该项活动的工作对象作为输入
  2. 利用这一输入,实施该项活动应完成的工作内容
  3. 给出该项活动的工作成果,作为输出传给下一项开发活动
  4. 对该项活动的实施工作成果进行评审。若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动。尽量减少多个阶段间的反复。以相对来说较小的费用来开发软件

原型模型

原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。

原型法认为在很难一下子全面准确地提出用户需求的情况下,原型应当具备的特点如下。

  1. 实际可行
  2. 具有最终系统的基本特征
  3. 构造方便、快速,造价低。原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的

螺旋模型

螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序 (瀑布)模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布

开发讨程具有周期性重复的螺旋线状。四个象限分别标志每个周期所划分的四阶段:制订计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的系统

V模型

V模型从整体上看起来,就是一个V字型的结构,由左右两边组成。左边的下画线分别代表了需求分析、概要设计、详细设计、编码。右边的上画线代表了单元测试、集成测试、系统测试与验收测试。

V模型的特点如下:

  1. 单元测试的主要目的是针对编码过程中可能存在的各种错误(单编)
  2. 集成测试的主要目的是针对详细设计中可能存在的问题(集详)
  3. 系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行(系概)
  4. 验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要(验需)
  5. V模型用于需求明确和需求变更不频繁的情形

增量模型

增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发
优先级最高的服务最先交付

增量模型的特点:但由于并不是从系统整体角度规划各个模块,因此不利于模块划分

难点在于如何将客户需求划分为多个增量。与原型不同的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示。

喷泉模型

喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。使开发过程具有迭代性和无间隙性

基于构件开发模型CBSD

基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。

特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。

形式化方法模型

形式化方法模型:建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明

习题

【例题】假设某软件公司与客户签订合同开发一个软件系统,系统的功能有较清晰的定义,且客户对交付

时间有严格要求,则该系统的开发最适宜采用

A、瀑布模型 B、原型模型 C、V模型 D、螺旋模型

答案: A

解析:功能清晰,也即需求较明确,有这样的关键字都是考察瀑布模型,牢记总结的记忆关键字

【例题】以下关于螺旋模型的叙述中,不正确的是()

A.它是风险驱动的,要求开发人员必须具有丰富的风险评估知识和经验

B.它可以降低过多测试或测试不足带来的风险

C.它包含维护周期,因此维护和开发之间没有本质区别

D.它不适用于大型软件开发

答案:D

解析:螺旋模型的特点是风险分析,应对风险的都正确,螺旋模型适合大型软件开发

4.信息系统的开发方法

结构化方法

结构是指系统内各个组成要素之间的相互联系、相互作用的框架

结构化方法也称为生命周期法,是一种传统的信息系统开发方法,由结构化分析 (Structured Analysis, SA) 、结构化设计 (Structured Design, SD)和结构化程序设计 (Structured Programming,SP) 三部分有机组合而成,其精髓是自顶向下、逐步求精和模块化设计

结构化方法的主要特点

  1. 开发目标清晰化。结构化方法的系统开发遵循 "用户第一" 的原则
  2. 开发工作阶段化。每个阶段工作完成后,要根据阶段工作目标和要求进行审查,这使各阶段工作有条不紊地进行、便于项目管理与控制.
  3. 开发文档规范化。结构化方法每个阶段工作完成后,要按照要求完成相应的文档,以保证各个工作阶段的衔接与系统维护工作的遍历。
  4. 设计方法结构化。在系统分析与设计时,从整体和全局考虑,自顶向下地分解;在系统实现时,根据设计的要求,先编写各个具体的功能模块,然后自底向上逐步实现整个系统.

结构化方法的不足和局限

  1. 开发周期长:按顺序经历各个阶段,直到实施阶段结束后,用户才能使用系统。
  2. 难以适应需求变化:不适用于需求不明确或经常变更的项目。
  3. 很少考虎数据结构: 结构化方法是一种面向过程,面向数据流的开发方法,很少考虑数据结构。

结构化方法常用工具

结构化方法一般利用图形表达用户需求,常用工具有数据流图、数据字典、结构化语言、判定表以及判定树等

面向对象开发方法

面向对象 (0bject-Oriented,00) 方法认为,客观世界是由各种对象组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,都属于某个对象类,是该对象类的一个元素。复杂的对象可由相对简单的各种对象以某种方式而构成,不同对象的组合及相互作用就构成了系统。

面向对象方法的特点

  1. 使用00方法构造的系统具有更好的复用性,其关键在于建立一个全面合理、统一的模型(用例模型和分析模型)
  2. 00方法也划分阶段,但其中的系统分析、系统设计和系统实现三个阶段之间已经没有"缝隙"。也就是说,这三个阶段的界限变得不明确,某项工既可以在前一个阶段完成,也可以在后一个阶段完成;前一个阶段工作做得不够细,在后一个阶段可以补充。
  3. 面向对象方法可以普遍适用于各类信息系统的开发

面向对象方法的不足之处
必须依靠一定的面向对象技术支持,在大型项目的开发上具有一定的局限性不能涉足系统分析以前的开发环节

当前,一些大型信息系统的开发,通常是将结构化方法和00方法结合起来。首先,使用结构化方法进行自顶向下的整体划分;然后,自底向上地采用00方法进行开发。因此,结构化方法和00方法仍是两种在系统开发领域中相互依存的、不可替代的方法。

原型化方法

原型化方法也称为快速原型法,或者简称为原型法。它是一种根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求的信息系统快速开发的方法

按是否实现功能分类: 分为水平原型(行为原型,功能的导航)、垂直原型(结构化原型,实现了部分功能)

按最终结果分类::分为抛弃式原型、演化式原型

原型法的特点

原型法可以使系统开发的周期缩短、成本和风险降低、速度加快,获得较高的综合开发效益。

原型法是以用户为中心来开发系统的,用户参与的程度大大提高,开发的系统符合用户的需求,因而增加了用户的满意度,提高了系统开发的成功率

由于用户参与了系统开发的全过程,对系统的功能和结构容易理解和接受,有利于系统的移交,有利于系统的运行与维护

原型法的不是之处
开发的环境要求高。管理水平要求高.

由以上的分析可以看出,原型法的优点主要在于能更有效地确认用户需求。从直观上来看,原型法适用于那些需求不明确的系统开发。事实上,对于分析层面难度大、技术层面难度不大的系统,适合于原型法开发。

从严格意义上来说,目前的原型法不是一种独立的系统开发方法,而只是一种开发思想,它只支持在系统开发早期阶段快速生成系统的原型,没有规定在原型构建过程中必须使用哪种方法。因此,它不是完整意义上的方法论体系。这就注定了原型法必须与其他信息系统开发方法结合使用

敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软件开发方法的"非敏捷",更强调程序员团队与业务专家之间的紧密协作、面对面的沟通 (认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织,能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用

小敏捷软件开发官言:

  1. 个体和交互胜过过程和工具
  2. 可以工作的软件胜过面面俱到的文档
  3. 客户合作胜过合同谈兴
  4. 响应变化胜过遵循计划

敏捷开发的五种方法

自适应开发

自适应开发:强调开发方法的适应性 (Adaptive)。不像其他方法那样有很多具体的实践做法,它更侧重为软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。

水晶方法

水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论。

特性驱动开发

特性驱动开发:是一套针对中小型软件开发项目的开发模式。是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。

极限编程XP

极限编程XP:核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。

并列争球法SCRUM

并列争球法SCRUM:是一种选代的增量化过程,把每段时间(30天)一次的迭代称为一个"冲刺",并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品.

统一过程(RUP)

提供了在开发组织中分派任务和责任的纪律化方法。它的目标是在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品

3个显著特点:用例驱动、以架构为中心、选代和增量

4个流程:初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经达到

适用:一个通用过程框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同性能水平和不同的项目规模。

结对编程

结对编程:一个程序员开发,另一个程序在一旁观察审查代码,能够有效的提高代码质量,在开发同时对代码进行初步审查,共同对代码负责。

【例题】以下关于结构化开发方法的叙述中,不正确的是

A、总的指导思想是自顶向下,逐层分解

B、基本原则是功能的分解与抽象

C、与面向对象开发方法相比,更适合于大规模、特别复杂的项目

D、特别适合于数据处理领域的项目

解析:可以使用排除法,结构化开发方法是面向数据流,自顶向下、逐层分解的,因此ABD都对,但目前已经逐渐被面向对象开发方法替代,因为面向对象开发方法更适合大型复杂项目。

【例题】在敏捷过程的开发方法中,( )使用了迭代的方法,其中,把每段时间(30天)一次的迭代称为一个"冲刺",并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品

A、极限编程XP B、水晶法 C、并列争球法 D、自适应软件开发

答案:C

解析:并列争球法SCRUM强调迭代增量过程,自适应软件开发强调适应性,极限编程强调四个核

斤及测试先行等理论。

系统分析与设计概述

软件需求

软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。

分为需求开发和需求管理两大过程,如下所示:

系统设计

系统设计主要目的:为系统制定蓝图,在各种技术和实施方法中权衡利弊精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方法

系统设计方法:结构化设计方法,面向对象设计方法

系统设计的主要内容:概要设计、详细设计。

概要设计基本任务:又称为系统总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。

详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计(代码、输入/输出格式、用户界面)、编写详细设计说明书、评审

系统实际的基本原理

  • 抽象化
  • 自顶而下,逐步求精
  • 信息隐蔽;
  • 模块独立(高内聚,低耦合)

系统设计原则

  • 保持模块的大小适中
  • 尽可能减少调用的深度
  • 多扇入,少扇出
  • 单入口,单出口
  • 模块的作用域应该在模块之内
  • 功能应该是可预测的

【例题】系统设计是根据系统分析的结果,完成系统的构建过程。系统设计的主要内容包括( );系统总体结构设计的主要任务是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系形成软件的( )

A、概要设计和详细设计 B、架构设计和对象设计

C、部署设计和用例设计 D、功能设计和模块设计

A.用例图 B.模块结构图 C.系统部署图 D。类图

答案: A B

【例题】以下关于软件系统模块结构设计的叙述中,正确的是( )

A.当模块扇出过大时,应把下级模块进一步分解为若干个子模块

B.当模块扇出过小时,应适当增加中间的控制模块

C.模块的扇入大,表示模块的复杂度较高

D.模块的扇入大,表示模块的复用程度高

答案:D

系统设计基本原理:

系统设计基本原理:抽象化、模块化、信息隐蔽、模块独立。

衡量模块独立程度的标准有两个:耦合性和内聚性。

内聚程度从低到高如下所示:

|------|------------------------------------------------------|----------------|
| 内聚分类 | 定义 | 记忆关键字 |
| 偶然内聚 | 一个模块内的各处理元素之间没有任何关系 | 无直接关系 |
| 逻辑内聚 | 模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能 | 逻辑相似、参数决定 |
| 时间内聚 | 把需要同时执行的动作组合在一起形成的模块 | 同时执行 |
| 过程内聚 | 一个模块完成多个任务,这些任务必须按指指定的过程执行 | 指定的过程顺序 |
| 通信内聚 | 模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。 | 相同数据结构、相同 输入输出 |
| 顺序内聚 | 一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入 | 顺序执行、输入为输出 |
| 功能内聚 | 最强的内聚,模块内的所有元素共同作用完一个功能、缺一不可 | 完共同作用、缺一不可 |

耦合程度从低到高如下表所示

|-------|----------------------------------------------------|---------------|
| 耦合分类 | 定义 | 记忆关键字 |
| 无直接耦合 | 两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,不传递任何信息 | 无直接关系 |
| 数据耦合 | 两个模块之间有调用关系,传递的是简单传递数据值,相当于高级语言中的值传递 | 传递数据值调用 |
| 标记耦合 | 两个模块之间传递的是数据结构 | 传递数据结构 |
| 控制耦合 | 一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择的执行模块内的某一功能 | 控制变量、选择执行某一功能 |
| 外部耦合 | 模块间通过软件之外的环境联合 (如 I/O将模块耦合到特定的设备、格式、通信协议上)时。 | 软件外部环境 |
| 公共耦合 | 通过一个公共数据环境相互作用的那些模块间的耦合 | 公共数据结构 |
| 内容耦合 | 当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时 | 模块内部关联 |

【例题】某模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一处理元素的输出就是下一处

理元素的输入,则该模块的内聚类型为( ) 内聚

A、过程 B、时间 C、顺序 D、逻辑

答案: C

【例题】已知模块A给模块B传递数据结构X,则这两个模块的耦合类型为 ( )

A、数据耦合 B、公共耦合 C、外部耦合 D、标记耦合

答案: D

解析:特别说明是数据结构,不是数据,数据结构是标记耦合

结构化开发

结构化分析与设计方法是一种面向数据流的传统软件开发方法,它以数据流为中心构建软件的分析模型和设计模型。结构化分析 (StructuredAnalysis,SA)、结构化设计 (Structured Design,SD) 和结构化程序设计 (structured Programming Design,SPD) 构成了完整的结构化方法结构化方法的分析结果由以下几部分组:一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料。

数据流图DFD

基本图形元素:外部实体、加工、数据存储、数据流

数据流:由一组固定成分的数据组成,表示数据的流向在DFD 中,数据流的流向必须经过加工

加工:描述了输入数据流到输出数据流之间的变换,数据流图中常见的三种错误如图所示

加工3.1.2有输入但是没有输出,称之为"黑洞"

加工3.1.3 有输出但没有输入。称之为"奇迹"

加工3.1.1中输入不足以产生输出,我们称之为"灰洞'

数据存储:用来存储数据

外部实体(外部主体):是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地 (源)和系统所产生的数据的归宿地 (宿)

数据字典

数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。

数据字典有以下4类条目:数据流、数据项、数据存储和基本加工

|--------------|------|----------------------------|
| 符号 | 含义 | 举例及说明 |
| = | 被定义为 | |
| + | 与 | x=a+b,表示 x 由 a 和 b 组成 |
| [...|...] | 或 | x=[a|b],表示 x 由 a 或 b 组成 |
| {......} | 重复 | x={a},表示 x 由 0 个或多个 a 组成 |

加工逻辑也称为 "小说明" 。常用的加工逻辑描述方法有结构化语言、判定表和判定树3种

【例题】在结构化分析中,用数据流图描述 ( )。当采用数据流图对一个图书馆管理系统进行分析时,( )

一个外部实体

A、数据对象之间的关系,用于对数据建模

B、数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能

建模

C、系统对外部事件如何响应,如何动作,用于对行为建模

D、数据流图中的各个细成部分

A、读者 B、图书 C、借书证 D、借阅

答案:BA

系统运行与维护

遗留系统

遗留系统 是指任何基本上不能进行修改和演化以满足新的变化了的业务需求的信息系统,它通常具有以下特点:

(1) 系统虽然完成企业中许多重要的业务管理工作,但仍然不能完全满足要求。一般实现业务处理电子化及部分企业管理功能,很少涉及经营决策。

(2) 系统在性能上已经落后,采用的技术已经过时。例如多采用主机/终端形式或小型机系统,软件使用汇编语言或第三代程序设计语言的早期版本开发,使用文件系统而不是数据库。

(3) 通常是大型的软件系统,已经融入企业的业务运作和决策管理机制之中,维护工作十分困难

(4) 没有使用现代信息系统建设方法进行管理和开发,现在基本上已经没有文档,很难理解

系统转换

系统转换是指新系统开发完毕,投入运行,取代现有系统的过程,需要考虑多方面的问题,以实现与老系统的交接,有以下三种转换计划:

直接转换:现有系统被新系统直接取代了,风险很大,适用于新系统不复杂.或者现有系统已经不能使用的情况。优点是节省成本。

并行转换:新系统和老系统并行工作一段时间,新系统经过试运行后再取代若新系统在试运行过程中有问题,也不影响现有系统的运行,风险极小,在试运行过程中还可以比较新老系统的性能,适用于大型系统。缺点是耗费人力和时间资源,难以控制两个系统间的数据转换。

分段转换: 分期分批逐步转换,是直接和并行转换的集合,将大型系统分为多个子系统,依次试运行每个子系统,成熟一个子系统,就转换一个子系统。同样适用于大型项目,只是更耗时,而且现有系统和新系统间混合使用,需要协调好接口等问题。

数据转换与迁移:将数据从旧数据库迁移到新数据库中。有三种方法: 系统切换前通过工具迁移、系统切换前采用手工录入、系统切换后通过新系统生成

系统维护

系统的可维护性可以定义为维护人员理解、改正、改动和改进这个软件的难易程度,其评价指标如下:

  1. 易分析性。软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能
  2. 易改变性。软件产品使指定的修改可以被实现的能力,实现包括编码、设计和文档的更改
  3. 稳定性。软件产品避免由于软件修改而造成意外结果的能力。
  4. 易测试性。软件产品使已修改软件能被确认的能力。
  5. 维护性的依从性。软件产品遵循与维护性相关的标准或约定的能力

系统维护包括硬件维护、软件维护和数据维护,其中软件维护类型如下

  1. 正确性维护:发现了bug而进行的修改。
  2. 适应性维护:由于外部环境发生了改变,被动进行的对软件的修改和升级
  3. 完善性维护:基于用户主动对软件提出更多的需求,修改软件,增加更多的功能,使其比之前的软件功能、性能更高,更加完善。
  4. 预防性维护:对未来可能发生的bug进行预防性的修改

【例题】对于遗留系统的评价框架如下图所示,那么处于"高水平、低价值"区的遗留系统适合于采用的演化策略为 ( )

A、淘汰 B、继承 C、改造 D、集成

答案:D

【例题】以下关于软件维护和可维护性的叙述中,不正确的是 ( )

A、软件维护要解决软件产品交付用户之后运行中发生的各种问题

B、软件的维护期通常比开发期长得多,其投入也大得多

C、进行质量保证审查可以提高软件产品的可维护性

D、提高可维护性是在软件维护阶段考虑的问题

答案:D

【例题】某企业由于外部市场环境和管理需求的变化对现有软件系统提出新的需求,则对该软件系统进行维护。的维护属于( )维护

A、正确性 B、完善性 C、适应性 D、预防性

答案: C

相关推荐
摇滚侠6 分钟前
Spring Boot 3零基础教程,WEB 开发 HTTP 缓存机制 笔记29
spring boot·笔记·缓存
大白的编程日记.7 分钟前
【Linux学习笔记】线程同步与互斥之生产者消费者模型
linux·笔记·学习
新子y11 分钟前
【小白笔记】strip的含义
笔记·python
摇滚侠36 分钟前
Spring Boot 3零基础教程,WEB 开发 内容协商 接口返回 YAML 格式的数据 笔记35
spring boot·笔记·后端
Chunyyyen1 小时前
【第十八周】自然语言处理的学习笔记03
笔记·学习·自然语言处理
聪明的笨猪猪1 小时前
Java JVM “类加载与虚拟机执行” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
im_AMBER2 小时前
React 02
前端·笔记·学习·react.js·前端框架
怀揣小梦想2 小时前
跟着Carl学算法--哈希表
数据结构·c++·笔记·算法·哈希算法·散列表
zyq~2 小时前
【课堂笔记】概率论-1
笔记·概率论
Kapibalapikapi2 小时前
C 标准库函数 | strcmp, strlen
笔记·逆向·c标准库函数