软件工程知识及题目Word文件下载.docx
《软件工程知识及题目Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件工程知识及题目Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
(1)概要设计(总体设计)
◆包括两个主要阶段:
系统设计(确定具体的实现方案)和结构设计(确定每个系统的模块组成及模块间的关系)
◆模块之间联系越紧密,其耦合性就越强,模块的独立性就越差;
一个模块内个要素联系越紧密,则它的内聚性就越高。
模块划分原则:
高内聚低耦合
(2)详细设计
◆结构化程序设计的要点:
采用自顶向下、逐步求精的程序设计方法,一个程序只有一个入口和一个出口。
◆详细设计的常用工具:
程序流程图、盒图、PAD和PDL
(3)软件测试目的
◆软件测试的目的是尽可能多的发现程序中的错误。
◆软件测试方法:
静态测试和动态测试(黑盒测试法和白盒测试法)
黑盒测试包括:
等价分析法、边值分析法、因果图法和错误推测法
白盒测试法测试的原则之一就是保证所测模块中的每一个独立的路径至少执行一次。
(4)程序调试
分为静态调试和动态调试
调试的目的:
改正错误
经调试后还必须进行再测试
(5)软件维护
软件维护就是在软件已经交付使用以后,为改正错误或满足新的需求而修改软件的过程。
例题精选:
1.分析的结果是产生需求规格说明书。
2.软件详细设计的主要任务是确定每一个模块的算法和使用的数据结构。
3.进行单元测试时,常用的方法时采用白盒测试,辅以黑盒测试。
4.软件工程的出现是由于软件危机的出现,人们提出了软件工程学的原理设计软件。
5.数据字典是各类数据描述的集合,通常包括4个部分:
数据项、数据流、数据存储和数据加工。
软件工程基础知识2.4.1主要知识点
软件工程是计算机软件的一个重要分支,主要应掌握软件工程的基本原理以及软件设计与测试方法。
2.4.1.1软件生存周期各阶段的任务
软件生存周期指出由软件定义、软件开发和软件维护等阶段组成的全过程。
(1)软件定义阶段
软件定义阶段主要解决软件要"
做什么"
的问题,也就是要确定软件的处理对象、软件与外界的接口、软件的功能、软件的性能、软件的界面以及有关的约束和限制。
软件定义阶段通常可分成系统分析、软件项目计划和需求分析等阶段。
系统分阶析的任务是确定待开发软件的总体要求和适用范围,以及与之有关的硬件和支撑软件的要求,该阶段所生产的文档可合并在软件项目计划阶段的文档(项目计划书)中。
软件项目计划的任务是确定待开发软件的目标,对其进行可行性分析,并对资源分配、进度安排等做出合理的计划,该阶段所产生的文档有可行性分析报告和项目计划书。
需求分析的任务是确定待开发软件的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。
该阶段产生的文档是需求规格说明书。
(2)软件开发阶段
软件开发阶段主要解决软件"
怎么做"
的问题,包括数据结构和软件结构的设计、算法设计、编写程序和测试,最后得到可交付使用的软件。
软件开发阶段通常可分成软件设计、编码、软件测试等阶段。
软件设计通常还可分成概要设计和详细设计。
概要设计的任务是模块分解,确定软件结构、模块的功能和模块的接口,以全国数据结构的设计。
详细设计的任务是设计每个模块的实现细节和局部数据结构。
设计阶段产生的文档有设计说明书,它也可分为概要设计说明书和详细设计说明书。
编码的任务是用某种程序语言为每个模块编写程序,产生的文档有程序清单。
软件测试的任务是发现软件中的错误,并加以纠正,产生的文档有软件测试计划和软件测试报告。
(3)软件维护
软件维护任务就是为使软件适应外界环境的变化,进一步实现软件功能的扩充和质量的改善而修改软件。
该阶段产生的文档有维护计划和维护报告。
2.4.1.2软件开发模型
用不同的方式将软件生存周期中所有开发活动组织起来,形成不同的软件开发模型。
常见的软件开发模型有瀑布模型、螺旋模型和喷泉模型等。
瀑布模型给出了软件生存周期各阶段的固定顺序,上一阶段完成后才能进入到下一阶段。
各阶段结束后,都要进行严格的评审。
2.4.1.3结构化分析和设计方法
(1)结构化分析(SA)方法
结构化分析(SA)方法是一种面向数据流的需求分析方法,它适用于分析大型数据处理系统。
结构化分析方法的基本思想是自顶向下逐层分解,把一个问题分解成若干个小问题,每个小问题再分解成若干个更小的问题,经过多次逐层分解,每个最低层的问题都是足够简单、容易解决的,这个过程就是分解的过程。
SA方法的分析结果由数据流图DFD、数据词典和加工逻辑说明几个部分组成。
(2)结构化设计(SD)方法
结构化设计(SD)方法是一各面向数据流的软件设计方法,它可以与SA方法衔接,SD方法采用结构图(SC)来描述程序的结构。
结构图的基本成分由模块、调用和输入/输出数据组成。
在需求分析阶段,用SA方法产生了数据流图。
面向数据流的设计能方便地将DFD转换成程序结构图,DFD中从系统的输入数据到系统的输出数据流的一连串连续变换将形成一条信息流。
DFD的信息流大体可分为两种类型,一种是变换流,另一种是事务流。
SD方法的设计步骤有:
①复查并精化数据流图;
②确定DFD的信息流类型;
③根据信息流类型分别将变换流或事务流转换成程序结构图;
④根据软件设计的原则对程序结构图作为改进。
(3)结构化程序设计(SP)
结构化程序设计(SP)采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。
自顶向下逐步求精的设计方法符合抽象和分解的原则,人们解决复杂问题时常用的方法。
SA方法和SD方法也采用了自顶向下逐步求精的方法,在详细设计时也同样如此。
在设计一个模块的实现算法时,先考虑整体后考虑局部,先抽象后具体,通地逐步细化,最后得到详细的实现算法。
单入口单出口的控制结构,使程序的静态和动态结构执行过程一致,使程序具有良好的结构。
2.4.1.4面向数据结构的设计方法
这类方法以数据结构作为设计基础,根据输入/输出数据结构导出程序的结构。
Jackson方法是一种典型的面向数据结构的设计方法。
尽管程序中实际使用中的数据结构有许多种,但这些数据结构中数据元素间的逻辑关系只有顺序、选择和重复3类。
Jackson方法的设计步骤为:
(1)分析并确定输入和输出数据的逻辑结构,并用Jackson图表示;
(2)找出输入数据结构与输出数据结构间有对应关系的数据单元;
(3)从描述数据结构的Jackson图导出描述程序结构的Jackson图。
2.4.1.5软件设计的原则
(1)抽象的原则
软件工程中从软件定义到软件开发要发经历多个阶段,在这个过程中每前进一步都可看作是对软件设计的抽象层次的一次细化。
抽象的最低层次就是实现该软件的源程序代码。
在进行曲模块化设计时也可以有多个抽象层次,最高抽象层次的模块用概括的方式叙述题的解法,较低抽象层次的模块是对较高抽象层次模块问题解法描述的细化。
过程抽象和数据抽象是常用的两种主要抽象手段。
(2)模块化的原则
模块化是指将一个待开发的软件分解或成若干个小的简单的部分模块,每个模块可独立地开发、测试,最后组装成完整的软件。
(3)信息隐蔽的原则
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一人模块时尽可能少地显露其内部的处理。
信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。
(4)模块独立的原则
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系比较简单。
衡量模块独立程度标准有两个:
耦合和内聚,耦合是指模块之间联系的紧密程度,耦合度越高,则模块的独立性越差。
内聚是指模块内部各元素之间联系的紧密程度,内聚度越低,模块的独立性越差。
模块独立要求每个模块都是高内聚低耦合的。
2.4.16编码
编码阶段的任务就是根据详细的设计说明书编写程序。
要编写高质量的程序,应注意选择合适的程序设计语言,明确源程序的质量要求,养成良好的程序设计格。
2.4.1.7软件测试
软件测试的工作量约占软件开发总工作量的40%以上,其目的是尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。
测试的关键是测试用例的设计,设计方法可分成两类:
白盒测试和黑盒测试。
白盒测试把程序看成是装在一只透明的盒子里,测试者完全了解程序的结构和处理过程。
白盒测试根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。
黑盒测试把程序看成是装在一只不透明的盒子里,测试者完全不了解(或不考虑)程序的结构和处理过程。
黑盒测试根据规格说明书规定的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。
软件测试的主要步骤有单元测试、集成测试和确认测试。
单元测试也称模块测试,通常单元测试可放在编码阶段,主要用来发现编码和详细设计中产生的错误,一般采用白盒测试。
集成测试也租组装测试,它是对由各模块组装而成的模块进行测试,主要检查模块间的接口和通信。
集成测试主要用来发现设计阶段产生的错误,通常采用黑盒测试。
确认测试的任务是检查软件的功能、性能和其他特征是否与用户的需求一致,它是以需求规格说明书作为依据的测试,通常采用黑盒测度。
大多数软件生产者使用一种Alpha测试和Beta测试的过程,来揭露仅由最终用户才能发现的错误。
Alpha测试是在开发者的现场由客户来实施的,被测试的软件是在开发者从用户的角度进行常规设置的环境下运行的。
Beta测试是在一个或多个客户的现场由该软件的最终用户实施的。
与Alpaha测试不同的是,进行Beta测试时开发者通常是不在场的。
2.4.1.8面向对象方法的基本概念
面向对象(OO)方法成为软件开发的一种主要方法。
它有几个基本概念。
(1)对象
在计算机系统中,对象是指一组属性以及这组属性上的专用操作的封装体。
属性可以是一些数据,也可以是另一个对象。
每个对象都有它自己的属性值,表示该对象的状态,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。
封装目的是使对象的使用者和生产者分离,使对象的定义和实现分开。
一个对象通常可由对象名、属性和操作这3个部分组成。
(2)类
类是一组具有相同属性和相同操作的对象的集合。
一个类中的每个对象都是这个类的一个实例(Instance)。
在分析和设计时,我们通常把注意力集中在类上,而不是具体的对象上。
通常把一个类和这个类的所有对象称为类及对象或对象类。
(3)继承
继承是在某个类的层次关联中不同的类共享属性和操作的一种机制。
一个父类可以有多个子类,这些子类都是父类的特例。
父类描述了这些子类的公共属性的操作,子类中还可以定义它自己的属性和操作。
一个子类只有唯一的一个父类,这种继承称为单一继承。
一个了类有多个父类,可以从多个父类中继承特性,这种继承称为重多继承。
(4)消息
消息的对象间通信的手段、一个对象通过向另一对象发送消息来请求其服务。
一个消息通常包括接收对象名、调用的操作名和适当的参数(如有必要)。
消息只告诉接收对象需要完成什么操作,但并不能指示接收者息样完成操作。
消息完全同接收者解释,接收者独立决定采用什么方法来完成所需的操作。
(5)多态性和动态绑定
多态性是指同一个操作作用不同的对象可以有不同的解释,产生不同的执行结果。
与多态性密切相关的一个概念就是动态绑定。
传统的程序设计语言把过程调用与目标代码的连接放在程序运行前进行,称为静态绑定。
而动态绑定则是把这种连接推迟支动行时才进行。
在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法连接,即动态绑定。
2.4.1.9面向对象的分析与设计方法
(1)PeterCoad和EdwardYourdon的OOA和OOD方法
OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。
在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。
分类结构就是所谓的一般与特殊的关系。
组装结构则反映了对象之间的整体与部分的关系。
OOA在定义属性的同时,要识别实例连接。
实例连接是一个实例与另一个实例的映射关系。
OOA在定义服务的同时要识别消息连接。
当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。
OOA中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。
OOD模型由4个部分组成。
它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。
(2)Booch的OOD方法
Booch认为软件开发是一个螺旋上升的过程。
在螺旋上升的每个周期中,有4个步骤:
标识类和对象、确定它们的含义、标识它们之间的关系、说明每一个类的界面和实现。
(3)OMT方法
对象建模技术OMT定义了3种模型,它们是对象模型、动态模型和功能模型,OMT用这3种模型来描述系统。
OMT方法有4个步骤:
分析、系统设计、对象设计和实现。
OMT方法的每一个步骤都使用这3种模型,每一个步骤对这3种模型不断地进行细化和扩充。
对象模型描述系统包括对象的静态结构、对象之间的关系、对象的属性和对象的操作。
OMT的对象模型中除了对象、类和继承外,还有链、关联、泛化、聚合和模块等概念。
动态模型用来描述与值的变换有关的系统特征--功能、映射、约束和函数依赖。
功能模型用数据流图来表示。
OMT主要步骤:
①分析是OMT方法的第一步,其目的是建立可理解现实世界模型。
②在系统设计阶段将确定整个系统的体系结构,以形成求解问题和建立解答的高层次策略。
③对象设计。
在分析的基础上,对象设计阶段将建立基于分析模型的设计模型,并考虑实现的细节。
设计人员会根据系统设计期间建立的策略把实现细节加入到设计模型中。
④实现阶段将对象设计阶段开发的对象类及基关系转换成特定的程序设计语言、数据库或硬件实现。
2.4.1.10软件质量保证
软件质量保证是指为保证软件系统或软件产品最大限度地满足用户要求而进行的有计划、有组织的活动,其目的是生产高质量的软件。
有多种软件质量模型来描述软件质量特性,著名的有ISO/IEC9126软件质量模型和McCall软件质量模型。
软件质量保证环节包括的主要工作有:
应用技术方法、进行正规的技术评审、测试软件、标准的实施、控制变动、度量、记录保存和报告。
2.4.l.11软件开发工具与环境
用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具,通常也称为CASE工具。
软件工具大都包含了检测机制,能及时发现一些错误,对提高软件的质量起着重要的作用。
软件开发环境则把一组相关的工具集成在环境中,环境机制提供数据集成、控制集成和界面集成等机制。
数据集成机制为工具提供统一的数据接日;
控制集成机制实现工具间的通信和协同工作;
界面集成机制使这些工具具有统一的界面风格,从而为软件开发、维护、管理等过程中的各项活动提供连续的、一致的全方位支持。
2.4.2试题解析
对高级程序员级考试来说,软件工程的重要性非常突出,从历年试题统计(见表2-6)来看,在各大知识点中平均所占的比重最大,平均每年有2道题,这也说明对高级程序员的软件分析与设计能力的要求比较高。
总的来说,软件设计方法、软件测试方法、软件模块划分、软件质量要求等是反复考查的重点内容。
软件管理、软件工具、软件开发环境等从未考过的内容也应引起重视。
试题1(2000年试题5)
从供选择的答案中,选出应填人下面叙述中{}内的最确切的解答,把相应编号写在答卷的对应栏内。
在软件开发过程中常用图作为描述工具。
如DFD就是面向A分析方法的描述工具。
在一套分层DFD中,如果某一张图中有N个加工(Process),则这张图允许有B张子图。
在一张DFD图中,任意两个加工之间C。
在画分层DFD时,应注意保持D之间的平衡。
DFD中从系统的输入流到系统的输出流的一连串连续交换形成一种信息流,这种信息流可分为E两类。
供选择的答案
A:
①数据结构②数据流③对象④构件(ComPonent)
B:
①0②1③1-N④0-N
C:
①有且仅有一条数据流
②至少有一条数据流
③可以有0条或多条名宇互不相同的数据流
④可以有0或多条数据流,但允许其中有若干条名宇相同的数据流
D:
①父图与其子图②同一父图的所有子图
③不同父图的所有子图④同一子图的所有直接父图
E:
①控制流和变换流②变换流和事务流
③事务流和事件流④事件流和控制流
【解析】
本题考查数据流图(DFD)的基本知识。
在软件需求分析阶段,用SA方法产生了数据流图。
数据流图是结构化分析方法的一种分析结果,用来描述数据流从输入到输出的变换过程。
数据流图的基本成份有数据流、加工。
文件和源/宿。
一个软件系统,其数据流图往往有多层。
如果父图有N个加工,则该父图可以有0~N张子图,但是每张子图只能孙对应于一张父图。
在画数据流图时,应注意父图与子图的平衡,即父图中某加工的输入输出数据流必须与
其子图的输入输出流在数量和名字上相同。
[答案]A:
②B:
④C:
③D:
①E:
②
试题2(2000年试题6)
从供选择的答案中,选出应填入下面叙述中{}内的最确切的解答,把相应编号写在答卷的对应栏内。
软件的易维护性是指理解、改正、改进软件的难易程度。
通常影响软件易维护性的因素有易理解性、易修改性和A。
在软件的开发过程中往往采取各种措施来提高软件的易维护性。
如采用B有助于提高软件的易理解性;
C有助于提高软件的易修改性。
在软件质量特性中,D是指在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性;
E是指防止对程序及数据的非授权访问的能力。
①易使用性②易恢复性③易替换性④易测试性
①增强健壮性②信息隐蔽原则
③良好的编程风格④高效的算法
①高效的算法②信息隐蔽原则③增强健壮性④身份认证
①正确性②准确性③可靠性④易使用性
①安全性②适应性③灵活性④容错性
本题考软件质量要求和软件质量特性。
对于源程序的质量要求,最基本的就是正确性和可靠性,除此之外,更要注重程序的易使用性、易维护性和易移植性。
易使用性就是要对用户友好,便于用户使用,做到少培训甚至零培训;
易维护性包括易理解性、易测试性和易修改性;
移植性则指程序从某一环境移植到另一环境的能力。
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。
一般使用ISOflEC9126软件质量模型来描述软件质量特性,它有3个层次组成:
第1层是质量特性;
第2层是质量于特性;
第3层是度量指标。
题中提到的可靠性位于第1层,安全性位于第2层。
[答案]A:
④B:
③C:
②D:
③E:
①
试题3(1999年试题5)
软件设计中划分模块的一个准则是A。
两个模块之间的耦合方式中,B耦合的耦合度最高,C耦合的耦合度最低。
一个模块内部的内聚种类中D内聚的内聚度最高,E内聚的内聚度最低。
①低内聚低耦②低内聚高耦合③高内聚低耦合④高内聚高耦合
①数据②非直接③控制④内容
①偶然②逻辑③功能④过程
【解析]
软件设计中划分模块的一个准则是追求更高的内聚度和更低的耦合度。
耦合度是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接日的复杂程度、进入访问一个模块的点以及通过接口的数据。
在软件设计中应该追求尽可能松散的耦合系统,在这样的系统中可以研究、测试或修改、维护任何一个模块,而不需要对系统的其他模块有很多了解或影响其他模块的实现。
此外,当某处发生错误时,低耦合度系统的错误传播的范围相应小些。
因此,模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。
如果两个模块中的每一个都能够独立地工作而不需要另一个模块的存在,那么他们之间就没有耦合关系;
如果两个模块彼此通过参数交换数据,而交换的信息仅仅是数据,那么这种耦合称为数据耦合;
如果传递的信息中也有控制信息,则这种耦合称为控制耦合。
当两个或多个模块通过公共数据环境相互作用时,它们之间的耦合称为公共耦合;
如果两个模块之间有下列情况之一,则称两个模块之间的耦合关系为公共耦合。
(1)一个模块访问另一个模块的内部数据;
(2)一个模块没有通过正常人口而转到另一个模块内部;
(3)两个模块有一部分程序代码重叠;
(4)一个模块有多个入口。
数据耦合的耦合程度最低,控制耦合次之,适当分解模块可以用数据耦合代替控制耦合。
公共耦合的复杂程度随耦合模块的个数和耦合模块对公共数据环境的操作而变化。
内容耦合是程度最高的耦合,在程序中应该坚决避免内容耦合。
内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。
简单地说,理想的内聚模块只做一件事情。
如果一个模块完成一组任务,这些任务彼此间即使有关系,也是松散的关系,就叫做偶然内聚;
如果一个模块完成的任务在逻辑上属于相同或相似的操作,则称为逻辑内聚;
如果一个模块包含的任务必须在同一段时间内执行,就叫做时间内聚。
如果一个模块内的处理元素是相关的。
而且必须以特定次序执行,则称为过程内聚;
如果模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。
如果一个模块内的处理元素和同一个功能密切相关,而B这些外排必须顺序执行.则称为顺序内聚;
如果模块内所在处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
内聚程度从低到高的排列是:
偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚。
顺序内聚、功能内聚。
【答案】A:
③B:
②D:
③E:
试题4(1999年试题6)
OMT是一种对象建模技术,它定义了3种模型,它们分别是A模型、B模型和C模型。
其中,A模型描述了系统中对象的静态结构,以及对象之间的联系,B模型描述系统中与时间和操作顺序有关的系统特征,表示瞬时的行为上的系统的“控制”特征,通常可用D来表示,C模型描述了与值的变换有关的系统特征,通常可用E来表示。
①对象②功能③ER④静态
①控制②时序③动态④实时
①对象②功能③变