公共基础知识——软件工程
1.软件具有以下特点:
①软件具有抽象性,是一种逻辑实体;
②软件没有明显的制作过程;
③软件在使用期间不存在磨损、老化问题;
④对硬件和环境具有依赖性;
⑤软件复杂性高,成本昂贵;
⑥软件开发涉及诸多的社会因素,如知识产权等。
2.系统软件是控制和协调计算机及外部设备,支持应用软件开发和运行的软件,操作系统是系统软件;
支撑软件是支撑各种软件的开发与维护的软件,又称为软件开发环境,浏览器属于支撑软件;
应用软件是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合,编辑软件、教务管理软件属于应用软件。
3.系统软件主要包括:
①操作系统软件;
②各种语言的解释程序和编译程序;
③各种服务性程序;
④各种数据库管理系统。
操作系统、编译程序与汇编程序属于系统软件,编译程序与汇编程序属于支撑软件,教务管理系统属于应用软件。
4.软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。
5.软件工程是指用工程化的原则和方法来构建和维护软件,其要素包括:
①方法,用于完成软件工程项目的技术手段;
②工具,用于支持软件的开发、管理、文档生成;
③过程,用于支持软件开发的各个环节的控制、管理。
6.随着计算机软件规模的扩大,软件本身的复杂性不断增加,研发周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了入们难以控制软件发展的局面,即所谓的“软件危机”。
7.软件的危机表现包括:
①软件需求的增长得不到满足,用户对系统不满意的情况经常发生;
②软件开发成本和进度无法控制;
③软件质量难以保证;
④软件不可维护或维护程度非常低;
⑤软件的成本不断提高;
⑥软件开发的生产效率的提高赶不上硬件的发展、生产率等问题。
8.软件生命周期包括软件产品从提出、实现、使用、维护到停止使用(退役)的过程。
可以将软件生命周期分为软件定义、软件开发及软件运行维护三个阶段。软件生命周期的主要活动阶段是可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行和维护。
软件生命周期可分为:
①定义阶段,包括可行性研究、需求分析;
需求分析的基本任务是明确用户的各种需求,对开发软件提出的需求进行分析并给出详细定义,编写软件规格说明书及初步的用户手册,提交评审。
软件需求是指用户对目标软件系统在功能、性能、设计约束等方面的要求,是由用户提出的,根据需求信息可以达到目标或者解决问题。
②开发阶段,包括概要设计、详细设计、实现、测试;
③维护阶段,包括使用、维护、退役。
9.优秀的设计准则可以对软件结构图进行优化,包括:
①设计功能可预测的模块;
②设计成单入口、单出口的模块;
③应减少模块的接口和界面的复杂性;
④使模块的作用域在该模块的控制域中;
⑤深度、宽度、扇出和扇入适当;
⑥模块规模适中;
⑦模块独立性好。
10.软件需求分析阶段的工作,可以分为四个方面:
①需求获取;
②需求分析;
③编写需求规格说明书;
④需求评审。
11.确定软件系统的功能属于需求分析阶段的要求,在编写需求规格说明书之前完成。
12.需求分析阶段只能生成需求分析规格说明书。
13.软件需求说明书(SRS)的编制是为了:
①便于用户、开发人员进行理解和交流;
②反映出用户问题的结构,可以作为软件开发工作的基础和依据;
③作为确认测试和验收的依据;
④为成本估算和编制计划进度提供基础;
⑤软件不断改进的基础。
14.数据流图(DFD图)是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模,是结构化方法的需求分析工具。数据字典、判定树和判定表也是常用的结构化分析工具。程序流程图、N-S图、PAD图、PDL(伪码)等工具用于详细设计的过程中。
15.数据流图基本符号的含义:
①矩形表示数据的外部实体;
②圆角的矩形表示变换数据的处理逻辑;
③缺少右半边的矩形表示数据的存储;
④箭头表示数据流。
16.总体设计过程通常由两个主要阶段组成:
①系统设计,确定系统的具体实现方案;
②结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。
17.数据流图从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,其图符包括:①加工、②数据流、③存储文件、④源和潭。
18.耦合性和内聚性是模块独立性的两个定性标准。
内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量,作为软件结构设计的设计原则,要求每个模块的内部都具有很强的内聚性;
耦合性是指模块间相互连接的紧密程度的度量,一个模块与其他模块的耦合性越强则该模块的独立性越弱。
一般优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。
19.按照耦合程度从强到弱分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合和非直接耦合,没有异构耦合这种方式。
20.软件设计中模块划分应遵循:
①高内聚低耦合;
②模块大小规模适当;
③模块的依赖关系适当等。
内聚是一个模块内各个元素彼此结合的紧密程度,要尽量使模块责任单一;耦合是不同模块之间互连程度的度量,要尽量使模块独立。
21.软件设计阶段的任务包括:
①结构设计;
②数据设计;
③接口设计;
④过程设计。
软件的功能确定是在需求分析阶段完成的。
22.N-S图是由若干基本框图构成的流程图,其特点是没有流程线;
PAD图即问题分析图,它是一种由左往右展开的二维树形结构;
程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;
E-R图即实体-联系图,用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。
23.在程序流程图中:
①标有名字的带箭头线段表示控制流;
②矩形表示加工步骤;
③菱形表示逻辑条件。
24.系统结构图的宽度是指最大模块数的层的控制跨度。(方框最多的那一层的方框个数)
深度表示控制的层数。
25.软件测试是程序的执行过程,目的是尽可能多的发现错误。程序调试基于软件测试时发现的错误,其任务是诊断和改正程序中的错误。
26.软件测试的基本准则有:
①所有测试都应追溯到需求;
②严格执行测试计划,排除测试的随意性;
③充分注意测试中的群集现象;
④应避免程序员检查自己的程序;
⑤不可能穷举测试;
⑥妥善保存测试计划等文件。
软件测试是程序的执行过程,目的是尽可能多的发现错误。软件测试是保证软件质量的重要手段。
27.常用的黑盒测试方法有:
①等价类划分法;
②边界值分析法;
③错误推测法;
④因果图等。
常用的白盒测方法有:
①逻辑覆盖测试,包括语句覆盖、路径覆盖、判断覆盖、条件覆盖;
②基本路径测试等
黑盒测试也称功能测试或数据驱动测试,完全不考虑程序内部逻辑结构和具体代码,把程序看作是一个不能打开的黑盒子,依据软件需求规格说明书,检查程序的功能是否符合它的功能说明,主要针对软件界面和软件功能进行测试。
白盒测试是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。
28.确认测试的任务是验证软件的有效性,即验证软件的功能、性能,以及其他特性是否满足需求规格说明中确定的各种需求。
29.软件测试的实施过程主要有4个步骤:单元测试、集成测试、确认测试(验收测试)和系统测试。
30.软件测试的目的是尽可能多的发现错误。程序调试基于软件测试时发现的错误,其任务是诊断和改正程序中的错误。
31.软件调试采用的主要方法包括:
①强行排错法,其过程为设置断点、程序暂停、观察程序状态、继续运行程序;
②回溯法,指一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置;
③原因排除法,指通过演绎和归纳,以及二分法来排错。