软件工程导论1第一章软件工程学概述1.什么是软件危机(概念)在计算机软件的开发和维护过程中所遇到的一系列严重问题2.软件工程学科出现的主要原因:软件危机的出现3.什么是软件工程?(概念)①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。4.简述结构化范型和面向对象范型的要点,并分析他们的优缺点目前使用得最广泛的软件工程方法学(2种):⑴传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。⑵面向对象方法学优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。5.软件生命周期每个阶段的基本任务问题定义:准确地回答“要解决的问题是什么”可行性研究:确定问题是否值得去解决需求分析:准确地回答“系统必须做什么”总体设计:设计出实现目标系统的几种可能的方案确定程序由哪些模块组成以及模块间的关系详细设计:把解法具体化(设计出程序的详细规格说明)编码和单元测试:写出正确的容易理解、容易维护的程序模块综合测试:通过各种类型测试(及相应的调试)使软件达到预期的要求软件维护:通过各种必要的维护活动使系统持久地满足用户的需要软件生命周期由软件定义、软件开发和运行维护(也成为软件维护)3个时期组成软件定义时期:问题定义、可行性研究和需求分析软件开发时期:总体设计、详细设计、编码和单元测试、综合测试软件维护时期软件工程导论26.什么是软件过程?(概念)为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤7.常见的软件生存周期模型(了解)1.瀑布模型——阶段化过程特点:具有顺序性和依赖性缺点:是由文档驱动的。由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。2.快速原型模型——线性顺序进行本质:快速不带反馈环原型的用途是获知用户的真正需求,一旦需求确定了,原型可以抛弃,当然也可以在原型的基础上进行开发。3.增量模型(也称为渐增模型)4.螺旋模型螺旋模型将瀑布模型和快速原型模型结合起来,加入了两种模型均忽略了的风险分析,弥补了这两种模型的不足。4个象限:目标设定、风险估计与弱化、开发与验证、计划螺旋模型是风险驱动——增加风险分析主要适用:内部开发的大规模软件项目5.喷泉模型适用于:面向对象范型的过程模型软件过程必须支持反馈和迭代。软件工程导论3第二章可行性研究1.一般来说,至少应该从下述3个方面研究可行性技术可行性、经济可行性、操作可行性必要时还应该从法律、社会效益等更广泛的方面研究2.需求和设计过程3.什么是数据流图(DFD)(概念)(名词解释)一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。4.数据流图由4个元素构成正方形(或立方体)数据的源点或终点;圆角矩形(或圆形)变换数据的处理;开口矩形(或两条平行横线)数据存储(数据静态保存)④箭头数据流,即特定数据的流动方向5.看例题P422.4.26.什么是数据字典(概念)(名词解释)对数据流图中包含的所有元素的定义的集合7.数据的关系,采用下列符号+和(连接两个分量)例如,x=a+b,表示x由a和b组成[]或(从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量例如,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.什么是投资回收期?投资回收期就是使累计的经济效益等于最初投资所需要的时间通常用投资回收期衡量一项开发工程的价值软件工程导论410.什么是纯收入衡量工程价值的另一项经济指标是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。第三章需求分析需求分析最终结果是产生规格说明书1.什么是需求分析(概念)需求分析是发现、求精、建模、规格说明和复审的过程2.需求分析分为功能需求和非功能需求3.与用户沟通获取需求的方法(了解)⑴访谈——用户处于被动地位访谈(或称为会谈)是最早开始运用的获取用户需求的技术,也是迄今为止仍然广泛使用的需求分析技术访谈有两种基本形式,分别为是正式的和非正式的访谈正式访谈时,系统分析员将提出一些事先准备好的具体问题。在非正式访谈中,分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法。⑵面向数据流自顶向下求精——用户处于被动地位数据是需求分析的出发点结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法目标:把数据流和数据存储定义到元素级方法:从数据流图的输出端着手分析可行性研究阶段产生的是高层数据流图从数据流图的输出端着手分析,这是因为系统的基本功能是产生这些输出的关键原因输出数据决定了系统必须具有的最基本的组成元素(包括功能和数据结构组成)软件工程导论5⑶简易的应用规格说明技术这种方法提倡用户也开发者密切合作、共同标示问题、提出解决方案要素,商讨不同方案并指定基本需求。它不是万能灵药优点:要求开发者与用户不分彼此,齐心协力,密切合作即时谈论并求精有能导出规格说明的具体步骤⑷快速建立软件原型快速建立软件原型是最准确、最有效、最强大的需求分析技术快速原型就是快速建立起来的旨在演示目标系统主要功能的可运行的程序特性:快速、容易修改快速原型的目的是尽快向用提供一个可在计算机上运行的目标系统的模型,以便使用户和开发者在目标系统应该“做什么”这个问题上尽可能快地达成共识。在实际开发软件产品时,原型的“修改—试用—反馈”过程可能重复多遍,如果修改耗时过多,势必延误软件开发时间。为了快速地构建和修改原型,通常使用下述3种方法第四代技术可重用的软件构建形式化规格说明和原型环境4.状态转换图——状态状态时任何可以被观察到的系统行为模型,一个状态代表系统的一种行为模型在一张状态图中只能有一个初态,而终态则可以有0至多个在状态图中定义的状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。状态图既可以表示系统循环运行过程,也可以表示系统单程生命期5.层次方框图(了解)层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构树形结构的顶层是一个单独的矩形框,它表达完整的数据结构,下面的各层矩形框代表这个数据的子集,最底层的各个框代表组成这个数据的实际数据元素(不能再分解的元素)例如,描绘一家计算机公司全部产品的数据结构可以用图3.5中的层次方框图表示,这家公司的产品由硬件、软件和服务3类产品组成,软件产品又分为系统软件和应用软件,系统软件又进一步分为操作系统、编译程序和软件工具等。软件工程导论66.验证软件需求(了解)⑴从哪些方面验证软件需求的正确性一般说来,应该从下述4个方面进行验证:一致性所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。完整性需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。现实性指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。④有效性必须证明需求是正确有效的,确实能解决用户面对的问题。⑵验证软件需求的方法验证需求的一致性为了克服上述困难,人们提出了形式化的描述软件需求的方法。当软件需求规格说明书是用形式化的需求陈述语言书写的时候,可以用软件工具验证需求的一致性。验证需求的现实性为了验证需求的现实性,分析员应该参照以往开发类似系统的经验,分析用现有的软、硬件技术实现目标系统的可能性。验证需求的完整性和有效性理想的做法是先根据需求分析的结果开发出一个软件系统,请用户试用一段时间以便能认识到他们的实际需要是什么。比较理想的做法是用户通过试用原型系统,也能获得许多宝贵的经验,从而可以提出更符合实际的要求。习题3-6复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接受复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告,等待维修人员来排除故障,故障排除后回到闲置状态。试用状态转换图描绘复印机的行为软件工程导论7第五章总体设计总体设计过程通常由两个主要阶段组成,分别是系统设计阶段和结构设计阶段。1.什么是模块化(概念)模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求2.抽象(理解)从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出3.逐步求精(理解)逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”抽象与求精是一对互补的概念。抽象使得设计者能够说明过程和数据,同时却忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。4.什么是信息隐藏(概念)信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。5.模块独立(选择题考概念)模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间相互依赖(连接)的紧密程度;耦合是一对软件结构内不同模块之间互联程度的度量内聚衡量一个模块内部各个元素彼此结合的紧密程度。数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据控制耦合:一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整特征耦合:当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素注:介于数据耦合与控制耦合之间公共耦合:两个或多个模块通过一个公共数据环境相互作用公共环境可以是全局变量、存储介质上的文件、物理设备、共享通讯区等内容耦合:当一个模块直接修改或操作另一个模块的数据或者直接转入另一个模块时,就发生了内容耦合。耦合是影响软件复杂程度的一个重要因素。在软件设计中应该采取下述设计原则:尽量使用数据耦合,少用控制耦合,限制外部耦合和公共耦合的范围,完全不用内容耦合。好的软件结构应该是:低耦合,高内聚耦合性低→高(模块独立性强→弱):数据耦合→特征耦合→控制→耦合→公共耦合→内容耦合模块之间联系越紧密,其耦合性就越强、模块的独立性就越差。软件工程导论86.什么是深度、宽度、扇出和扇入深度表示软件结构中控制的层数标志一个系统的大小和复杂程度,如果层数过多,则对于某些简单模块考虑适当合并宽度是软件结构内同一层次上的模块总数的最大值一般来说,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出扇出是一个模块直接控制(调用)的模块数目扇出太大意味着模块过于复杂,需要控制和协调过多的下级模块;扇出过小也不好通常,一个设计得好的系统平均扇出是3或4.一个模块的扇入表明有多少个上级模块直接调用它,扇入越大意味着共享该模块的上级模块数目越多,这是有好处的经验表明,优秀的软件结构通常顶层扇出高,中层扇出较少,低层扇入到公共的实用模块中去(底层模块有高扇入)7.什么是作用域?什么是控制域?它们之间的关系?(简答)模块的作用域定义为受该模块内一个判定影响的所有模块的集合。模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。关系:模块的作用域应该在控制域之