软件工程 复习题解析 联系客服

发布时间 : 星期一 文章软件工程 复习题解析更新完毕开始阅读c1bc16867e192279168884868762caaedc33ba56

2.什么是软件工程?它有哪些本质特征?

答:软件工程是指导计算机软件开发和维护的一门工程学科。主要特征有:1.软件工程关注于大型程序的构造;2.软件工程的中心课题是控制复杂性;3.软件是经常变化的,开发过程中必须考虑软件将来可能的变化;4.开发软件的效率非常重要;5.和谐的合作是开发软件的关键;6.软件必须有效的支持它的用户;7.在软件工程领域中是有由具有一种文化背景的人替具有一种文化背景的人完成一些工作。

3.什么是软件过程?它与软件工程方法学有何关系?

答:软件过程是为了获得高质量软件所需要完成的一些列任务的框架,它规定了完成各项工作步骤。概括地说,软件过程描述为了开发出客户需要的软件,什么人、在什么时候、做什么事以及怎样做这些事以实现某一个特定的具体目标。而通常把在软件生命周期全过程中使用的一整套技术方法的集合称为工程方法学,也称范型。软件过程是软件工程方法学的三个要素(方法、工具和过程)之一。

4.在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?

答:开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后能带来的效益是否大到值得投资开发这个系统的程度,如果做不到这些,那么花费在这些工程上的任何时间,人力,软硬件资源和经费,都是无谓的浪费。可行性研究的实质是要进行一次大大压缩简化了的系统分析和设计过程,就是在高层次上以较抽象的方式进行的系统分析和设计的过程。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 技术上的可行性。对要开发项目的功能,性能和限制条件进行的分析,确定在现有的资源条件下进行分析,技术风险有多大,项目是否能实现,这些即为技术可行性的研究内容。 经济上的可行性。进行开发成本烦人估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发,这些即为经济可行性研究的内容。

操作可行性。有时还要研究社会可行性问题,研究开发的项目是否存在任何侵犯,妨碍等责任问题。社会可行性所涉及的范围也比较广,它包括合同,责任,侵权和其他一些技术人员常常不了解的陷阱等。必要时还应该从法律,社会效益等更为广泛的方面研究每种解法的可行性。

5.为什么要进行需求分析?通常对软件系统有哪些需求?

答:为了开发出真正满足用户需求的软件产品,准确定义未来系统的目标,确定为了满足用户的需求系统必须做什么,就必须进行准确的需求分析。通常对软件系统的需求有:功能需求;性能需求;可靠性和可用性需求;出错处理需求;接口需求;约束;逆向需求;文档需求,数据需求等等。

6.怎样与用户有效的沟通以获得用户的真实需求?

答:1.访谈:有两种基本形式,分别是正式的和非正式的访谈;2.面向数据流自顶向下求精:通常从数据流图的输出端着手分析,根据输出数据定义给出最基本的数据元素的定义;3.简易的应用规格说明技术:主要是面向团队的一种收集需求的方法,通过会议,大家提出的一致性意见;4.快速建立软件原型,快速建立一个能够演示目标系统主要功能的可运行的程序,让用户在使用中完善需求规格说明书。 7.什么是模块测试和集成测试?它们各有什么特点?

答:模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。其特点是:主要应用白盒测试的技术,对多个模块的测试可以并行地进行。

集成测试是把模块装配在一起形成完整的软件包,在装配的同时进行测试,主要目的是发现与接口有关的问题。特点是:可以发现模块间接口存在的问题。

8.软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?

答:软件的可维护性与可理解性、可测试性、可修改性、可移植性和可重用性有关。在每个阶段结束前的技术审查和管理复查工程中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真的复查。 9.什么是面向对象方法学?它有哪些优点?

答:面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现解法的解法空间在结构上尽可能一致。

优点:(1)与人类习惯的思维方法一致;(2)稳定性好;(3)可重用性好;(4)较易开发大型软件产品;(5)可维护性好;(6)比较容易修改;(7)比较容易理解;(8)易于测试和调试。

10.什么是对象模型?建立对象模型时主要使用哪些图形符号?这些符号的含义是什么?

答:对象模型表示静态的,结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间关系的映射,描述了系统的静态结构。在UML中,用类图来建立对象模型,表示一个类及属于该类的对象。

11.面向对象设计应该遵循哪些准则?简述每条准则的内容。 答:(1)模块化,面向对象软件开发模式,很自然地支持了把系统分解成模块的设计原理:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合一起所构成的模块;(2)抽象,面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明,这种接口规定了外界可以使用合法的操作符。利用这些操作符可以对类实例中包含的数据进行操作。使用者无须知道这些操作符的实现算法和类中数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据。通常把这类抽象称为规格说明抽象。(3)信息隐藏,在面向对象方法中,信息隐藏通过对象的封装性实现:类结构分离了接口与实现,从而支持了信息隐藏。对于用户来说,属性的表示方法和操作的实现算法都应该是隐藏的。(4)弱藕合,在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。主要有交互耦合和继承耦合两种。(5)强内聚,设计中使用的一个构件内的各个元素,对完成一个定义明确的目的所做出的贡献程度;(6)可重用,一是尽量使用已有的类,二是如果确实需要新建新类,则在设计这些新类时,应该考虑将来的可重复使用性。

12.为什么说类构件是目前比较理想的可重用构件?它有哪些重用方式?

答:(1)模块独立性强。具有单一,完整的功能,且经过反复测试被确认是正确的;(2)具有高度可塑性软构件的应用环境比集成电路更广阔,更复杂;(3)接口清晰,简明,可靠。

重用方式:实例重用;继承重用;多态重用。

13.面向对象实现应该选用哪种程序设计语言?为什么?

答:就目前面向对象实现可以选择的语言有:LISP、SIMULA、Modula_2、Smalltalk、Eiffel、C++和JAVA等。

因为这些面向对象的语言都具有支持面向对象实现的要求的特点:支持类和对象、具有聚集和泛化机制、实现属性和服务机制、类型检查机制、丰富的类库和高效率、持久保存对象、参数化类等特点。

14.面向对象程序设计语言主要有哪些技术优点? 答:(1)支持类与对象概念的机制;(2)实现聚集结构的机制;(3)实现泛化结构的机制;(4)实现属性和服务的机制;(5)类型检查机制;(6)类库;(7)效率;(8)持久保存对象的机制;(9)参数化类的机制;(10)开发环境。 15.良好的面向对象程序设计风格主要有哪些?

答:1.提高可重用性:提高方法的内聚、减小方法的规模、保持方法的一致性、把策略与实现分开、全面覆盖、尽量不使用全局信息、利用继承机制;2.提高可扩充性:封装实现策略、不要用一个方法遍历多条关联链、避免使用多分支语句、精心确定公有方法;3.提高健壮性:预防用户的操作错误、检查参数的合法性、不要预先确定限制条件、先测试后优化。

16.测试面向对象软件时,主要有哪些设计确认测试用例的方法?

答:为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的背景。传统的黑盒测试方法也可用于测试用例,对于面向对象的软件来说,主要还是根据动态模型和描述系统行为的脚本来设计确认测试用例。 17.测试面向对象软件时,主要有哪些设计集成测试用例的方法? 答:(1)基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用;(2)基于使用的测试。这种方法首先测试几乎不使用服务器类的那些类,把独立都测试完之后,再测试使用独立类的下一个层次的类。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。

18.什么是软件质量?试叙述它与软件可靠性的关系。

答:概括地说,软件质量是“软件与明确地和隐含地定义的需求相一致的程度”。具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何开发的软件产品都应该具有的隐含特征一致的程度。 19.什么是基线?为什么要建立基线?

答:IEEE把基线定义为:已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。

建立基线的三大原因:重现性、可追踪性和报告。

重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。可追踪性是建立项目工件之间的前后继承关系,其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。

五、 画图题(10分)

1.画出下列伪码程序的程序流程图:

START

IF p THEN

WHILE q DO f END DO ELSE BLOCK

g h

END BLIOCK END IF STOP

2.画出P127行李托运例子的判定树(P129图6.7)