软件工程简答 2

上传人:daj****de 文档编号:182638664 上传时间:2023-01-26 格式:DOCX 页数:8 大小:31.94KB
返回 下载 相关 举报
软件工程简答 2_第1页
第1页 / 共8页
软件工程简答 2_第2页
第2页 / 共8页
软件工程简答 2_第3页
第3页 / 共8页
点击查看更多>>
资源描述
1. 传统瀑布模型的主要缺陷是:阶段与阶段划分完全固定,阶段间产生的大量文档,极大地增加了工作量。由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。 这样,软件与用户见面的时间较长,也增加了一定的风险。前面未发现的错误传到后面的开发活动中,可能会扩散,进而可能会造成更不理想 的效果。造成问题的主要原因是:现实的项目开发很少按瀑布模型的顺序进行,用户往往 难以清楚地给出所有的需求,因此,使用该模型开发软件会存在许多步确定的因素。开发 者常常被不必要地耽搁。2. 软件工程的目标就是建造高质量的软件。但是目前的软件开发面临着许多问题:对软件开发成本和进度的估计常常很不准确。用户常对“已完成的”软件系统不满意。 软件产品的质量往往靠不住。软件常常很难维护。软件常常缺乏适当的文档资料。软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件成本在计算机系统总成本中所占的比例逐年上升。3. 时间内聚是指某一软件运行中有几个动作经常需要在同一个时间段内完成。公共耦合是指若干个模块共同享有对公用数据区的读和写的访问权。4. 软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过 程。通常有四项基本维护:纠错性维护、完善性维护、适应性维护以及预防性维护等。5. 序言性注释通常放在每个程序模块的开头部分,它应当给出程序的整体说明,对于理解 程序具有引导作用。序言性注释一般包含下列内容: 程序标题;有关该模块的功能和目的说明;主要算法; 接口说明:包括调用形式,参数描述、子程序清单; 有关数据描述(重要的变量及其用途,约束或限制条件,以及其他有关信息); 模块位置(在哪一个源文件中,或隶属于哪一个软件包); 开发简历模块设计者,复审者,复审日期,修改日期及有关说明等。1什么是需求分析?需求分析阶段的基本任务是什么?需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范 围、定义和功能时所要做的所有的工作。需求分析阶段的基本任务是:要准确的定义新系 统的目标,为了满足用户需要,回答系统必须“做什么”的问题。2. 为什么说面向对象方法学比传统方法学在稳定性方面要好?传统的软件开发以算法为核心,开发过程基于功能分析和功能分解。用传统方法所建立 起来的软件系统的结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软 件结构的整体修改。事实上,用户需求变化大部分是针对功能的,因此这样的软件系统是不 稳定的。面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。它的基 本作法是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。当对系统的功 能需求变化时并不会引起软件结构的整体变化,仅仅只需要作一些局部性的修改。总之,由 于现实世界中的实体是相对稳定的,因此,对象为中心构造的软件系统也是比较稳定的。3. 什么是蜕变测试?编写蜕变测试的测试用例关键点是什么?蜕变测试依据被测软件的领域知识和软件的实现方法建立蜕变关系(Metamorphic Relation, MR),利用蜕变关系来生成新的测试用例,通过验证蜕变关系是否被保持来决定测试是否通 过。编写蜕变测试的测试用例关键点就是找出蜕变关系。4. 什么叫模块化?设计一个系统时是否分的模块越多就越好说明原因。模块化就是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把 这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。不一定。当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本(工作量) 确实减少了,但是,随着模块数量增加,设计模块间接上所需要的工作量也将增加,根据这 两个因素,得出设计一个系统时并不一定模块越多越好。5. 画数据流图要注意哪些事项?答:设计数据流图时只需考虑系统必须完成的基本逻辑功能,不需要考虑怎样具体的实 现这些功能。从顶层数据流开始。并不是所有数据存储和数据流都能直接从问题描述中提取出来;当进一步分解将涉及如何具体地实现一个功能时,就不应该在分解了;数据流图中个成分的命名要仔细推敲,看是否恰当;1. 就程序设计语言的工程特性而言,对程序编码有哪些要求?就程序设计语言的工程特性而言,对程序编码有如下要求:就程序设计语言的工程特 性而言,对程序编码有如下要求:(1)可移植性(2)开发工具的可利用性(3)软件的可重用性(4)可维护性2. 用3种方法计算下图所示程序图的环形复杂度。环形复杂度等于程序图中的区域数图中所示程序图共有5个区域,因此它的环形复杂度等于5。环形复杂度等于程序图中边的条数减去结点数之后再加2 图中所示程序图共有11条边,8个结点,所以它的环形复杂度为11 - 8 + 2 = 5环形复杂度等于程序中的判断数加1流图中有2条输出弧的结点(例如图中的结点c和f)对应于程序中的1个判断,有n(n 2 )条输出弧的结点(例如图中的结点a有3条输出弧)对应于程序中的n -1个判断。因 此,图中所示流图的环形复杂度为2 X 1 + 1 X ( 3 - 1 ) + 1 = 53. 对象和属性之间有何区别?答:对象是对客观世界实体的抽象,它是描述实体静态属性的数据和代表实体动态行为的操 作结合在一起所构成的统一体。属性只不过是对象的一种特性,它是组成对象的一种成分。4. 应该依据什么准则来评价用例图?答:用例图是从用户的观点来描述系统的功能,因此,必须包含用户关心的所有关键功能。5. 画数据流图要注意哪些事项?答:设计数据流图时只需考虑系统必须完成的基本逻辑功能,不需要考虑怎样具体的实 现这些功能。从顶层数据流开始。并不是所有数据存储和数据流都能直接从问题描述中提取出来;当进一步分解将涉及如何具体地实现一个功能时,就不应该在分解了;数据流图中个成分的命名要仔细推敲,看是否恰当;1. 从开发者角度进行程序质量的评审时,软件的结构包括哪些主要内容?答:功能结构:包括数据结构、功能结构、及其之间的关系。功能的通用性。模块的层次。模块结构:包括控制流结构和数据流结构及其之间的关系。处理过程的结构。2. 请简单分析顺序图和活动图的区别。答:活动图反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程。活动图 特别适合描述工作流和并行处理过程。具体地说活动图可以描述一个操作过程中需要完成的 活动;描述一个对象内部的工作;描述如何执行一组相关的动作,以及这些动作如何影响它 们周围的对象;说明一个业务活动中角色、工作流、组织和对象是如何工作的。顺序图用 于描述一组交互对象间的交互方式,它表示完成某项行为的对象和这些对象之间传递消息的 时间顺序。3. 面向对象的分析通常要建立三个模型,请问三个模型的作用?答:a)功能模型:表达系统的详细需求,为软件的进一步分析和设计打下基础。在 面向对象方法中,由用例图和场景描述组成。b)对象模型:表示静态的、结构化的系统“数据”性质。描述现实世界中实体的 对象以及它们之间的关系,表示目标系统的静态数据结构。在面向对象方法中,类 图是构件对象模型的核心工具。c)动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统 的“控制”特性。面向对象方法中,常用状态图、顺序图、合作图、活动图构件系 统的动态模型。4. 软件测试要经过哪些步骤,简述这些测试的基本任务。答:单元测试、集成测试、确认测试、系统测试。单元测试:对源程序中的每个程序单元进行测试,检查各模块是否正确实现规定 的功能,从而发现模块在编码中或算法中的错误。集成测试:检查与设计相关的软件结构的有关问题。确认测试:主要检查已实现的软件是否满足需求规格说明书中确定了的各种需求。系统测试:把已确定的软件与其他系统元素结合在一起进行测试。5. 简述提高软件可维护性的方法。答:(1)建立明确的软件质量目标。利用先进的软件开发技术和工具。建立明确的质量保证工作。选择可维护的程序设计语言。改进程序的文档。1. 功能模型的特征有哪些?答:功能模型描述了系统的所有计算。功能模型指出发生了什么,对动态模型确定什么时候 发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不 考虑所计算的次序。功能模型由多张数据流图组成。数据流图说明数据流是如何从外部输入、 经过操作和内部存储输出到外部的。功能模型也包括对象模型中值的约束条件。2. 简述动态建模的过程。答:(1)准备脚本。动态分析从寻找事件开始,然后确定各对象的可能事件的顺序。在分析 阶段不考虑算法的执行,算法是实现模型的一部分。每当系统中的对象与外部用户发生互换信息时,就产生一个事件,所互换的信息值就是 该事件的参数。对于各事件,应确定触发事件的动作对象和该事件的参数。屏幕布局和输出 格式一般不影响交互行为的逻辑或所互换的信息值,对初始动态模型不必考虑其输出格式。确定事件。确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的 信号、输入、转换和动作,可以发现正常事件,但不要遗漏条件和异常事件。将各种类型的事件放入发送它和接收它的对象中,事件对发送者是输出事件,但对接收 者则是输入事件。有时对象把事件发送给自身。这种情况下事件既是输出事件也是输入事件。 准备事件跟踪表。把脚本表示成一个事件跟踪表,即不同对象间的事件排序表,对 象为表中的列,给每个对象分配一个独立的列。构造状态图。对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对 应于状态图中的一条路径。3. 怎样克服软件危机?答:(1)充分吸收和借鉴人类长期以来从事各种工程项目屮积累的行之有效的有效原 理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经 验教训。在开发软件的过程屮努力作到良好的组织,严格的管理,相互友好的协作。(2)推广在实践屮总结出来的开发软件的成功的技术和方法,并研究更好、更有效 的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。(3)根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个 阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。总之为 了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。4. 为了进行测试,为什么需要一个规格说明?答:规格说明用来决定程序的实际行为何时正确,何时不正确。5. 何为动态测试,对软件产品进行动态测试采用何种方法?答:动态测试是指通过运行程序发现错误。一般意义上的测试大多是指动态测试。为使测试 发现更多的错误,需要运用一些有效的方法。测试任何产品,一般有两种方法:一是测试产 品的功能,二是测试产品内部结构及处理过程。对软件产品进行动态测试时,也用这两种方 法,分别称为“黑盒测试法”和“白盒测试法”。4. 软件工程过程有哪几个基本过程活动?试说明之。答:(1)软件规格说明一一定义软件产品的功能和操作约束。(2)软件设计与实现一一生产满足规格说明的软件产品。(3)软件确认一一确认软件产品的有效性,确保该软件产品所做的是用户所需求的。(4)软件演进一一改进软件产品,满足用户新的需求。5. 试说明“软件生存周期”的概念。答:软件与任何一个事物一样,有它的孕育、诞生、成长、成熟、衰亡的生存过程。这就是 软件的生存周期。它主要分为6个阶段:软件项目计划、软件需求分析和定义、软件设计、 程序编码、软件测试 以及运行维护。6. 试论述瀑布模型软件开发方法的基本过程。答:瀑布模型规定了各项软件工程活动,包括:制定软件项目计划,进行需求分析和定义, 软件设计,程序编码,测试及运行维护。并且规定了它们自上而下,相互衔接的固定次序, 如同瀑布流水,逐级下落。然而软件开发的实践表明,上述各项活动之间并非完全是自上而 下,呈线性图式。实际情况是,每项开发活动均应具有以下特征:(1)(2)舍(4) 对本项活动实施的工作进行评审。若其工作得到确认,则继续进行下一项活动,否 则返回前项,甚至更前项的活动进行返工。7. 软件工程是开发、运行、维护和修复软件的系统化方法,它包含哪些要素?试说明之。 答:软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目 计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、 测试以及维护等。软件工程方法常采用某一种特殊的语言或图形的表达方法及一套质量保证 标准。软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经推出了许 多软件工具,已经能够支持上述的软件工程方法。特别地,已经有人把诸多的软件工具集成 起来,使得一种工具产生的信息可以为其它的工具所使用,这样建立起一种被称之为计算机 辅助软件工程(CASE)的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开 发过程信息的工程数据库组合起来形成一个软件工程环境。软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机 软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变 化所需要的管理、及软件开发各个阶段完成的里程碑。8. 软件工程学的基本原则有哪些?试说明之。答:在软件开发过程中必须遵循下列软件工程原则。(1) 抽象:采用分层次抽象,自顶向下、逐层细化的办法进行功能分解和过程分解,可以 由抽象到具体、由复杂到简单,逐步得到问题的解。(2) 信息隐蔽:遵循信息封装,使用与实现分离的原则,将模块设计成“黑箱,可以将实 现的细节隐藏在模块内部,使用者只能通过模块接口访问模块中封装的数据。(3) 模块化:按模块划分系统的体系结构,使得各模块间有良好的接口。这样有助于信息 隐蔽和抽象,有助于表示复杂的系统。(4) 局部化:按抽象数据类型思想及问题域中的概念来建立模块,确保模块之间低耦合模 块内部高内聚。这有助于控制解的复杂性。(5) 确定性:软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助 于人们之间的沟通,保证整个开发工作协调一致。(6) 致性:强调软件开发过程的标准化、统一化。包括文档格式的一致,工作流程的一 致,内、外部接口的一致,系统规格说明与系统行为的一致等。(7) 完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能。(8) 可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系 统易于检查、测试、评审的原则,以确保系统的正确性。9. 有人说:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。对否?请 解释你的回答。答:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。这个说法是对的。 在1970年代,GTE、TRW和IBM等三家公司对此问题做了独立研究,最后它们得到相似 的结论:阶段需求分析软件设计程序编码单元测试验收测试维护相对修复代价0.10.20.512520从表中可以看出,在需求分析阶段检查和修复一个错误所需的代价只有编码阶段所需代价 的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。6. 可行性研究主要研究哪些问题?试说明之。(1)经济可行性:主要进行成本的估算及可能取得效益的评估。确定待开发系统是否值得 投资开发。(2)技术可行性:根据待开发系统的功能、性能及实现系统的各种约束条件等,分析在现 有资源和技术的条件下,技术风险有多大,系统是否能是实现。通常包括风险分析、资源分 析和技术分析。(3)法律可行性:主要关注系统开发过程中可能涉及的合同,侵权、责任以及各种与法律 相抵触的问题。(4)用户操作可能性:考察待开发系统的系统结构是否符合使用单位的使用环境现状和管 理制度,系统的操作方式是否符合用户的技术水平和使用习惯。(5)方案的选择和折中:评价系统或产品开发的几个可能的候选方案,要在可行的方案中 做出选择。(6)可行性研究报告:可行性研究结果的呈现形式。5. 在软件需求分析时,首先建立当前系统的物理模型,再根据物理模型建立当前系统的逻 辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?答:所谓当前系统可能是需要改进的某个已在计算机上运行的数据处理系统,也可能是一个 人工的数据处理过程。当前系统的物理模型客观地反映当前系统实际的工作情况。但在物理 模型中有许多物理的因素,随着分析工作的深入,有些非本质的物理因素就成为不必要的负 担,因而需要对物理模型进行分析,区分出本质的和非本质的因素,去掉那些非本质的因素 即可获得反映系统本质的逻辑模型。所以当前系统的逻辑模型是从当前系统的物理模型抽象 出来的。6软件需求分析是软件工程过程中交换意见最频繁的步骤。为什么交换意见的途径会经常 阻塞?答:软件需求分析过程中,由于最初分析员对要解决的问题了解很少,用户对问题的描述、 对目标软件的要求也很凌乱、模糊,再加上分析员和用户共同的知识领域不多,导致相互间 通信的需求。首先,由于分析员和用户之间需要通信的内容相当多,业务知识上的不足,表 达方式的不足,可能对某些需求存在错误解释或误解的可能性,造成需求的模糊性。其次, 用户和分析员之间经常存在无意识的“我们和他们”的界限,不是按工作需要组成统一的精 干的队伍,而是各自定义自己的“版图”,并通过一系列备忘录、正式的意见书、文档,以 及提问和回答来相互通信。历史已经证明,这样会产生大量误解。忽略重要信息,无法建立 成功的工作关系。5. 如何理解模块独立性?用什么指标来衡量模块独立性?答:如果两个模块互相独立,那么对其中一个模块进行编码、测试或修改时可以完全不考虑 另一个模块对它的影响。因此,用模块独立性作为衡量模块结构是否容易编码、容易测试、 容易修改的标准是合适的。但是,在一个系统的模块结构中没有哪两个模块可以完全独立。 所以,要力争模块之间尽量独立,以得到一个质量良好的模块结构。般采用两个准则度量模块独立性。即模块间的耦合和模块的内聚。6. 模块独立性与信息隐蔽(反映模块化有效程度的属性)有何关系?答:模块独立性就是指软件系统中每个模块只涉及软件要求的具体的子功能,而和如见系统 中其他的模块的接是简单的。信息隐蔽是指每个模块的实现细节对于其他的模块来说是隐 蔽的。也就是说,模块中所包含的信息(包括数据和进程)不允许其他不需要这些信息的模 块使用。如果软件系统做到了信息隐蔽,及定义和实施了对模块的过程细节和局部数据结构的存取限 制,那么这些模块相互间的接就是简单的。这组模块的独立性就是比较强。事实上,衡量 模块独立性的一个准则就是模块内聚,达到信息隐蔽的模块就是信息内聚模块,他是高内聚 情形,模块独立性当然很强。21. PAD图的特点是什么?答:(1)使用结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。(2)PAD描绘的程序结构十分清晰。(3)用PAD图表现的程序逻辑,易懂,易读。(4)容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成。(5)即可用于表示程序逻辑,也可用于描绘数据结构。(6)图的符号支持自顶向下,逐步求精方法的使用。22. 用PDL表示的程序结构一般有哪几种?答:(1)顺序结构(2)选择结构(3)重复结构5.软件复杂性有哪几类?软件复杂性度量模型应遵循哪些基本原则?从6个方面描述软件复杂性:1)理解程序的难度;2)改错及维护程序的难度;3)向他人解释程序的难度;4)按指定方法修改程序的难度;5)根据设计文档编写程序的工作量;6)执行程序时需要资源的成度。软件复杂性度量模型应遵循的基本原则:1)软件复杂性与程序大小的关系不是线性的;2)控制结构复杂的程序较复杂;3)数据结构复杂的程序较复杂;4)转向语句使用不当的程序较复杂;5)循环结构比选择结构复杂,选择结构又比顺序结构复杂;6)语句,数据,子程序和模块在程序中的次序对软件复杂性都有影响;7)全程变量,非局部变量较多时程序较复杂;8)函数副作用比显式参数传递更难以捉摸;9)参数按地址传递比按值传递更复杂;10)具有不同作用的变量共用一个名字时较难理解;11)模块间或过程间联系密切的程序较复杂;12)嵌套深度越深程序越复杂。4.为什么软件需要维护?维护有哪几种类型?简述它们的维护过程。答:软件维护的原因归结起来有3种类型:(1)改正在特定的使用条件下暴露出来的一些 潜在程序错误或设计缺陷;(2)因在软件使用过程中数据环境发生变化或处理环境发生变 化,需要修改软件以适应这些变化;(3)用户和数据处理人员在使用时会提出改进现有功 能、增加新的功能以及改善总体性能的要求,为满足这些要求,就需要修改软件把这些要求 纳入到软件之中。软件维护的类型:(1)改正性维护。为了识别和纠正软件错误、改正软件性能上的缺陷、 排除实施中的误使用、应当进行的改正错误的过程;(2)适应性维护。为使软件适应运行 环境的变化而去修改软件的过程;(3)完善性维护。为了满足用户对软件提出的新的功能 与性能要求而进行的维护活动。(4)预防性维护。为了提高软件的可维护性、可靠性等所 进行的维护。7. 改错性维护与“排错”是否是一回事?为什么?答:不是一回事。改错性维护是在软件交付之后,针对在特定情况下暴露的本来掩藏的错误 进行诊断和改正的过程。排错是指在软件测试阶段,程序存在大量的错误,通过测试来发现 错误,通过排错来纠正错误。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!