第一章软件危机原因:1、软件维护费用急剧上升,直接威胁计算机应用的扩大。2、软件生产技术进步缓慢,是加剧软件危机的重要原因。软件工程分代:1、传统软件工程结构化分析结构化设计面向过程的编码软件测试2、面向对象软件工程OO分析与对象抽取对象详细设计面向对象的编码与测试3、基于构件的软件工程领域分析和测试计划定制领域设计建立可复用构件库按“构件集成模型”查找与集成构件第二章软件的生存周期:一个软件从开始立项起,到废弃不用止。软件生存周期的主要活动:1、需求分析、2、软件分析3、软件设计4、编码(测试)5、软件测试6、运行维护传统的软件过程1、瀑布模型:是一种基于软件生存周期的线性开发模型。特点:1.阶段间具有顺序性和依赖性。2.推迟实现的观点。3.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。优点:1)为项目提供了按阶段划分的检查点。2)当前一阶段完成后,您只需要去关注后续阶段。3)可在迭代模型中应用瀑布模型。缺点:1.传统的瀑布模型过于理想化。事实上,人在工作过程中不可能不犯错误。2.在设计阶段可能发生规格说明文档中的错误。3.而设计上的缺陷或错误可能在实现过程中显现出来。4.在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。2、快速原型模型:作用:先建立一个能够反映用户主要需求的原型,让用户实际看一下未来系统的概貌,以便判断哪些功能是符合需要的,哪些方面还需要改进。然后将原型反复改进,直至建立完全符合用户要求的新系统。特点:1.克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险2.所选用的开发技术和工具不一定符合主流的发展;3.快速建立起来的系统结构加上连续的修改可能会导致产品质量低下螺旋模型:特点:——风险驱动1、主要适用于内部开发的大规模软件项目2、要有具有丰富风险评估专门知识的开发人员,否则风险更大。软件可行性研究:可行性研究的目的,是弄清待开发的项目是不是可能实现和值得进行,通常由系统分析员完成,并需写出可行性论证报告。第三章结构化分析主要有两个任务:1、建立分析模型——数据、功能和行为模型2、编写需求说明书。SA模型的组成:如图1、实体联系图(E-R图)2、数据流图(DFD)3、状态变换图(STD)数据流图:(画法)——P461、组成符号圆框:加工;箭头:数据的流向。数据名称标在箭头的边上;方框:数据的源点和终点;双杠(单杠):数据文件或数据库。文件与加工之间用带箭头的直线连接,单向表示只读或只写,双向表示又读又写。每一图形符号都必须标上名字,加工框加上编号。2、DFD的性质分层数据流图:(画法)——P52作用:为大型复杂的软件系统,逐层地对系统进行分解。最终为待开发的系统画出一组分层的数据流图。第二章(习题)1、什么是软件生存周期?把生存周期划分为阶段的目的是什么?答:一个软件从开始立项起,到废弃不用止软件生存周期划分为计划、开发和运行3个时期;把整个生存周期划分为较小的阶段,给每个阶段赋予确定而有限的任务,就能够化简每一步的工作内容,使因为软件规模增长而大大增加了软件复杂性变得简易控制和管理。2、传统的瀑布模型把生存周期划分为哪些阶段?瀑布模型软件开发有哪些特点?答:瀑布模型在编码以前安排了分析阶段和设计阶段;阶段间具有顺序性和依赖性4、什么是快速原型法?其快速表现在哪里?答:首先建立一个能够反映用户主要需求的原型,让用户实际看一看未来系统的概貌,以便判断哪些功能是符合需要的,哪些方面还需要改进。然后将原型改进,最终建立完全符合用户要求的新系统。它的快速表现在使用缩短开发周期的语言和工具,能在短时间内提供出成品,但不包括成品中的细节,然后让客户进行对比。5、实现快速原型法的最终系统可能有几种方法?请说明并加以比较。答:原型系统仅包括未来系统的主要功能,以及系统的重要接口。为了尽快向用户提供原型,开发原型系统时应尽量使用能缩短开发周期的语言和工具。最终系统的形成可以采用原型废弃不用,另一方法是补充修改模型获得最终系统。方法一不包括系统的细节。后一种方法在实际工作中,由于原型系统使用的语言往往存在效率不高等原因,除了少数简单的事务系统外,大多数原型都废弃不用,仅把建立原型的过程当作帮助定义软件需求的一种手段。6、比较增量模型和螺旋模型的特点及异同。答:增量模型是瀑布模型的顺序特征与快速原型法的迭代特征相结合的产物。螺旋模型是一种迭代模型,每迭代一次,螺旋线就前进一周。增量模型每个增量具有高内聚低耦合,高度的独立性。而螺旋模型它在结合瀑布模型与快速原型的基础上还增加了风险分析。第三章(习题)2、需求分析要经过哪些步聚?答:需求获取、需求提炼、需求描述、需求验证。6、为什么DFD要分层?画分层DFD要遵循哪些原则?答::大型复杂的软件系统,其DFD可能含有数百乃至数千个加工,不能设想一次就将它们全部画齐。正确的做法是:从系统的基本模型(把整个系统看成一个加工)开始,逐层地对系统进行分解。原则:由顶向下,逐步细化。9、简释事务型结构。答:一次动作、时间或状态变化也可以成为一次事务。由至少一条接受路径,事务中心和若干条动作路径组成。10、简释变换型结构。答:由传入路径,变换中心和传出路径三部分组成。11、为什么事务型软件的结构常常具有中间大、两头小的形状?答:因为设计良好的软件通常具有瓮形结构,两头小,中间大。这类的软件下部收拢,表明它在低模块中使用了较多高扇入的共享模块。第五章(习题)1、什么是软件需求?可以从哪些方面描述软件需求?答:软件需求是指软件系统必需遵循的条件或具备的能力。软件需求一般包括3个不同的层次:业务需求、用户需求和功能需求。2、软件需求的任务是什么?要经过哪些步骤?答:为待开发的软件系统进行需求定义与分析,并建立一个需求模型。4个步聚:需求获取、需求提炼、需求描述、需求验证4、建立用例模型时,如何确定参与者和用例?P114参与者泛指所有存在于系统外部并与系统交互的人、硬件或其它系统。确定参与者可以从以下问题入手:(1)系统开发完之后,有哪些人会使用这个系统?(2)系统需要从哪些人或其他系统中获得数据?(3)系统需要为哪些人或其他系统中提供数据?(4)系统会与哪些其他系统相关联?(5)系统由谁来维护和管理确定用例,可以针对每一个参与者从以下问题入手:(1)参与者为什么要使用该系统?(2)参与者是否在系统中创建、修改、删除、访问和存储数据?如果是,参与者又是如何来完成这些操作?(3)参与者是否会将外部某些事件通知该系统?(4)系统是否会将内部某些事件通知该参与者?第八章(习题)5、软件测试的基本任务是什么?测试与纠错有什么区别?答:测试的目的是发现程序错误;任务是通过在计算机上执行程序,暴露程序中潜在的错误。纠错的目的是定位和纠正错误;任务是消除软件故障,保证程序的可靠运行。通常把一次程序执行需要的测试数据成为一个测试用例,每个测试用例产生一个相应的测试结果,如果它与期望结果不符,便说明程序中存在错误,需要用纠错来改正。11、多模块程序的测试有哪些层次?各层测试主要解决什么问题?答:四个层次:单元测试、集成测试、确认测试和系统测试。单元测试:通过对象模块的静态分析和动态测试,使其代码达到模块说明书的要求。集成测试:把经过单元测试的模块逐步组成具有良好一致性的完整程序。确认测试:确认组装完毕的程序是否满足软件需求规格说明书的要求。系统测试:检查把确认测试合格的软件安装到系统中以后,能否与系统的其余部分协调运行,并且实现SRS的要求。12、集成测试有哪几种实施策略?试比较它们的优缺点。答:3种:自顶向下、由底向上和两头逼近的混合方式。自顶向下优点:能较早显示整个程序的轮廓,向用户展示程序的概貌,取得用户的理解与支持。缺点:当测试上层模块时因使用桩模块较多,很难模拟出真实模块的全部功能,使部分测试内容被迫推迟,只能等待换上真实模块后再补充测试。由底向上优点:测试从下层模块开始,测试设计用例比较容易。缺点:在测试的早期不能显示出程序的轮廓。混合方式优点:综合了以上两种策略的长处。