软件工程(考研面试版)

文章目录

1.软件=程序+数据+系列文档

2.软件工程?目标?内容?方法?

概括地说,软件工程是指导计算机软件开发和维护的一门工程学科.
软件工程就是用科学的知识和技术原理来定义,开发,维护软件的一门学科。

软件工程目标:付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。

软件工程内容:包括开发技术和开发管理两个方面。

结构化方法学(又称为生命周期方法学):强调自顶向下顺序完成软件开发的任务。
结构化方法学中有三种基本控制结构:1.顺序2.选择3.循环
面向对象方法学:尽量模拟人类习惯的思维方式去开发。

3.软件生命周期?

软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的整个时期。软件生存周期包括:
(1)问题定义:
弄清"用户需要计算机解决什么样的问题”,提出"系统目标和范围的说明“,提交用户审查和确认。
(2)可行性分析:
把待开发系统的目标以明确的语言描述出来,并从经济、技术、法律等多个方面进行可行性分析。
(3)需求分析:
弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审。
(4)开发阶段:设计、实现、测试
总体设计,详细设计,编码,单元测试,综合测试
(5)维护:
改正性维护(由于开发测试的不彻底、不完全),适应性维护(适应环境变化),完善性维护(使用过程中提出的一些建设性意见),预防性维护(改善软件系统的可维护性和可靠性)。

** 生存周期模型:**
是指在整个软件生命周期中,软件开发过程应遵循的开发路线图。

4.软件过程

完成高质量的软件开发过程当中的一系列过程。
包含基本过程类、支持过程类、组织过程类。

5.什么是软件危机?产生原因?

软件危机是指软件在开发和维护的过程中出现的一系列严重的问题。

软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
产生原因:
⑴ 软件规模越来越大,结构越来越复杂。
⑵ 软件开发管理困难而复杂。
⑶ 软件包开发费用不断增加。
⑷ 软件开发技术落后。
⑸ 生产方式落后,仍采用手工方式。
⑹ 开发工具落后,生产率提高缓慢。

6. 软工方法学三要素是什么?

1、方法(指的是开发方法)
2、工具(支持方法的工具)
3、过程(管理过程)

** 软件工程三要素之间的关系? **
软件质量是软件工程的生命线,软件工程以质量保证为基础。
质量管理促进了过程的改进,创造了许多行之有效的软件开发方法和工具。
软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。
方法支撑过程和工具,过程和工具又促进方法学的研究。

7.瀑布模型

在这里插入图片描述
思想:
将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落
优点:
1.奠定了软件工程方法的基础;
2.流水依赖,便于分工协作;
3.推迟物理实现,易于修改文档,有复审质量保证;
不足:
与用户见面晚,成功率低,一般为25%
适用范围:
适用与系统要求明确的系统

8.v模型

通过开发和测试同时进行的方式来缩短开发周期,模型的左侧是开发阶段,右侧是测试阶段。
在这里插入图片描述

9.快速原型模型

在这里插入图片描述
思想:
软件开发人员以用户需求出发,快速开发一个原型,以便向用户展示软件系统应有的部分或全部的功能和性能,在征求用户对原型的评价意见后,进一步使需求精确化、完全化,并据此改进、完善原型,如此迭代,直到软件开发人员和用户都确认软件系统的需求并达到一致的理解位置
优点:
比瀑布模型更符合人们认识事物的过程和规律,是一种较适用的开发框架
适用:
适用于那些不能预先确切定义需求的软件系统的开发

10.螺旋模型

在这里插入图片描述
瀑布模型和原型模型的结合。
四部分组成:制定计划、风险分析、实施开发、客户评估
适用:需要具有相当丰富的风险评估经验和专门知识,价格昂贵,适用大型软件的开发

11.增量模型

一次开发一个模块,当这个模块客户满意了之后,才进行下一个模块的开发。所以产品是以一次一个构建的方式开发的
在这里插入图片描述

12.喷泉模型(面向对象的软件开发

以面向对象的软件开发方法为基础,以用户需求为动力,以对象来驱动的模型
在这里插入图片描述

13.极限编程

极限编程(简称XP)是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。
“Extreme”(极限)是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好

XP模型
即极限编程模型。四条核心原则:交流、简单、反馈和进取

14.敏捷开发

敏捷开发(scrum)是一种软件开发的流程,强调快速反应、快速迭代、价值驱动。
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。
优点:
敏捷开发的高适应性,以人为本的特性。
更加的灵活并且更加充分的利用了每个开发者的优势,调动了每个人的工作热情。
缺点:
由于其项目周期很长,所以很难保证开发的人员不更换,而没有文档就会造成在交接的过程中出现很大的困难。

15.衡量模块独立性的两个标准是什么?各表示什么含义?

内聚和耦合。
内聚:又称为块内联系,指模块内部各成分之间相互关联的程度,以高内聚为设计目标。
耦合:也称块间联系,模块之间相互联系程度的度量,联系越紧密,耦合性越强,独立性越差,以低耦合为设计目标。

(1)内聚:指块内联系,即模块的功能强度的度量;在模块划分时,要遵循“一个模块,一个功能”的原则,尽可能模块达到功能内聚。
(2)耦合:指块间联系,即软件系统结构中各模块间相互联系的紧密程度的度量。
若模块间存在耦合,应尽量使用数据耦合,少用控制耦合,慎用或者有控制地使用公共耦合,并限制公共耦合的范围,尽量避免内容耦合。
高内聚低耦合的系统具有更好的重用性、维护性、扩展性,可以更高效地完成系统的维护开发。

16.简述结构化分析、设计(面向数据流

结构化分析方法适用于数据处理类型软件的需求分析。

结构化分析:
简称SA,面向数据流进行数据分析的方法。采用自顶向下逐层分解的分析策略。顶层抽象地描述整个系统,底层具体地画出系统工程的每个细节。中间层则是从抽象到具体的过渡。

描述工具:
使用数据流图,数据字典,作为描述工具,使用结构化语言,判定表,判定树描述加工逻辑。

实现的步骤:
⑴了解当前系统的工作流程,获得当前系统的物理模型。
⑵抽象出当前系统的逻辑模型。
⑶建立目标系统的逻辑模型。
⑷作进一步补充和优化。

要点主要有三个:

(1)采用自顶向下,逐步求精的程序设计方法。
(2)使用三种基本控制结构构造程序,分别是顺序,选择和循环
(3)采用主程序员组的组织形式。

17.面向对象的基本概念

(1)对象:
对象是人们要进行研究的任何事物。
(2)类:
类是具有相同或相似性质的对象的抽象。类的具体化就是对象,也可以说类的实例是对象。
(3)消息:
对象之间进行通信的结构叫做消息。消息包含接收对象去执行某种操作的信息。
(4)方法:
类中操作的实现过程叫做方法。一个方法有方法名、参数、方法体。

18.面向对象和面向过程软件工程有哪些区别?

(1)
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
(2)
面向过程是把一件事一项工程分解成为一个个小的功能,用一个个函数来实现;
面向对象是把事情看成是一个个小的对象组成的,或者说一个个小部分组成的,这些对象之间的相互关系,构成了整个项目.在面向对象的思想中,万物皆对象。而"类",就是对象的抽象或者说是概括。

19.可行性研究

为什么要进行可行性研究
用最小的代价、在尽可能短的时间内确定问题是否能被解决。(注意:不是去解决问题)

可行性研究工具有哪些?
系统流程图:系统流程图是概括的描绘物理系统的传统工具。
数据流图:描绘信息流和数据从输入移动到输出的过程中经受的变换。
数据字典:是关于数据的信息的集合,是对数据流图中包含的所有元素的定义的集合。

可行性研究有哪些步骤?
复查系统规模和目标;研究当前的系统;导出新系统的高层逻辑模型;重新定义问题;导出和评价可供选择的解决方案;推荐可行的行动方案;草拟开发计划;书写文档并提交审查。

请介绍一下可行性研究的方法
首先分析问题,试探性的导出问题的各种解,然后进行各种分析和比较,选择和推荐可行的解决方案。
采用系统流程图描述物理数据流;运用数据流图并结合数据字典构建系统的逻辑模型。
可行性研究的结果产生可行性研究报告。

20.软件需求分析的任务是什么?有哪些主要步骤?

需求分析:开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。

基本任务:
⑴问题识别
⑵分析与综合,导出软件的逻辑模型
⑶编写文档

步骤:
1.需求获取:从分析当前系统包含的数据开始,系统需求包括用户对软件功能的需求和界面的需求。
2.需求提炼:分析建模:图像化的分析模型包括数据流图,实体关系图,控制流图,状态转换图,用例图,类对象关系及其行为图等。除系统模型外,更有系统关联图,创建用户接口原型,确定需求优先级别等。
3.需求描述:编写统一格式的文档。
4.需求验证:改善需求中的二义性,不一致的问题。

21.总体设计

总体设计过程分:
系统设计过程,确定系统的具体实现方案 ;
结构设计阶段,确定软件结构

22.详细设计

详细设计的根本目标
是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序

详细设计的基本任务包括:
为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计;其他设计;编写详细设计说明书;评审。

详细设计的描述方法
图形、表格和语言,其中图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具

23.软件测试目标

(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试的方法有动态测试、静态测试和正确性证明。

24.黑白灰盒测试/从是否关心内部结构来看分为:

黑盒测试和白盒测试的区别:前者基于功能,后者基于结构;

黑盒测试:
把程序看作一个黑盒子,完全不考虑程序的内部逻辑结构和内部特性。它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。黑盒测试又称为功能测试或基于规格说明书的测试。
黑盒测试方法:
等价类划分法、边界值分析法、错误推测法、因果图法、功能图法和接口测试法。

白盒测试:
检查程序内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。
又称为结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一种测试方法。
白盒测试主要包含六种测试方法:
语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

灰盒测试:
是一种综合测试法,它将“黑盒”测试与“白盒”测试结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术

25.软件测试的过程有哪几个步骤?

1.单元测试:检查各个程序模块是否完成了功能
单元测试主要针对模块的以下五个基本特征进行测试:
(1)模块接口
(2)局部数据结构
(3)重要的执行路径
(4)错误处理
(5)边界条件

2.集成测试:把测试过的模块组装起来,测试软件体系结构
3.确认测试:检查已经实现的软件是否满足了需求规格说明书的需求
4.系统测试:把已经确认的软件纳入实际运行环境,与其他系统成分一起测试
5.验收测试:向用户表明系统已经符合了用户预期标准

26. 软件系统的三个测试阶段?

1.开发测试:在开发过程中对系统进行测试以发现bug和缺陷。
2.发布测试: 在系统发布给用户之前,单独的测试团队测试系统的完整版本。
3.用户测试 : 其中系统的用户或潜在用户在自己的环境中测试系统。

27.调试的目的是什么?调试有哪些技术手段?

调试是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,因此调试也称为纠错(Debug)。调试的技术手段有简单的调试方法、归纳法、演绎法和回溯法等。

28.软件维护的目标是什么,有哪几种维护类型?

目标:纠正在使用过程中暴露出来的错误而进行的改进型维护,适应外部环境的变化而进行的适应性维护,改进原有的软件而进行的完善性维护,以及改进将来的可维护性和可靠性而进行的预防性维护。
类型
(1)纠错性维护:由于前期的测试不可能揭露软件系统中所有潜在的错误,用户在使用软件时仍将会遇到错误,诊断和改正这些错误的过程称为纠错性维护。
(2)适应性维护:由于新的硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新的环境而引起的程序修改和扩充活动称为适应性维护。
(3)完善性维护:在软件的正常使用过程中,用户还会不断地提出新的需求。为了满足用户新的需求而增加软件功能的活动称为完善性维护。
(4)预防性维护:为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。

29.简述提高软件质量的主要措施

1.复审:是在软件生命周期每个阶段结束之前,都采用一定的标准对该段产生的软件配置成分进行严格的正式或非正式的检测。
2.复查:是检查已有的材料,以断定在软件生命周期某个阶段的工作是否能开始或继续。
3.管理复审:是向开发组织或使用部门的管理人员提供有关项目的总体状况、成本和进度等方面的情况,以便他们从管理角度对开发工作进行审查。
4.测试:包括测试计划、测试过程和测试结果3个阶段。

30.选择一种程序设计语言的主要有哪些依据?

为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;
为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;
为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。
上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。 (1)系统用户的要求 (2)可以使用的编译程序 (3)可以得到的软件工具 (4)系统规模 (5)程序员的知识 (6)软件可移植性要求 (7)软件的应用领域

31.基本的软件设计原理有哪些?

1.模块化(使复杂问题“分而治之”)
2.抽象(抓事务本质特征,先不考虑细节)
3.逐步求精(集中精力先解决主要问题,尽量推迟对细节的考虑)
4.信息隐藏和局部化(将某些模块的某些过程和数据隐藏起来,其他模块不能访问它)
5.模块独立性(模块独立性是模块化、抽象、信息隐藏的直接产物)

32.UML 里面有哪些图?系统流程建模工具

UML 图包括九种:
用例图、类图、对象图、
构件图、部署图、活动图、
协作图、状态图、序列图。
在这些图中用例图、类图、序列图是最有用的。
1、需求
采用用例图描述需求。
2、 分析
采用类图描述静态结构
采用顺序图、合作图、活动图、状态图描述动态行为
3、设计
采用类图、包,对类的接口进行设计
4、 实现
将类用某现象对象语言实现
5、继承与交付
构件图、包、部署图
6、 测试
单元测试——类图和类的说明书

33.什么是软件配置管理?什么是基线?

软件配置管理,简称SCM(Software Configuration Management),是指一组管理整个软件生存期各阶段中变更的活动。软件配置管理技术可以使软件变更所产生的错误达到最小并最有效地提高生产率。
基线:是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果。

34.说明面向对象的特征?

面向对象的特征是:
(1)对象唯一性。每个对象都有自身唯一的标识,在对象生存期中,其标识不变,不同的对象不能有不同的标识。
(2)分类性。是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
(3)继承性。是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
(4)多态性。是指相同的操作或函数过程可以作用于多种类型的对象上并获得不同的结果。

35.CMM全称是什么?分为哪几个级别?

CMM全称是软件能力成熟度模型;
从无序到有序的进化分成5个级别,分别为:
1 初始级;2 可重复级;3 已定义级;4 已管理级;5 优化级。

36.什么是数据字典?简述数据字典与数据流图的关系。

数据字典是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明,是数据流程图的补充工具;
数据字典与数据流图的关系:
数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。 数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。

37.简述三种面向对象模型的主要功能?

①对象模型:表示了静态的结构化的系统数据性质,描绘了系统的静态结构,从客观世界实体的对象关系角度来描绘对象。
②动态模型:该模型描述了系统的控制结构,它表示了瞬间的、行为化的系统控制性质,它关心的是系统的控制及操作的执行顺序,它从对象的事件和状态的角度出发,表现了对象的交互行为。
③功能模型:表示变化的系统“功能”性质,它指明系统应该“做什么”,因此功能模型更直接的反映了用户对目标系统的要求。

38.软件工程三要素之间的关系?

软件质量是软件工程的生命线,软件工程以质量保证为基础。
质量管理促进了过程的改进,创造了许多行之有效的软件开发方法和工具。
软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。
方法支撑过程和工具,过程和工具又促进方法学的研究。

39.简述文档在软件工程中的作用。

(1)提高软件开发过程的能见度;
(2)提高开发效率;
(3)作为开发人员阶段工作成果和结束标志;
(4)记录开发过程的有关信息便于使用与维护;
(5)提供软件运行、维护和培训有关资料;
(6)便于用户了解软件功能、性能。

**LOC:**指所有的可执行的源代码行数,包括可交付的工作控制语言语句、数据定义、数据类型声明、等价声明、输入/出格式声明等。

**三层结构设计:**三层体系结构通常被划分为表示层、中间层和数据层三层,各个分层之间通过对外接口互相访问。

**结对编程:**在敏捷方法中,成对(或结对)编程是极限编程的实践之一。当进行成对编程时,一个程序员输入代码,另一个在旁边观察代码中是否存在错误,并思考下一步要进行的工作。

**软件缺陷:**所谓软件缺陷,即计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。

Q:类之间的关系有哪些?

继承:类继承另一个类的功能
实现:类实现接口的功能
依赖:A类的某个方法使用到了B类
关联:强依赖关系,B类作为一个属性出现在了A类
聚合:一种特别的关联,公司与个人的关系
组合:强聚合关系,整体与部分的联系更紧密,如汽车与轮胎

Q:自顶向下和自底向上测试方法的区别?

自顶向下:从程序入口主控模块开始,按照系统程序结构,沿着控制层次从上而下测试各模块。方便把握整体结构,早期可发现顶层错误。
自底向上:从最底层模块,即叶子结点开始,按照调用从下而上的测试各模块。最后一个模块提交后才能完整系统测试,某些模块可以提前测试。

Q:软件工程的主要模型?

1、瀑布模型:前一阶段工作结束才可以进行下一阶段工作。基于文档,易于维护,但加大了工作量。
2、快速原型:快速建立可以运行的程序,完成的功能是最终软件的一个子集。不带反馈环,满足用户真实需求,但会导致系统设计差,难以维护。
3、增量模型:每个阶段不交付完整产品,软件由一系列增量构件组成。降低开发风险,易于维护,但不容易控制整体过程
4、螺旋模型:结合快速原型和瀑布模型,有利于软件重用,减少风险,风险人员需要一定经验。
5、喷泉模型:迭代,无缝,节省开发时间。
6、敏捷

Q:什么是死代码?

永远不会被执行到的代码。

  • 3
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 软件工程考研复试是针对报考该专业硕士研究生的考生而言的,复试环节主要是为了更深入地了解考生在软件工程领域方面的专业素养和能力。 在软件工程考研复试中,一般还是会考查考生的基本知识和能力,包括计算机原理、数据结构、算法、操作系统、数据库等方面的内容。此外,还可能涉及到一些软件工程的核心技术和方法,例如软件设计和架构、软件测试和质量保障、软件工具和框架等。 对于CSDN这个知名的技术社区而言,它主要提供了一个交流学习的平台,对于软件工程考研复试来说,CSDN上面的一些技术文章和用户讨论可能有所帮助,可以通过CSDN了解和学习一些相关内容,提升自己的技术能力。 但是,需要注意的是,软件工程考研复试并不是单纯地考察技术的掌握情况,还会关注考生的综合素质、从事科研工作的能力以及团队合作和沟通能力等方面。因此,准备复试时考生需要全面准备,包括提高技术水平同时也需要注重提高综合素质和能力。 ### 回答2: 软件工程考研复试考试内容涵盖了计算机科学、软件工程、高级编程等众多方面。其中,计算机科学包括计算机网络、操作系统、数据库等;软件工程则包括需求分析、软件设计、软件测试等;高级编程方面则包括Java、C++、数据结构与算法等。 除此之外,考生还需要熟悉相关的软件开发工具和环境,例如Eclipse、IntelliJ IDEA、Git等,以及相关标准和规范,例如UML、ISO等。 在考试时,常见的形式包括笔试和面试两部分。笔试主要考察考生的基础编程能力和对相关知识的理解掌握;面试则主要考察考生的沟通能力、团队协作能力和解决问题能力等,通常会根据考生的个人经历和项目经验进行提问。 总之,软件工程考研复试考察的不仅仅是单纯的知识点掌握,更重要的是考察考生对于软件开发实践的理解与应用能力。因此,考生需要在积累知识的同时,尽可能参与软件实践项目,提高自己的实践经验和能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值