软件工程复习题
1. 什么是Use Case(用例)?它在什么时候用?
答案:
use case是对一个actor(活动者)使用系统的一项功能时所进行的交互过程的一个文字描述序列。
用例是代表系统中各个项目相关人员之间就系统的行为所达成的契约。可以描述用户提出的一些可见的需求或者对应一个具体的用户目标。
2. RUP将软件生命周期分为哪几个阶段?主要任务是什么?
1. 初始阶段Inception:不是需求分析,而是可行性分析
2. 细化阶段Elaboration:不是需求分析或设计过程,而是迭代式实现核心体系结构,缓解高风险问题
3. 构造阶段Construction:实现遗留下来的风险较低和比较容易的元素,准备部署
4. 移交阶段Transition:测试,部署
3. 比较活动图(Activity diagram)和状态图(State diagram)。
Activity diagram和State diagram描述的重点不同:
Activity diagram描述的是从activity到activity的控制流,而State diagram描述的是对象的状态及状态之间的转移。
Activity diagram和State diagram使用的场合不同:对于以下几种情况可以使用Activity diagram:分析用例、理解涉及多个用例的工作流、处理多线程应用。
对于下面的情况要使用State diagram:显示一个对象在其生命周期内的行为。
4. 比较事件流(Flow of events)和活动图(Activity diagram)的异同
Flow of event和Activity diagram都可以描述Use-Case的内部活动和细节。
不同之处是,Flow of event是文字性的描述,一般以文本文件的形式出现,Activity diagram 是用图形化的方法来描述Use-Case的内部活动。
5. 请描述顺序图(Sequence Diagram) 和协作图(Collaboration Diagram) 的异同
相同
Sequence Diagram 和Collaboration Diagram 都是用于描述模型动态特性的交互图。
Sequence Diagram 和Collaboration Diagram从语意上讲是相同的,他们只是从不同的方面来描述一次交互。
不同
Sequence Diagram重点强调消息的时间顺序
Collaboration Diagram强调一次交互中各个对象之间的关系
6. RUP的三个核心特征是什么?
答案: (答对2个或以上既可)
1. 用例驱动
2. 体系结构为中心
3. 迭代开发
7. 在UML建模中使用“包”是为了达到怎样的效果?
在UML中,包是分组事物的一种,它是建模时用来组织模型中的元素的,在系统运行时并不存在包的实例。包在开发大型软件系统时是一个非常重要的机制,它就象一个“容器”,可用于组织模型中的相关元素以便更容易理解。
8. 什么是活动图、状态图?
状态图:描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件,以及因状态转移而伴随的动作。
活动图:用于描述系统的工作流程和并发行为。
9. 什么是软件危机?产生原因是什么?软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。产生原因: ⑴ 软件规模越来越大,结构越来越复杂。⑵ 软件开发管理困难而复杂。⑶ 软件包开发费用不断增加。⑷ 软件开发技术落后。⑸ 生产方式落后,仍采用手工方式。⑹ 开发工具落后,生产率提高缓慢。
10. 什么是软件工程?它目标和内容是什么?软件工程就是用科学的知识程和技术原理来定义,开发,维护软件的一门学科。软件工程目标:付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。软件工程内容:研究内容包括开发技术和开发管理两个方面。开发技术主要研究:软件开发方法,开发过程,开发工具和环境。开发管理主要研究:软件管理学,软件经济学,软件心理学。
11. 什么是软件生存周期?它有哪几个活动?软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。包括:可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。
12. 什么是软件生存周期模型?有哪些主要模型?生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。主要有:瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。
13. 什么是需求分析?需求分析阶段的基本任务是什么? 需求分析:开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。 基本任务: ⑴问题识别:双方确定对问题的综合需求,这些需求包括功能需求,性能需求,环境需求,用户界面需求。 ⑵分析与综合,导出软件的逻辑模型 ⑶编写文档:包括编写"需求规格说明书","初步用户使用手册","确认测试计划","修改完善软件开发计划"
14. 什么是数据流图?其作用是什么?其中的基本符号各表示什么含义? 数据流图(DFD):以图形的方式描述数据在系统中流动和处理的过程。只反映系统必须完成的逻辑功能,是一种功能模型。
15. 什么是软件概要设计?该阶段的基本任务是什么?把一个软件需求转换为软件表示时,首先设计出软件总的体系结构。称为概要设计或结构设计。基本任务:⑴设计软件系统结构,具体为:采用某种设计方法,将一个复杂的系统按功能划分为模块。确定每个模块的功能。 确定模块之间的调用关系。 确定模块之间的接口(模块之间传递的信息) 评价模块的结构质量 ⑵进行数据结构及数据库的设计⑶编写概要设计的文档 主要内容有:概要设计说明书,数据库说明书(DBMS的简介,概念模型,逻辑设计,结果)用户手册,修订测试计划(测试的策略﹑方法﹑步骤)⑷评审:是否完整地实现了规定的功能﹑性能要求。设计方案是否可行。关键的处理及内部接口定义的正确性,有效性,各部分的一致性。
16. 软件设计的基本原理包括哪些内容?⑴模块化:模块是软件的组成部分,是具有独立功能且可命名的一段程序,所有模块组成 整体,可以满足问题的要求。模块化即按照一定的原则,将软件划分成若干个模块,每个模块完成一个特定的功能,然后把这些模块按照某种方法组装成一个软件系统。(可降低复杂度、减少工作量)模块具有以下几种特性:接口:模块的输入输出。 功能:指模块实现什么功能。逻辑:描述模块内部如何实现要求及所需的数据。 状态:该模块的运行环境,模块间调用与被调用关系。 ⑵抽象:认识复杂现象过程所使用权的工具,只考虑事物本质的共同特性,忽略细节和其它因素。通过抽象确定组成软件的过程实体。 ⑶信息隐蔽:将模块实现自身功能的细节与数据"隐蔽"起来。模块间仅交换为完成系统功能所必须的信息。⑷模块独立性:每个模块只完成系统要求的独立的子功能。
17. 衡量模块独立性的两个标准是什么?各表示什么含义? 内聚和耦合 内聚:又称为块内联系,指模块内部各成分之间相互关联的程度,以高内聚为设计目标。 耦合:也称块间联系,模块之间相互联系程度的度量,联系越紧密,耦合性越强,独立性越差,以低耦合为设计目标。
18. 模块的耦合性有哪几种?各表示什么含义?⑴内容耦合:一个模块直接操作或修改另一模块的数据,或者不通过正常入口直接转入另一模块⑵公共耦合:两个或多个模块通过共同引用一个全局数据环境相互作用 ⑶控制耦合:模块之间通过传递控制信息相互作用⑷标记耦合:两个模块之间通过传递公共指针或地址相互作用的耦合⑸数据耦合:模块之间通过传递数据交换信息 ⑹无耦合:模块间无任何关系,独立工作
19. 模块的内聚性有哪几种?各表示什么含义? ⑴偶然内聚:一个模块各个成分之间毫无关系 ⑵逻辑内聚:将几个逻辑上相关的功能放在同一个模块中 ⑶时间内聚:一个模块完成的功能在同一时间执行 ⑷过程内聚:一个模块内部的处理成分是相关的,而且必须以特定的次序执行⑸通信内聚:一个模块的所有成分都集中在同一个数据结构上 ⑹顺序内聚:一个模块的各个成分同一个功能密切相关,而且一个成分的输出,作为另外一个成分的输入⑺功能内聚:模块内的所有成分属于一个整体,完成单一的功能。(内聚最高)
20. 什么是模块的影响范围?什么是软件的控制范围?它们之间应建立什么关系?模块的影响范围(作用域):受该模块内一个判定影响的所有模块的集合模块的控制范围(控制域):这个模块本身以及所有直接或间接从属于它的模块的集合一个模块的影响范围(作用域),应处在这个模块的模块的控制范围(控制域)内。
21. 什么样是"事物流"?什么是"变换流"?试将相应形式的数据流图转换为软件结构图数据流图(DFD)一般可分为"变换流","事物流"两种。"变换流":由输入﹑输出﹑变换(或称处理)三部分组成,是一顺序结构。"事物流":它的某个加工,分离成许多发散的数据流,形成许多加工路径,并且根据输入值选择其中一个路径来执行。(这人加工称为事务处理中心)
22. 详细设计的基本任务是什么,有哪几种描述方法?答:详细设计的基本任务包括:1、为每个模块进行详细的算法设计 2、为模块内的数据结构进行设计 3、对数据库进行物理设计 4、其他设计 5、编写详细设计说明书 6、评审 详细设计的描述方法有图形、表格和语言,其中图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具。
23. 结构化程序设计的基本要点是什么?答:主要有三个:(1)采用自顶向下、逐步求精的程序设计方法 (2)使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,这三种基本结构的共同点是单入口、单出口。 (3)主程序员组的组织形式。
24. 软件测试的目的是什么?软件测试中,应注意哪些原则?答:软件测试的目的是为了发现软件的错误。软件测试中应注意的原则有:(1)测试用例应由输入数据和预期的输出数据两部分组成。这样便 于对照检查,做到有的放矢。 (2)测试且例不仅选用合理输入数据,还要选择不合理的输入数据。这样能更多地发现错误,提高程序的可靠性。对于不合理的输入数据,程序应拒绝接受,并给出相应的提示。 (3)除了检查程序是否做了它应该做的事,还应该检查程序是否做了它不应该做的事。 (4)应制定测试计划并严格执行,排除随意性。 (5)长期保留测试用例。 (6)对发现错误较多的程序段,应进行更深入的测试。 (7)程序员应避免测试自己的程序。测试是一种"挑剔性"的行为,心理状态是测试自己程序的障碍。
25. 什么是白盒测试法?有哪些覆盖标准?试对他们的检错能力进行比较?答:白盒法测试法把测试对象看作一个打开的盒子,测试人员须了解程序内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。白盒法有下列几种覆盖标准:语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖从上到下的覆盖标准其检错能力也从弱到强,其中条件组合发现错误的能力较强,凡满足其标准的测试用例,也必然满足前四种覆盖标准。在实际的逻辑测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例来达到路径覆盖的测试标准。
26. 什么是黑盒测试法?采用黑盒技术测试用例有哪几种方法?这些方法各有什么特点?答:黑盒测试法把被测试对象看成是一相黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。采用黑盒技术测试用例的方法有:等价类的划分、边界值分析、错误推测和因果图。等价类的划分,是将输入数据按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。这样就把漫无边迹的随机测试改为有针对性的等价类测试,用少量有代表性的例子代替大量测试目的相同的例子,能有效地提高测试效率。但这个方法的缺点是没有注意选择某些高效的、能够发现更多错误的测试用例。边界值分析法一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子做代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于和刚刚小于边界值的测试数据。(边界情况是指输入等价类和输入等价类边界上的情况。)这种方法可以查出更多的错误,因为在程序中往往在处理边界情况时易发生错误。错误推测法是在测试程序时,人们根据经验或直觉推测程序中可能存在的错误,从而有针对性地编写检查这些错误的测试用例。因果图能够有效地检测输入条件的各种组合可能会引起的错误。它的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。这几种方法都不能提供一组完整的测试用例,在实际测试中应把各种方法结合起来使用。综合策略:就是联合使用上述几种测试方法,尽可能多地发现程序中的错误。
27. 软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?答:软件测试要经过的步骤是:单元测试→集成测试→确认测试→系统测试。单元测试对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计文档。集成测试是为了检查与设计相关的软件体系结构的有关问题,也就是检查概要设计是否合理有效。确认测试主要是检查已实现的软件是否满足需求规格说明书中确定了的各种需求。系统测试是把已确认的软件与其他系统元素(如硬件、其他支持软件、数据、人工等)结合在一起进行测试。以确定软件是否可以支付使用。
28. 说明对象模型的特征,举现实世界的例子,给出它的一般关系、聚集关系的描述。答:对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述。表现了对象的相互关系。该模型的特征是用对象图来表现对象的结构、属性和操作,它是分析阶段三个模型的核心,也是其他两个模型的框架。在对象模型中,定义了两种类的层次结构:一般化关系和聚集关系。一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式,即"一般-具体"的关系。比如下图所示:聚集关系是一种"整体-部分"关系。在这种关系中,有整体类和部分类之分。如下图所示:
29. 说明动态模型的特征,说明事件,脚本、状态的含义。动态模型是与时间和变化有关的系统性质,该模型描述了系统的控制结构,它表示了瞬时的、行为化的系统控制性质,它关心的是系统的控制,操作的执行顺序,它从对象的事件和状态的角度出发,表现了相互行为。事件是指特定时刻发生的某件事情,它是某事情发生的信号,它没有持续时间,它是一种相对性的快速事件。脚本是完成系统某个功能事件序列,侧重于表达说明发生于系统执行过程中的一个特定场景,用事件跟踪图表达。状态是对象属性值的抽象。状态指明了对象对输入事件的响应。
30. 说明功能模型的特征,比较功能模型的DFD和结构化方法的DFD异同。答:功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑所计算的次序。功能模型由多张数据流图组成。数据流图说明数据流是如何从外部输入、经过操作和内部存储输出到外部的。功能模型也包括对象模型中值的约束条件。
31. 说明三种分析模型的关系。答:三种分析模型之间关系是这样的:功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。
32. 说明对象建模的过程。答:对象建模的过程如下:首先标识类和关联,因为它们影响了整体结构和解决问题的方法,其次是增加属性,进一步描述类和关联的基本网络,使用继承合并和组织类,最后将操作增加到类中去作为构造动态模型和功能模型的副产品。(1)确定类。构造对象模型的第一步是标出来自问题域的相关对象类,包括物理实体和概念。所有类在应用中都必须有意义。检查问题陈述中的所有名词,产生暂定类。然后去掉不必要的类和不正确的类。(2)准备数据字典。为所有建模实体准备一个数据词典。准确描述各个类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制。(3)确定关联。两个或多个类之间的相互依赖就是关联。从问题中抽取所有可能的关联表示,把它们记下来,但不要过早去细化这些表述。(4)确定属性。属性是个体对象的性质,通常用修饰性的名词词组来表示。只考虑与具体应用直接相关的属性,不考虑那些超出问题范围的属性,首先找出重要属性,避免那些只用于实现的属性,要为各个属性取有意义的名字。(5)使用继承来细化类。(6)完善对象模型。
33. 说明动态建模的过程。答:动态建模的过程如下:(1)准备脚本 (2)确定事件 (3)准备事件跟踪表 (4)构造状态图
34. 说明功能建模的过程。答:功能建模的过程如下:(1)确定输入、输出值 (2)建立数据流图
35. 软件项目计划中包括哪些内容?答:软件项目计划内容包括:(1)范围 (2)资源 (3)进度安排 (4)成本估算 (5)培训计划
36. 软件开发成本估算方法有哪几种?答:软件开发成本估算的方法主要有:(1)自顶向下估算方法 (2)自底向上估算方法 (3)差别估算方法 以及专家估算法、类推估算法、算式估算法等几类方法。
37. CMM模型将软件开发组织的能力成熟度分为几级?各级的主要内容是什么?
答案:
CMM的能力成熟度共分五级,L1初始级、L2可重复级、L3己定义级、L4己管理级、L5优化级。
初始级L1处于无序工作状态,无系统的规范,故在表中略去。二级以上包含若干关键过程域。
L2可重复级 需求管理 软件项目计划 项目跟踪和监督 分包合同管理 软件质量保证 软件配置管理
L3己定义级 组织的过程焦点 组织的过程定义 培训大纲 集成化软件管理 软件产品工程 组间协调 同行评审
L4 己管理级 定量的过程管理 软件质量管理
L5 优化级 缺陷的预防 技术更新管理 过程变更管理
38. 软件风险分析包括几个部分?基本内容是什么?
答:风险标识、风险估算、风险评价、风险管理
风险标识:识别风险的有效方法,风险检测表
风险估算:确定风险对软件项目及产品的影响,
风险评价:给出风险列表,确定优先级
风险管理:对风险进行评估与管理
39. 软件项目管理的目的、任务
答案:目的:为了使软件项目能够在预定成本、进度、质量的前提下顺利完成,必须对软件工程项目进行计划、组织、监控和管理。
任务:制定软件项目的实施计划和方案;对人员进行组织和分工;按照计划进度,以及成本管理、风险管理、质量管理的要求进行软件开发,完成软件项目的各项要求和任务。
40. 什么是Rational Unified Process (RUP)?简述RUP的四个阶段。
答案:RUP是软件工程的过程。它提供了在开发组织中分派任务和责任的纪律化方法。它的目标是在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品。
四个阶段:
¨ 先启 – 定义整个项目的范围
¨ 精化 – 制定项目计划、描述功能、建立体系架构框架
¨ 构建 – 构造软件产品
¨ 产品化 – 将软件产品移交到最终用户手中