《软件工程概论复习资料2cjis.docx》由会员分享,可在线阅读,更多相关《软件工程概论复习资料2cjis.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章 软件工程学概述l 什么叫软件危机?软件危机的表现有哪些?产生软件危机的原因是什么? 答:1.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 2.a对软件开发成本和进度的估算很不准确。b.用户对“已完成的”软件系统不满意的现象经常发生。c.软件产品的质量往往靠不住。d.软件常常是不可维护的。e.软件通常没有适当的文档资料。f.软件成本在计算机系统总成本中所占的比例逐年上升。g.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 3. 客观:软件本身特点逻辑部件:缺乏“可见性”;硬件常有通用部件规模庞大:管理和控制开发过程困难主观:不正确的开发方法忽视需
2、求分析错误认为:软件开发=程序编写轻视软件维护l 什么是软件工程?它有哪些本质特性?怎么样用软件工程消除软件危机? 答:1. 用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。 2. a. 软件工程关注于大型程序的构造b. 软件工程的中心课题是控制复杂性c. 软件经常变化d. 开发软件的效率非常重要e. 和谐地合作是开发软件的关键f. 软件必须有效地支持它的用户g. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品3.a 对软件有一个正确的认识:软件程序方法规则数据文档软件开发应该组织良好、管理严密、协调配合推广使用成功的技术和方法应用开发和使用好
3、的软件工具b. 为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科l 什么是软件工程三要素? 它们之间是什么关系?软件工程的基本原理是什么?答:1.工具,方法,过程 2.方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是运用方法而提供的自动或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 3. (1)严格按照计划进行管理;(2)坚持进行阶段评审;(3)实行严格的产品控制;(4)采用现代化的程序设计技术;(5)结
4、果要能清晰地审查;(6)开发小组成员的素质要好,数量却不易多;(7)要承认不断改善软件工程实践的必要性。l 说明软件生命周期的划分为几个阶段,每个阶段的基本任务?瀑布模型、原型模型、螺旋模型、增量模型优缺点以及适用范围?l 答:1.(1).问题定义:问题定义阶段必须回答的关键问题是:“要解决的问题是什么”(2) .可行性研究:该阶段要回答的关键问题是:“上一个阶段所确定的问题是否有行得通的解决办法”。(3) 需求分析:a.这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。b.这个阶段的另外一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常
5、称为规格说明(specification)。(4) 概要设计:a.这个阶段的基本任务是,概括地回答“怎样实现目标系统?”b.概要设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系(5) 详细设计a.详细设计阶段的任务就是把解法具体化,也就是回答“应该怎样具体地实现这个系统”这个关键问题。b.这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明(6) 编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。(7) 综合测试a.这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。(8) 软件维护a.维护阶段的关
6、键任务是,通过各种必要的维护活动使系统持久地满足用户的需要b.通常有四类维护活动:改正性维护、适应性维护、完善性维护、预防性维护2.(1)瀑布模型: 优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。 缺点:“瀑布模型是由文档驱动的”,缺乏灵活性:仅通过静态的规格说明很难全面正确地认识动态的软件产品。要求用户不经过实践就提出完整准确的需求是不切实际的。 适用范围:由于瀑布模型完全依赖于书面的规格说明,很可能导致最终开发出的软件不能真正满足用户的需要。(2)原型模型: 优点:克服瀑布模型的缺点,减少由于软件需求不明
7、确带来的开发风险;有助于获取用户需求,加强对需求的理解尽早发现软件中的错误支持需求的动态变化缺点:所选用的开发技术和工具不一定符合主流的发展; 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下; 适用范围:适合于需求动态变化,事先难以确定系统(3)增量模型:优点:能在较短的时间内向用户提交可完成部分功能的产品逐步增加产品功能可以使用户有较充裕的时间学习和适应缺点:在把每个新的增量构件集成到现有的软件体系结构中时,必须不破坏原来已经开发的产品软件体系结构必须是开放的本身具有矛盾性*面要求开发人员把软件看作一个整体*另一方面要求开发人员把软件看作构件序列,构件间彼此独立(4)螺旋模型:
8、优点:有助于获取用户需求,加强对需求的理解 尽早发现软件中的错误支持需求的动态变化支持风险分析,可降低或者消除软件开发风险 缺点:过多的迭代次数会增加开发成本,延迟提交时间只适合大型软件项目的开发,否则,每个阶段的风险分析将占用很大一部分资源,增加成本对开发人员的风险分析能力是极大的考验适用范围:适合于需求动态变化,事先难以确定并且开发风险较大的系统第2章 可行性分析1. 可行性分析的目的?.可行性研究的步骤有哪些?从哪些方面进行可行性研究?答:1. 用最小的代价,在尽可能短的时间内确定问题是否能够解决2. (1)复查系统规模和目标 (2)研究目前正在使用的系统(3)导出新系统的高层逻辑模型
9、( 4) 进一步定义问题 (5)5导出和评价供选择的解法(6)推荐行动方针(7) 草拟开发计划 (8)书写文档提交审查3. 技术可行性:使用现有的技术能实现这个系统经济可行性:系统的经济效益能否超过开发成本操作可行性:系统的操作方式在这个用户组织内是否行得通l 常用的成本估算方法有哪些?答:代码行技术,任务分解技术,自动估计成本技术l 什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?画数据流图的原则有哪些? 答:1. 软件系统逻辑模型的一种图形。 数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描
10、绘数据在软件中流动和被处理的逻辑过程。数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。 数据流图有4种基本符号:正方形表示数据的源点或终点;圆角矩形代表变换数据的处理;开口矩形代表数据存储;箭头表示数据流。 画数据流图的原则有:1 确定系统的源点和终点2 确定系统的输入和输出数据流的关系3 保持分解前后输入/输出数据流必须相同(父子平衡)4 尽量简化加工之间的联系5 用“自顶向下”方法,逐层画出数据流图,每张数据流图 中加工(处理)的个数不能超过9个(7加减2) 6 注意分解速度(一般每分解一层增加2-7个加工)7 在画数据流图
11、时应避免线条交叉,必要时可使用重复 的外部项(源点或终点)或数据存储符号8 适当的命名,加工处理要编号第3章 什么是数据字典?其作用是什么?包含哪些元素?数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据字典的作用是在软件分析和设计的过称中给人提供关于数据的描述信息。 数据字典应该由对下列4类元素的定义组成: (1) 数据流 (2) 数据流分量(即数据元素) (3) 数据存储 (4) 处理 考察重点:系统流程图、数据流图、数据字典(应用题) 第四章 总体设计一需求分析的定义、任务和目的是什么?定义:为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求,对
12、需求的深入理解是软件开发获得成功的前提条件。任务:基本任务是准确回答“系统必须做什么”。 需求分析任务综述:深入描述软件的功能和性能确定软件设计的约束确定软件同其它系统元素的接口细节定义软件的其它有效性需求目的:为了开发出真正满足用户需求的软件产品。基本任务是准确回答“系统必须做什么”。二 .获取需求的常用方法 1.访谈正式访谈系统分析员将提出一些事先准备好的具体问题非正式访谈系统分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法2.面向数据流自顶向下求精基本思想:“自顶向下,逐步求精” 抽象和分解3. 简易的应用规格说明技术4. 快速建立软件原型三 需求分析的原则1
13、. 必须理解并描述问题的信息域2. 必须定义软件应完成的功能3. 必须描述作为外部事件结果的软件行为4. 必须对描述信息、功能和行为的模型进行分解四 考察重点:状态转换图、ER图(应用题)第五章l 一:总体设计的目标是什么?遵循的基本原理有哪些?目的:概括的说总体设计的目的就是回答“系统该如何实现这个问题” 通过这个这个阶段的工作将划分出组成系统的物理元素-程序、文件数据库、人工过程和文档等,但每个物理元素仍然处于黑盒级,这些黑盒子里的具体内容将在以后仔细设计。基本原理:1抽象:抽出本质,忽略细节,分层理解 2模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模
14、块集成起来构成一个整体,可以完成指定的功能满足用户的需求。 3逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。 4信息隐蔽和局部化:信息隐蔽原理应该这样设计和确定模块,使得一个模块内包含的信息(过程或数据)对于不需要这些信息的模块来说,是不能访问的局部化是把一些关系密切的软件元素物理地放得彼此靠近。显然, 局部化有助于实现信息隐藏 5模块独立性:模块独立是好设计的关键,而设计又是决定软件质量的关键环节 模块化程度较高的软件容易编制 独立的模块比较容易维护和测试l 2.什么是耦合?有哪几种耦合?什么是内聚?有哪几种内聚?如何增强模块的独立性?耦合:是对一个软件结构内不同模块之间互
15、连程度的度量耦合强弱取决于模块间接口复杂程度,进入或访问一个模块的点,以及通过接口的数据模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统耦合种类:公共耦合:几个模块共享一个数据区域 特征耦合:把整个数据结构作为参数传递而被调用模块只使用其中一部分数据元素时就出现了特征耦合。 控制耦合:一个模块通过传递控制信息来控制另一个模块 标记耦合: 模块间通过参数表传递记录信息,这个记录是某一数据结构的子结构,而不是简单变量 数据耦合: 只有数据在模块之间进行交换,只通过参数传递基本类型的数据 非直接耦合: 两个模块之
16、间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的非直接耦合的模块独立性最强内聚:标志着一个模块内各个元素彼此结合的紧密程度内聚有七种,由弱到强分别为 偶然内聚-逻辑内聚-时间内聚-过程内聚-通信内聚-顺序内聚-功能内聚增强模块独立性:提高模块的内聚程度,减少耦合3. 衡量模块独立性的两个标准是什么?它们各表示什么含义? * 高内聚,少耦合;*对于一个模块而言,模块自身的内聚越强,模块间的耦合就越小,模块所具有的独立性就越好。可以说高内聚低耦合是我们进行软件设计的一贯原则l 4.什么叫模块?什么叫模块化?模块设计时应注意哪些规则? 模块:是由边界元素限定的相邻程序元素(例如,数
17、据说明,可执行的语句)的序列,而且有一个总体标识符代表它。 模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。 规则: 高内聚,少耦合4. 影响耦合度的因素有哪些?.降低耦合度的方法有哪些? 内容耦合 公共耦合 特征耦合 控制耦合 标记耦合 数据耦合 非直接耦合 -内容方法:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合环境的范围,完全不用内容耦合。 第六章详细设计1.详细设计的根本目标和任务?详细设计阶段的根部目标是确定应该怎样具体地实现所要求的系统。详细设计阶段的任务是要设计出程序的“蓝
18、图”。2.层次图和层次方框图分别适用于软件工程的那个阶段?并比较它们的区别?层次图和层次方框图不同点:层次图的形式和第3.7节中介绍的层次方框图形式相同,但是表现的内容却完全不同。层次图描绘的是软件的结构,层次方框图描绘的是数据结构层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系。层次方框图矩形框代表数据,连线表示组成关系。层次图很适于在自顶向下设计软件的过程中使用。层次方框图适用于需求分析阶段.3.Jackson方法的步骤?Jackson图的优点是什么?三种基本结构Jackson结构化设计方法基本上由下述五个步骤组成:1 分析并确定输入数据和输出数据的逻辑结构,并用Jackson图
19、描绘这些数据结构2 找出输入数据结构和输出数据结构中有对应关系的数据单元3 从描绘数据结构的Jackson图导出描绘程序结构的Jackson图 - 按照在数据结构图中的层次,在程序结构图的相应层次,为每对有对应关系的数据单元画一个处理框 - 根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图相应层次分别为它们画上对应的处理框 - 根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图相应层次分别为它们画上对应的处理框 - 若在构成顺序结构的元素中出现了重复或选择元素,需在Jackson图中增加一个中间层次的处理框。4 列出所有操作和条件(包括分支条件和循环结束条件),并且把它们
20、分配到程序结构图的适当位置。5 用伪码表示程序Jackson图的优点A:便于表示层次结构,而且是对结构进行自顶向下分解的有力工具;B:形象直观、可读性好C:既能表示数据结构也能表示程序结构(因为结构程序设计也只使用上述三种基本结构。三种基本结构顺序结构A seq B C DA endDCBA顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。选择结构 选择结构的数据包含两个或多个数据元素,每次按一定的条件从这些数据元素中选择一个使用,具体分为:(1)选择结构,(2)可选结构重复结构 重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。4.程序复杂程度的度量方法?环
21、形复杂度的计算方法?McCabe方法和Halstead方法McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。环形复杂度的计算方法:可以用下述3种方法中的任何一种来计算环形复杂度。(1)流图中的区域数等于环形复杂度。 (2)流图G的环形复杂度V(G)E-N+2,其中,E是流图中边的条数,N是结点数。(3)流图G的环形复杂度V(G)P+1,其中,户是流图中判定结点的数目。例如,使用上述任何一种方法,都可以计算出图616所示流图的环形复杂度为4。5. 说明结构化程序设计的主要思想是什么?结构化设计方法的步骤是什么?结构程序设计的经典定义如下所述:“
22、如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。”结构化设计的步骤如下:评审和细化数据流图;确定数据流图的类型;把数据流图映射到软件模块结构,设计出模块结构的上层;基于数据流图逐步分解高层模块,设计中下层模块;对模块结构进行优化,得到更为合理的软件结构;描述模块接口。掌握过程设计工具:程序流程图,N-S图,PAD图,判定树,判定表(应用题)程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:盒图 (N-S图)基本符号PAD图第7章实现一程序设计语言的选择、编码风格(选择)程序设计语言的选择: 1.系统
23、用户的要求: 如果所开发的系统由用户负责维护,用户通常要求用他们熟悉的语言书写程序. 2.可以使用的编译程序:运行目标系统的环境中可以提供的编译程序往往限制了可以选用的语言的范围. 3.可以得到的软件工具:如果某种语言有支持程序开发的软件工具可以利用,则目标系统的实现和验证都变得比较容易 4.工程规模:如果工程规模很庞大,现有的语言又不完全适用,那么设计并实现一种供这个工程项目专用的程序设计语言,可能是一个正确的选择 5.程序员的知识:如果和其他标准不矛盾,那么应该选择一种已经为程序员所熟悉的语言 6. 软件可移植性要求:如果目标系统将在几台不同的计算机上运行,或者预期的使用寿命很长,那么选择
24、一种标准化程度高、程序可移植性好的语言就是很重要的 7.软件的应用领域:FORTRAN语言特别适合于工程和科学计算COBOL语言适合于商业领域应用C语言和Ada语言适用于系统和实时应用领域LISP语言适用于组合问题领域PROLOG语言适于表达知识和推理编码风格:源程序代码的逻辑简明清晰、易读易懂二 软件测试的定义、目的?软件测试的原则?简述软件测试的各个步骤的主要任务?定义:为了发现程序中的错误而执行程序的过程。目的:从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地
25、实现了用户的要求,确立人们对软件质量的信心。测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用原则:1.所有测试都应该能追溯到用户需求2. 应该在测试开始之前就制定出测试计划:1.完成了需求模型就可以着手制定测试计划2.在建立了设计模型后就可以立即开始设计详细的测试方案3.测试发现的错误中的80很可能是由程序中20的模块造成的。问题是怎样找出这些可疑的模块并彻底地测试它们4.应该从“小规模”测试开始,并逐步进行“大规模”测试通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误5.穷举测试是不可能的,所
26、谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试6.为了达到最佳的测试效果,应该由独立的第三方从事测试工作7.充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。8.严格执行测试计划,排除测试的随意性。9.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。步骤:1.模块测试模块测试的目的是保证每个模块作为一个单元能正确运行模块测试通常又称为单元测试在这个测试步骤中所发现的往往是编码和详细设计的错误2子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试模块相互间的协调和通信是这个测试过程中的主要问题这个步骤着重
27、测试模块的接口3.系统测试把经过测试的子系统装配成一个完整的系统来测试发现的往往是软件设计中的错误,也可能发现需求说明中的错误兼有检测和组装两重含义,通常称为集成测试4验收测试(验收测试也称为确认测试)验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误5.平行运行所谓平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。这样做的具体目的有如下几点:(1)可
28、以在准生产环境中运行新系统而又不冒风险(2)用户能有一段熟悉新系统的时间(3)可以验证用户指南和使用手册之类的文档(4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标三 集成测试中常使用自顶向下集成和自底向上集成两种策略,比较它们的区别?自顶向下 : 可在测试早期实现并验证系统主要功能且不需驱动模块,但是需桩模块自底向上: 设计测试用例容易且不需桩模块 但是只有到最后程序才能作为一个整体 。四黑盒测试的优缺点?白盒测试的优缺点?白盒测试:优点:迫使测试人员去了解软件的实现; 检测代码中的每条路径和分支; 揭示隐藏在代码中的错误;对代码的测试进行比较彻底。 缺点:白盒测试投入
29、较大,成本较高;白盒测试不验证规格的正确性;无法检查代码中遗漏的路径和数据敏感性错误。黑盒测试:优点:对较大的代码单元来说,黑盒测试比白盒测试的效率高;测试人员不需要了解实现得细节,包括特定的编程语言 ;测试人员和编程人员是相互独立的; 从用户的角度进行测试,很容易被接受和理解;有助于暴露任何与闺阁不一致或者歧异的地方;测试用例可以在规格完成后马上进行。缺点:不能测试程序内部特定部位;如果程序未执行的代码无法发现;没有清晰的和简明的规格,测试用例很难被设计。四掌握白盒测试技术(逻辑覆盖)(重点考查题,详细介绍看书P162-165),设计测试用例 (应用题)简介:逻辑覆盖是对一系列测试过程的总称
30、,这组测试过程逐渐进行越来越完整的通路测试适合于白盒测试覆盖程度由弱到强次序是:语句覆盖-判定-条件-判定/条件-条件组合第8章 维护一什么叫软件维护?维护的分类及概念?软件维护:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程1.诊断和改正错误 改正性维护。2.为了和变化了的环境(如软硬件升级、新数据库等)适当地配合而修改软件 适应性维。3.为了增加新功能,修改已有功能,改造界面,增加HELP等,而修改软件 完善性维护4. 为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件 预防性维护二维护的特点和过程?1、结构化维护与非结构化维护的对比 2. 维护的代价: 有形代价:费用已上升至总预算的80%; 无形代价:占用资源以致延误开发; 修改不及时引起用户不满 ;维护引入新错误,降低了软件质量,等等。(影响维护工作量的因素有 系统大小;程序设计语言;系统年龄;数据库技术的应用;先进的软件开发技术。)3. 维护的问题: 别人的程序很难读懂;文档与代码不一致;开发人员往往不参加维护;大多数软件在设计时没有考虑将来的修改。过程:维护组织,维护报告,维护的事件流,保存维护记录,评价维护活动。(具体内容见书P192-194)