考研软件工程复试笔试面试详细问答.docx
《考研软件工程复试笔试面试详细问答.docx》由会员分享,可在线阅读,更多相关《考研软件工程复试笔试面试详细问答.docx(13页珍藏版)》请在冰豆网上搜索。
考研软件工程复试笔试面试详细问答
1.什么是软件工程?
目前有哪几种主要的软件工程方法?
概括地说,软件工程是指导计算机软件开发和维护的一门工程学科.采用工程的概念、原理、
技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
但软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义。
主要有传统方法也称为经典软件工程方法或生命周期方法或结构化范型和面向对象方法。
2、流程图与数据流图有什么主要区别?
(1)数据流图(dateflowdiagram,DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是从数据的角度来描述一个系统的;而流程图则是从对数据加工的角度来描述系统的;
(2)数据流图中的箭头是数据流,而流程图中的箭头则是控制流,它表达的是程序执行的次序;
(3)数据流图适合于宏观地分析一个组织业务概况,而程序流程图只适合于描述系统中某个加工的执行细节。
(4)数据流程图应该重点描述了数据加工的过程,主要是模块内部,数据流图则是描述模块之间的关系。
3•软件需求分析的任务是什么?
有哪些主要步骤?
需求分析的基本任务是深入描述软件的功能和性能、确定软件设计的约束和软件同其它系统元素的接口细节、定义软件的其它有效性需求,总之,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
主要步骤:
1.冋题识别
(1)功能需求:
明确所开发的软件必须具备什么样的功能。
(2)性能需求:
明确待开发的软件的技术性能指标。
(3)环境需求:
明确软件运行时所需要的软、硬件的要求。
(4)用户界面需求:
明确人机交互方式、输入输出数据格式。
2.分析与综合,导出软件的逻辑模型
分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划
分成各个子功能。
用图文结合的形式,建立起新系统的逻辑模型。
3.编写文档
(1)编写“需求规格说明书”,把双方共同的理解与分析结果用规范的方式描述出来,作为今后各项工作的基础。
(2)编写初步用户使用手册,着重反映被开发软件的用户功能界面和用户使用的具体要求,用户手册能强制分析人员从用户使用的观点考虑软件。
(3)编写确认测试计划,作为今后确认和验收的依据。
(4)修改完善软件开发计划。
在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确地估计开发成本、进度及资源要求,因此对原计划要进行适当修正。
4.简述结构化分析、设计的要点:
结构化分析方法适合于数据处理类型软件的需求分析。
其要点是"自顶向下"地开发系统,由整体到各组成部分,由表及里,由抽象到具体,逐步求精•
(1)模块化
⑵由顶向下,逐步求精.
(3)上层模块分解为下层模块,有三种不同的结构形式,即顺序结构,选择结构和循环结构•
5.数据字典包含哪些主要内容?
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分
据字典内容包括:
数据库中所有模式对象的信息,如表、视图、簇、及索引等。
分配多少空间,当前使用了多少空间等。
列的缺省值。
约束信息的完整性。
用户的名字。
用户及角色被授予的权限。
用户访问或使用的审计信息。
其它产生的数据库信息。
6•软件测试的目标是什么,有哪几种主要有测试方法?
软件测试的目标:
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
⑶成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试的方法有动态测试、静态测试和正确性证明3种。
7•白盒测试主要有哪些覆盖?
语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、
路径覆盖
8选择一种程序设计语言的主要有哪些依据?
为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。
上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。
(1)系统用户的要求
(2)可以使用的编译程序
(3)可以得到的软件工具
(4)系统规模
(5)程序员的知识
(6)软件可移植性要求
(7)软件的应用领域
9.软件的维护的目标是什么,有哪几种维护类型?
纠正在使用过程中暴露出来的错误而进行的改进性维护,适应外部环境的变化而进行的适应性维护,改进原有的软件而进行的完善性维护,以及改进将来的可维护性和可靠性而进行的预防性维护。
软件维护的分类:
软件维护主要划分为纠错性维护、适应性维护和完善性维护。
(1)纠错性维护。
由于前期的测试不可能揭露软件系统中所有潜在的错误,用户在
使用软件时仍将会遇到错误,诊断和改正这些错误的过程称为纠错性维护。
(2)适应性维护。
由于新的硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新的环境而引起的程序修改和扩充活动称为适应性维护。
(3)完善性维护。
在软件的正常使用过程中,用户还会不断地提出新的需求。
为了满足用户新的需求而增加软件功能的活动称为完善性维护。
10.简述提高软件质量的主要措施。
复审:
是在软件生命周期每个阶段结束之前,都采用一定的标准对该段产生的软件配置成
分进行严格的正式或非正式的检测。
复查:
是检查已有的材料,以断定在软件生命周期某个阶段的工作是否能够开始或继续。
管理复审:
是向开发组织或使用部门的管理人员提供有关项目的总体状况、成本和进度等方面的情况,以便他们从管理角度对开发工作进行审查。
测试:
包括测试计划、测试过程和测试结果3个阶段。
11.面向对象如何实现模块独立性,其偶合和内聚的含义是什么?
因为对象是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。
因此,对象内部各种元素彼此结合得很紧密。
内聚性相当强,由于完成对象所需要的元素(数据和方法)基本上都被封装在对象内部,它与外界的联系自然就比较少。
因此,对象之间的耦合通常比较松。
总之,面向对象使用对象、类、继承和消息的方法,既使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信来实现模块的独立性。
12.面向对象和面向过程软件工程有哪些区别?
(1)面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
(2)面向过程是把一件事一项工程分解成为一个个小的功能,用一个个函数来实现.
面向对象是把事情看成是一个个小的对象组成的,或者说一个个小部分组成的,这些对象之间的相互关系,构成了整个项目•在面向对象的思想中,万物皆对象。
而"类",就是对象的抽象或者说是概括。
13.简述对象、类、消息、方法的基本概念。
(1)对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)类是具有相同或相似性质的对象的抽象。
对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(3)对象之间进行通信的结构叫做消息。
在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。
发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。
一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
(4)类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。
14•简述面向对象分析设计的三个模型。
答:
三个模型:
对象模型、动态模型、功能模型
(1)对象模型描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。
构造对象模型的目的在于找出与应用程序密切相关的概念。
对象模型用包含对象及对象的关系图表示。
(2)动态模型着重于系统的控制逻辑,考察在任何时候对象及其关系的改变,描述这些涉及时序和改变的状态。
动态模型包括状态图和事件跟踪图。
状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。
事件跟踪图则侧重于说明系统执行过程中的一个特点“场景”,也叫做脚本(seenarios),是完成系统某个功能的一个事件序列。
脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。
(3)功能模型着重于系统内部数据的传送和处理。
功能模型表明,通过计算,从输出数据能得到什么样的输出数据,但不考虑参加计算的数据按什么时序执行。
功能模型由多个数据流图组成,它们指明从外部输出,通过操作和内部存储,直到外部输出的整个数据流
情况。
功能模型还包括了对象模型内部数据间的限制。
功能模型中的数据流图往往形成一个层次结构,一个数据流图的过程可以由下一层的数据流图作进一步的说明。
1.什么是软件工程?
目前有哪几种主要的软件工程方法?
概括地说,软件工程是指导计算机软件开发和维护的一门工程学科.采用工程的概念、原理、
技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
但软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义。
主要有传统方法也称为经典软件工程方法或生命周期方法或结构化范型和面向对象方法。
2、流程图与数据流图有什么主要区别?
(1)数据流图(dateflowdiagram,DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是从数据的角度来描述一个系统的;而流程图则是从对数据加工的角度来描述系统的;
(2)数据流图中的箭头是数据流,而流程图中的箭头则是控制流,它表达的是程序执行的次序;
(3)数据流图适合于宏观地分析一个组织业务概况,而程序流程图只适合于描述系统中某个加工的执行细节。
(4)数据流程图应该重点描述了数据加工的过程,主要是模块内部,数据流图则是描述模块之间的关系。
3•软件需求分析的任务是什么?
有哪些主要步骤?
需求分析的基本任务是深入描述软件的功能和性能、确定软件设计的约束和软件同其它系统元素的接口细节、定义软件的其它有效性需求,总之,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
主要步骤:
1.冋题识别
(1)功能需求:
明确所开发的软件必须具备什么样的功能。
(2)性能需求:
明确待开发的软件的技术性能指标。
(3)环境需求:
明确软件运行时所需要的软、硬件的要求。
(4)用户界面需求:
明确人机交互方式、输入输出数据格式。
2.分析与综合,导出软件的逻辑模型
分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划
分成各个子功能。
用图文结合的形式,建立起新系统的逻辑模型。
3.编写文档
(1)编写“需求规格说明书”,把双方共同的理解与分析结果用规范的方式描述出来,作为今后各项工作的基础。
(2)编写初步用户使用手册,着重反映被开发软件的用户功能界面和用户使用的具体要求,用户手册能强制分析人员从用户使用的观点考虑软件。
(3)编写确认测试计划,作为今后确认和验收的依据。
(4)修改完善软件开发计划。
在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确地估计开发成本、进度及资源要求,因此对原计划要进行适当修正。
4.简述结构化分析、设计的要点:
结构化分析方法适合于数据处理类型软件的需求分析。
其要点是"自顶向下"地开发系统,由整体到各组成部分,由表及里,由抽象到具体,逐步求精•
(1)模块化
⑵由顶向下,逐步求精.
(3)上层模块分解为下层模块,有三种不同的结构形式,即顺序结构,选择结构和循环结构•
5.数据字典包含哪些主要内容?
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分据字典内容包括:
数据库中所有模式对象的信息,如表、视图、簇、及索引等。
分配多少空间,当前使用了多少空间等。
列的缺省值。
约束信息的完整性。
用户的名字。
用户及角色被授予的权限。
用户访问或使用的审计信息。
其它产生的数据库信息。
6•软件测试的目标是什么,有哪几种主要有测试方法?
软件测试的目标:
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
⑶成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试的方法有动态测试、静态测试和正确性证明3种。
7•白盒测试主要有哪些覆盖?
语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、
路径覆盖
8选择一种程序设计语言的主要有哪些依据?
为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。
上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。
(1)系统用户的要求
(2)可以使用的编译程序
(3)可以得到的软件工具
(4)系统规模
(5)程序员的知识
(6)软件可移植性要求
(7)软件的应用领域
9.软件的维护的目标是什么,有哪几种维护类型?
纠正在使用过程中暴露出来的错误而进行的改进性维护,适应外部环境的变化而进行的适应性维护,改进原有的软件而进行的完善性维护,以及改进将来的可维护性和可靠性而进行的预防性维护。
软件维护的分类:
软件维护主要划分为纠错性维护、适应性维护和完善性维护。
(1)纠错性维护。
由于前期的测试不可能揭露软件系统中所有潜在的错误,用户在
使用软件时仍将会遇到错误,诊断和改正这些错误的过程称为纠错性维护。
(2)适应性维护。
由于新的硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新的环境而引起的程序修改和扩充活动称为适应性维护。
(3)完善性维护。
在软件的正常使用过程中,用户还会不断地提出新的需求。
为了满足用户新的需求而增加软件功能的活动称为完善性维护。
10.简述提高软件质量的主要措施。
复审:
是在软件生命周期每个阶段结束之前,都采用一定的标准对该段产生的软件配置成
分进行严格的正式或非正式的检测。
复查:
是检查已有的材料,以断定在软件生命周期某个阶段的工作是否能够开始或继续。
管理复审:
是向开发组织或使用部门的管理人员提供有关项目的总体状况、成本和进度等方面的情况,以便他们从管理角度对开发工作进行审查。
测试:
包括测试计划、测试过程和测试结果3个阶段。
11.面向对象如何实现模块独立性,其偶合和内聚的含义是什么?
因为对象是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。
因此,对象内部各种元素彼此结合得很紧密。
内聚性相当强,由于完成对象所需要的元素(数据和方法)基本上都被封装在对象内部,它与外界的联系自然就比较少。
因此,对象之间的耦合通常比较松。
总之,面向对象使用对象、类、继承和消息的方法,既使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信来实现模块的独立性。
12.面向对象和面向过程软件工程有哪些区别?
(1)面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
(2)面向过程是把一件事一项工程分解成为一个个小的功能,用一个个函数来实现.
面向对象是把事情看成是一个个小的对象组成的,或者说一个个小部分组成的,这些对象之间的相互关系,构成了整个项目•在面向对象的思想中,万物皆对象。
而"类",就是对象的抽象或者说是概括。
13.简述对象、类、消息、方法的基本概念。
(1)对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)类是具有相同或相似性质的对象的抽象。
对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(3)对象之间进行通信的结构叫做消息。
在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。
发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。
一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
(4)类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。
14.简述面向对象分析设计的三个模型。
答:
三个模型:
对象模型、动态模型、功能模型
(1)对象模型描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。
构造对象模型的目的在于找出与应用程序密切相关的概念。
对象模型用包含对象及对象的关系图表示。
(2)动态模型着重于系统的控制逻辑,考察在任何时候对象及其关系的改变,描述这些涉及时序和改变的状态。
动态模型包括状态图和事件跟踪图。
状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。
事件跟踪图则侧重于说明系统执行过程中的一个特点“场景”,也叫做脚本(seenarios),是完成系统某个功能的一个事件序列。
脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。
(3)功能模型着重于系统内部数据的传送和处理。
功能模型表明,通过计算,从输出数据能得到什么样的输出数据,但不考虑参加计算的数据按什么时序执行。
功能模型由多个数据流图组成,它们指明从外部输出,通过操作和内部存储,直到外部输出的整个数据流
情况。
功能模型还包括了对象模型内部数据间的限制。
功能模型中的数据流图往往形成一个层次结构,一个数据流图的过程可以由下一层的数据流图作进一步的说明。