软工导论复习
type
status
date
slug
summary
tags
category
icon
password
name
第一章
概述
- 软件危机可以表现为( ABCD )。 A、产品不符合用户的需要 B、软件产品的质量差 C、软件的可维护性差 D、软件的价格昂贵
软件工程
什么是软件工程
软件工程是指导计算机软件开发和维护的一门学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件过程和软件生存周期
软件工程中描述软件生存周期的瀑布模型一般包括计划、需求分析、设计、编码、测试、维护等几个阶段。其中,设计阶段在管理上又可以依次分为概要设计和详细设计两个步骤。
软件开发模型
- 瀑布模型的问题是( B )。
A、 用户容易参与开发
B、 缺乏灵活性
C、 用户与开发者易沟通
D、 适用可变需求
- 在软件开发模型中,提出最早、应用最广泛的模型是( A )。
A、瀑布模型 B、喷泉模型 C、增量模型 D、螺旋模型
传统的软件工程和面向对象的软件工程
何谓面向对象软件工程?简述面向对象软件工程和传统软件工程的区别与联系。
面向对象软件工程方法具有下述4个特点:
(1)把对象作为融合了数据及在数据上的操作行为的统一软件构架,用对象分解取代了传统方法的功能分解
(2) 把所有对象都划分为类。每个类定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义
(3) 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承
(4) 对象彼此之间仅能通过发送消息互相联系,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是封装性
传统软件工程是以结构化程序设计为基础,而面向对象软件工程是以面向对象程序设计为基础。与面向过程的软件工程的开发思想相比,面向对象开发方法不再是以功能划分为导向,而是以对象作为整个问题分析的中心,围绕对象展开系统的分析与设计工作。在开发过程方面,面向对象软件工程和传统软件工程一样也是把软件开发划分为分析、设计、编码和测试等几个阶段,但各个阶段的具体工作不同,除了在编码阶段使用的语言不同外,面向对象软件工程为待开发软件确定“类与对象”一般在需求分析阶段进行,设计阶段则主要完成对象内部的详细设计;而在传统软件工程中,将软件设计划分为“总体设计”和“详细设计”,分别完成软件的总体结构图的设计和各个模块内部算法的详细设计。即:传统软件工程开发过程包括需求分析、总体设计、详细设计、面向过程的编码和测试;面向对象软件工程开发过程包括需求分析与对象抽取、对象详细设计、面向对象的编码和测试。
什么是软件生存周期模型?试比较瀑布模型、快速原型模型、增量模型、螺旋模型的优缺点。
第二章、可行性研究
可行性研究的目的和任务
- 系统定义明确之后,应对系统的可行性进行研究。可行性研究包括经济可行性、技术可行性、操作可行性。
第三章、软件需求分析
- 软件需求分析阶段的工作,可以分为以下几个方面;对问题定义、分析与综合、编写需求分析文档以及需求分析评审。
- 软件需求分析的任务不应包括结构化程序设计。(只包括问题分析、信息域分析、确定逻辑模型)
- 进行需求分析可使用数据流图、判定、数据字典等工具。(PAD图,一种流程图,用于描述数据和处理之间的关系。帮助设计人员更好地理解和描述系统的数据处理过程。)
- 数据流图是常用的进行软件需求分析的图形工具,其基本符号是加工、数据流、数据存储和外部实体。
- 数据流图是用于表示软件模型的一种图示方法,在下列可采用的绘图方法中,自顶向下、分层绘制、逐步求精是最常采用的。
- 在软件开发过程中常用图作为描述工具,DFD就是面向数据流分析方法的描述工具。
- 数据流图和数据字典共同构成系统的逻辑模型。
第四章、软件总体设计
- 1960年底Dijkstra提倡的结构化程序设计是一种有效的提高程序设计效率的方法。
- 某个模块的作用域是指受该模块内的判定影响的所有模块。
- 扇出是一个模块直接调用的模块数目,一般推荐的扇出为3或4。扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块。
- 模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准是模块的内聚性和耦合性。
- 为了高质量地开发软件项目,在软件结构设计时必遵循信息隐蔽。
总体设计阶段的主要目的和任务是什么?
总体设计阶段的基本目标就是回答“概括地说,系统应该如何实现?”这个问题,因此总体设计又称为概要设计或初步设计。通过这个阶段的工作,开发人员将划分出组成系统的物理元素,如程序、文件、数据库等。但是这些物理元素还处于黑盒子的形式,具体的内部细节在详细设计阶段考虑。总体设计的另一项任务是设计软件的总体结构,即确定系统中的每个程序是由哪些模块组成的,每个模块的功能及模块和模块之间的接口、调用关系等,但所有这些都不要求涉及模块内部过程的细节。
模块、模块化与模块独立性
模块:
模块是软件结构的基础,是软件元素,是能够单独命名、独立完成一定功能的程序语句的集合。
模块化:
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。
模块的独立性:
模块独立性每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。模块的独立性可以从两个方面来度量:耦合衡量不同模块彼此间相互依赖的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单。内聚衡量一个模块内部各个元素之间彼此结合的紧密程度的度量。 内聚要高,每个模块完成一个相对独立的特定子功能。
- 软件概要设计包括软件系统结构设计以及数据结构和数据库设计。
- 结构设计是一种应用最广泛的系统设计方法,是以数据流图为基础、自顶向下、逐步求精和模块化的过程。
- 为了提高模块的独立性,模块内部最好是功能内聚。
第五章、软件详细设计
- 决定软件系统中各个模块的外部特性,即其输入输出和功能是概要设计的任务。
- 在面向数据流的软件设计方法中,一般将信息流分为变换流和事务流。
- 详细设计的工具有图形工具、表格工具 和语言工具。
第七章、软件测试
语句在白盒法技术测试用例的设计中是最弱的覆盖标准。
第九章、面向对象方法学
- UML中有四种关系是:依赖,泛化,关联和实现。
- 面向对象的分析方法主要是建立三类模型,即对象模型、动态模型、功能模型。
- UML提供的构建系统动态模型的机制有进程视图(包括顺序图和协作图)、逻辑视图、实现视图。
面向对象方法的要点包括哪些内容?
面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程;面向对象方法是一种新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。
面向对象的方法学可以用下式来表述:
OO = Objects + Classes + Inheritance + Communication with messages
即面向对象包括既使用对象,又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。
什么是类?什么是对象?类和对象是什么关系?
(1)类是具有相同属性和操作的一组相似对象(实体)的集合,类为属于该类的全部对象提供了统一的抽象描述。 (2)对象是对问题域中客观存在的事物的抽象,是一组属性和在这些属性上的操作的封装体。 (3)类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实体。因此,对象又称为是类的一个“实例(Instance)”,类又称为是对象的“模板 (Template)”。类代表一类抽象的概念或事物。对象是在客观世界中实际存在的类的实例。
第十章、面向对象的分析
- 类A的一个操作调用类B的一个操作,且这两个类之间不存在其他关系,那么类A和类B之间是依赖关系。
- 在类图中,聚合关系表达总体与局部的关系。
空心箭头连线表示泛化关系。
- 用例建模包含哪几个步骤?
用例建模包括确定系统范围和系统边界、确定参与者、确定用例、 确定用例之间的关系几个步骤。
- 对象模型包含哪些内容?对象建模的步骤是什么?
(1)对象模型是面向对象建模中最关键的一个模型,它的作用是描述系统 的静态结构,包括构成系统的类和对象、它们的属性和操作及它们之间的关系。
(2)确定类和对象、确定关联、确定属性、建立对象类图、划分主题、优化对象模型。
- 顺序图的作用有显示在交互过程中各个对象之间的组织交互关系以及对象彼此之间的连接。
- 顺序图中的消息是以时间顺序排列的。
第十一章、面向对象的设计与实现
顺序图由类角色、生命线、激活期和消息组成。
面向对象设计的启发式规则有哪些?
设计结果应该清晰易懂 、一般-特殊结构的深度应适当、设计简单的类、使用简单的协议。
从面向对象分析到面向对象设计和实现,对象模型有何变化?
从面向对象分析、面向对象设计,再到面向对象的实现,实际上就变成一个逐渐扩充模型的过程,或者说,面向对象设计就是利用面向对象观点建立求解域模型的过程,面向对象的实现就是选择一种面向对象的程序设计语言进行编码、测试、审查、调试和优化的过程。
第十三章、 软件体系结构
- 分层模式将整个软件系统分为若干层次,最顶层直接面向用户提供软件系统的操作界面,其余各层为紧邻其上的层次提供服务。
- 模块化原则不仅适用于结构化软件设计,也适用于面向对象的软件设计。
什么是软件体系结构,为什么要研究软件体系结构?
软件体系结构(Software Architecture)主要由构件、连接件和配置规则组成,为软件系统提供一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构是在软件系统的整体结构层次上关注软件系统的构建和组成,是设计抽象的进一步发展,满足了更好地理解软件系统,更方便地开发更大、更复杂的软件系统的需要。如同计算机系统结构在计算机工程中的重要作用一样,对于软件体系结构的概念、高层设计和复用的研究,是“现代软件工程”的一个重要组成部分。
Loading...