1、第一章 软件工程学概述1.什么是软件危机(概念)在计算机软件的开发和维护过程中所遇到的一系列严重问题2.软件工程学科出现的主要原因 :软件危机的出现 3.什么是软件工程?(概念) 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件; 研究中提到的途径。4.简述结构化范型和面向对象范型的要点,并分析他们的优缺点目前使用得最广泛的软件工程方法学(2种): 传统方法学:也称为生命周期方法学或结构化范型。 优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于 不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或
2、者对软件的需求是模糊的或会承受时间而变化的时候,开发出 的软件往往不成功;而且维护起来仍然很困难。 面向对象方法学优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作; 促进了软件重用。5.软件生命周期每个阶段的基本任务 问题定义:准确地回答“要解决的问题是什么”可行性研究:确定问题是否值得去解决需求分析 :准确地回答“系统必须做什么”总体设计:设计出实现目标系统的几种可能的方案 确定程序由哪些模块组成以及模块间的关系详细设计:把解法具体化(设计出程序的详细规格说明)编码和单元测试:写出正确的容易理解、容易维护的程序模块综合测试:通过各种类型测试(及相应的调试)使软件
3、达到预期的要求软件维护:通过各种必要的维护活动使系统持久地满足用户的需要软件生命周期划分成哪些阶段l 软件生命周期由软件定义、软件开发和运行维护(也成为软件维护)3个时期组成软件定义时期:问题定义、可行性研究和需求分析 软件开发时期:总体设计、详细设计、编码和单元测试、综合测试软件维护时期6.什么是软件过程?(概念)为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤7.常见的软件生存周期模型(了解)1.瀑布模型阶段化过程特点:具有顺序性和依赖性缺点:是由文档驱动的。由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。2.快
4、速原型模型线性顺序进行本质:快速不带反馈环 原型的用途是获知用户的真正需求,一旦需求确定了,原型可以抛弃,当然也可以在原型的基础上进行开发。3.增量模型(也称为渐增模型)4.螺旋模型螺旋模型将瀑布模型和快速原型模型结合起来,加入了两种模型均忽略了的风险分析,弥补了这两种模型的不足。 4个象限:目标设定、风险估计与弱化、开发与验证、计划 螺旋模型是风险驱动增加风险分析主要适用:内部开发的大规模软件项目5. 喷泉模型适用于:面向对象范型的过程模型软件过程必须支持反馈和迭代。第二章 可行性研究1.一般来说,至少应该从下述3个方面研究可行性技术可行性、经济可行性、操作可行性必要时还应该从法律、社会效益
5、等更广泛的方面研究2.需求和设计过程3.什么是数据流图(DFD)(概念)(名词解释)一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。4.数据流图由4个元素构成正方形(或立方体) 数据的源点或终点; 圆角矩形(或圆形) 变换数据的处理; 开口矩形(或两条平行横线) 数据存储(数据静态保存) 箭头 数据流,即特定数据的流动方向 5.看例题P42 2.4.26.什么是数据字典(概念)(名词解释)对数据流图中包含的所有元素的定义的集合7.数据的关系,采用下列符号+ 和(连接两个分量) 例如,x=a+b,表示x由a和b组成 或 (从方括弧内列出的若干个分量中选择一个),通常用“
6、| ”号隔开供选择的分量 例如,x=a,b,x+a/b,表示x由a或由b组成 重复(重复花括弧内的分量) 注:常常使用上限和下限进一步注释表示重复的花括弧 例如,x=a,表示x由0个或多个a组成( ) 可选(圆括弧里的分量可有可无)8.货币的时间价值随着年数上升通常用利率的形式表示货币的时间价值。假设年利率为i,如果现在存入P元,则n年后可以得到的钱数为:F=P(1+i)n 反之,如果n年后能收入F元钱,那么这些钱的现在价值是:P=F/(1+i)n9.什么是投资回收期?投资回收期就是使累计的经济效益等于最初投资所需要的时间通常用投资回收期衡量一项开发工程的价值10. 什么是纯收入衡量工程价值的
7、另一项经济指标是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。第三章 需求分析需求分析最终结果是产生规格说明书 1.什么是需求分析(概念)需求分析是发现、求精、建模、规格说明和复审的过程2. 需求分析分为 功能需求和非功能需求3. 与用户沟通获取需求的方法(了解)访谈用户处于被动地位访谈(或称为会谈)是最早开始运用的获取用户需求的技术,也是迄今为止仍然广泛使用的需求分析技术访谈有两种基本形式,分别为是正式的和非正式的访谈正式访谈时,系统分析员将提出一些事先准备好的具体问题。在非正式访谈中,分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自
8、己的想法。面向数据流自顶向下求精用户处于被动地位数据是需求分析的出发点结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法目标:把数据流和数据存储定义到元素级 方法:从数据流图的输出端着手分析可行性研究阶段产生的是高层数据流图从数据流图的输出端着手分析,这是因为系统的基本功能是产生这些输出的关键原因输出数据决定了系统必须具有的最基本的组成元素(包括功能和数据结构组成)简易的应用规格说明技术 这种方法提倡用户也开发者密切合作、共同标示问题、提出解决方案要素,商讨不同方案并指定基本需求。 它不是万能灵药 优点:要求开发者与用户不分彼此,齐心协力,密切合作 即时谈论并求精 有能导出规格说明
9、的具体步骤快速建立软件原型 快速建立软件原型是最准确、最有效、最强大的需求分析技术 快速原型就是快速建立起来的旨在演示目标系统主要功能的可运行的程序特性:快速、容易修改快速原型的目的是尽快向用提供一个可在计算机上运行的目标系统的模型,以便使用户和开发者在目标系统应该“做什么”这个问题上尽可能快地达成共识。 在实际开发软件产品时,原型的“修改试用反馈”过程可能重复多遍,如果修改耗时过多,势必延误软件开发时间。为了快速地构建和修改原型,通常使用下述3种方法第四代技术可重用的软件构建形式化规格说明和原型环境4. 状态转换图状态状态时任何可以被观察到的系统行为模型,一个状态代表系统的一种行为模型在一张
10、状态图中只能有一个初态,而终态则可以有0至多个在状态图中定义的状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。状态图既可以表示系统循环运行过程,也可以表示系统单程生命期5.层次方框图(了解) 层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构 树形结构的顶层是一个单独的矩形框,它表达完整的数据结构,下面的各层矩形框代表这个数据的子集,最底层的各个框代表组成这个数据的实际数据元素(不能再分解的元素) 例如,描绘一家计算机公司全部产品的数据结构可以用图3.5中的层次方框图表示,这家公司的产品由硬件、软件和服务3类产品组成,软件产品又分为系统软件和应用软件,系统软件又进一步分
11、为操作系统、编译程序和软件工具等。6. 验证软件需求(了解)从哪些方面验证软件需求的正确性一般说来,应该从下述4个方面进行验证:一致性所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。完整性需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。现实性指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。 有效性必须证明需求是正确有效的,确实能解决用户面对的问题。验证软件需求的方法验证需求的一致性 为了克服上述困难,人们提出了形式化的描述软件需求的方法。当软件需求规格说明书是用形式化的需求陈述语言书写的时候,可以用软件工具验证需求的一致性。验证需求的现实性为了验证需求的现
12、实性,分析员应该参照以往开发类似系统的经验,分析用现有的软、硬件技术实现目标系统的可能性。验证需求的完整性和有效性理想的做法是先根据需求分析的结果开发出一个软件系统,请用户试用一段时间以便能认识到他们的实际需要是什么。比较理想的做法是用户通过试用原型系统,也能获得许多宝贵的经验,从而可以提出更符合实际的要求。习题3-6 复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接受复印命令;如果复印时发生卡纸故障,
13、则进入卡纸状态,发出警告,等待维修人员来排除故障,故障排除后回到闲置状态。试用状态转换图描绘复印机的行为第五章 总体设计总体设计过程通常由两个主要阶段组成,分别是系统设计阶段和结构设计阶段。 1.什么是模块化(概念) 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求2. 抽象(理解) 从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出3. 逐步求精(理解) 逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。” 抽象与求精是一对互补的概念。抽象使得设计者能够说明过
14、程和数据,同时却忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。4. 什么是信息隐藏(概念)信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。5. 模块独立(选择题考概念)模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间相互依赖(连接)的紧密程度;耦合是一对软件结构内不同模块之间互联程度的度量内聚衡量一个模块内部各个元素彼此结合的紧密程度。数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据控制耦合:一个模块
15、在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收 信号的模块的动作根据信号值进行调整特征耦合:当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素 注:介于数据耦合与控制耦合之间公共耦合:两个或多个模块通过一个公共数据环境相互作用 公共环境可以是全局变量、存储介质上的文件、物理设备、共享通讯区等内容耦合:当一个模块直接修改或操作另一个模块的数据或者直接转入另一个模块时,就发 生了内容耦合。耦合是影响软件复杂程度的一个重要因素。在软件设计中应该采取下述设计原则:尽量使用数据耦合,少用控制耦合,限制外部耦合和公共耦合的范围,完全不用内容耦合。好的软件结构应该是:低耦
16、合,高内聚耦合性低高(模块独立性强弱):数据耦合特征耦合控制耦合公共耦合内容耦合模块之间联系越紧密,其耦合性就越强、模块的独立性就越差。6. 什么是深度、宽度、扇出和扇入深度表示软件结构中控制的层数标志一个系统的大小和复杂程度,如果层数过多,则对于某些简单模块考虑适当合并 宽度是软件结构内同一层次上的模块总数的最大值一般来说,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出扇出是一个模块直接控制(调用)的模块数目扇出太大意味着模块过于复杂,需要控制和协调过多的下级模块;扇出过小也不好通常,一个设计得好的系统平均扇出是3或4. 一个模块的扇入表明有多少个上级模块直接调用它,扇入越大意味着共享
17、该模块的上级模块数目越多,这是有好处的 经验表明,优秀的软件结构通常顶层扇出高,中层扇出较少,低层扇入到公共的实用模块中去(底层模块有高扇入)7.什么是作用域?什么是控制域?它们之间的关系?(简答)模块的作用域定义为受该模块内一个判定影响的所有模块的集合。模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。关系:模块的作用域应该在控制域之内图中所示的结构图的深度是5图中所示的结构图的宽度为7图中模块M的扇出是4,模块A的是2,模块B的扇出是1图中模块G的扇入是1,模块I的扇入是2,模块R的扇入是4在图中模块A的控制域是A、B、C、D、E、F等模块的集合8.面向数据流的设计方法面向
18、数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。 这种方法与软件需求分析阶段的结构化分析方法相衔接,可以很方便地将用数据流图表示的信息转换成程序结构的设计描述;面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有两种类型:变换流、事物流9.怎样映射过程 看例子P105 5.5.2第六章 详细设计1.详细设计阶段的根本目标确定应该怎样具体地实现所要求的系统2. 人机界面设计(了解)(选择、判断) 看书上P119-1243.判定表当算法中包含多重嵌套的条件选择时,判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系 一张判定表由四部分组成,左上部
19、列出所有条件,左下部是所有可能做的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。判定表的优点是能够简洁,无二义性地描述所有的处理规则。但判定表表示的是静态逻辑,是在某种条件取值组合情况下可能的结果,它不能表达加工的顺序,也不能表达循环结构 4.判定树判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。5.面向数据结构设计方法在完成了软件结构设计后,可以使用面向数据结构的方法来设计每个模块的处理过程面向数据结构设计方法的最终目标是得出对程序处理过程的描述Jackson图数据元素彼此之间的逻辑关系:顺序、选择、重复元顺序结构一个顺序元素由一
20、个或多个从左到右的元素组成每个组成的元素只出现一次选择结构选择是“If Then Else”或“Case”的结构,而且必须有两个或多个元素使用选择元素时根据指定的条件从这些子元素中选择一个子元素重复结构重复元素仅由一个子元素构成,表示重复元素由子元素重复0次或多次组成6.计算环形复杂度的方法(3种)流图中的区域数等于环形复杂度。流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。第七章 实现1.测试的目的在软件投入生产性运行之前,尽可能多地发现软件中的错误。2.调试的目的确定错误的原因和准确位置,并改
21、正错误2.测试步骤单元测试集成测试(又称综合测试)确认测试3.测试方法白盒测试和黑盒测试4.单元测试(了解)单元测试测试中最基础的测试重点模块接口局部数据结构重要的执行通路出错处理通路边界条件5.集成测试(理解)集成测试 也称组装测试、联合测试经单元测试后,每个模块都能独立工作,但把它们放在一起往往不能正常工作增量式集成又可分为:自顶向下集成优点:不需要驱动模块;能尽早对程序的主要控制和决策机制进行检验,能较早发现整体 性的错误;深度优先的自顶向下集成能较早对某些完整的程序功能进行验证。缺点:测试时低层模块用桩模块替代,不能反映真实情况;重要数据不能及时回送到上层模块。自底向上集成优点:不需要
22、桩模块,所以容易组织测试;将整个程序结构分解成若干个簇,对同一层次的 簇可并行进行测试,可提高效率。缺点:整体性的错误发现得较晚。6.确认测试确认测试也称为验收测试,它的目标是验收软件的有效性7.白盒测试语句覆盖每个可执行语句都至少执行一次判定覆盖(也称分支覆盖)每个判定的每个分支至少执行一次条件覆盖不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果条件覆盖覆盖能力最强8控制结构测试(应用)看书P166-1689. 等价划分(选择题)(考概念) 等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。一个理想的测试用例能独自发现一类错误,
23、去覆盖每一个。10. 边界值分析(选择)(掌握原理)边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。如果输入条件规定了值的范围,则选择刚刚达到这个范围的边界的值以及刚刚超出这个范 围的边界的值作为测试输入数据。例如:规定输入的考试成绩在0100之间,则取0,100,1,101作为测试输入数据。如果输入条件规定了值的个数,则分别选择最大个数、最小个数、比最大个数多1、比最 小个数少1的数据作为测试输入数据。例如:规定一个运动员的参赛项目至少1项,最多3项,那么,可选择参赛项目分别是1 项、3项、0项、4项的测试输入数据。对每个输出条件使用第1条。例如:输出的金额值大于等于0且小于104
24、 ,则选择使得输出金额分别为0、9999、1、 10000的输入数据作为测试数据。对每个输出条件使用第2条。例如:规定输出的一张发票上,至少有1行内容,至多有5行内容,则选择使得输出发票分 别有1行、5行、0行、6行内容的输入数据作为测试数据。如果程序的输入或输出是个有序集合例如,顺序文件、表格,则应把注意力集中在有序集的第1个元素和最后一个元素上。6如果程序中定义的内部数据结构有预定义的边界例如,程序中数组A的下界是10,上界是20,则可选择使得A的下标为10、20、9、21的输入数据作为测试数据。11.软件可靠性定义(考概念)程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。1
25、2软件可用性定义(考概念)软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。13.软件可靠性和软件可用性的区别可靠性意味着在0到t这段时间间隔内系统没有失效可用性只意味着在时刻t,系统是正常运行的。14. 估计MTTF(平均无故障时间)的方法1.符号在估算MTTF的过程中使用下述符号表示有关的数量:ET测试之前程序中错误总数;IT程序长度(机器指令总数);测试(包括调试)时间;Ed()在0至期间发现的错误数;Ec()在0至期间改正的错误数。 经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即MTTF=1/K(ET/IT-Ec(t)/IT),其中K为常数,它的值
26、应该根据经验选取。第八章 维护1.软件维护(4类维护)完善性维护、改正性维护、适应性维护、其他维护活动第九章 面向对象方法学引论1.封装(概念)(了解)封装是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。2.面向对象需求分析3个主要模型对象模型、动态模型、功能模型3. UML建模语言4.类与类之间的关系(了解)关联、泛化(继承)、依赖和细化5.受限泛化(概念)(了解)可以给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。6. 用例图一副用例图包含的模型元素有系统、行为者、用例及用例之间的关系。7. 用例之间的关系
27、 用例之间的关系:扩展关系 使用关系扩展与使用之间的异同: 这两种关系都意味着从几个用例中抽取那些公共的行为并放入一个单独的用例中,而这个用例被其他用例使用或扩展,但是,使用和扩展的目的是不同的。通常在描述一般行为的变化时采用扩展关系;在两个或多个用例中出现重复描述又想避免这种重复时,可以采用使用关系。第十章 面向对象分析1.脚本系统在某一执行期间内出现的一系列事件7-8对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了 15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第 二个月改正了10个错误),MTTF=15h。根据上述数据确定MTTF与测试时间
28、之间的函数关系,画出MTTF与测试时间的关系曲线。在画这条曲线时做了什么假设?设程序平均无故障时间MTTF和测试时间之间存在线性关系,即MTTF=a+bt 10=a+b,15=a+2b解出:a=5,b=5所以, MTTF和t之间存在下列关系MTTF=5+5t为做到MTTF=100h,必须进行多长时间的集成测试?100=5+5tt=19 即还需要进行19个月的集成测试当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?MTTF=10000/K(ET-EC(t)改正15个错误,MTTF=10改正25个错误, MTTF=15解上列方程式,ET=45,K=33.3集成测试结束时MTTF=100h 100=10000/33.3(45-EC(19))EC(19)=42,当集成测试结束改正了42个错误,还潜伏了3个错误盒图与PAD图之间的转换盒图(N-S图)PAD图