-1-软件工程复习提纲第1章概述1、什么是软件危机?产生软件危机的主要原因?P3软件危机是指计算机软件的开发和维护过程中所遇见的一系列严重问题出现软件危机的主要原因是人们在开发软件时使用了错误的方法2、软件工程的定义?P5软件工程是指导计算机软件开发与维护的工程学料,它采用工程的概念,原理、技术和方法来开发与维护软件3、软件生命周期定义,八个阶段,及基本任务是什么?P10软件生命周期是指一个软件从定义、开发、使用和维护,直到最终被废弃,经历了一个漫长的时期。八个阶段为问题定义(关键问题是:“要解决的问题是什么?”);可行性研究(用最小的代价在尽可能短的时间内确定问题是否解决);需求分析(仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题);概要设计(概括地回答“怎么实现目标系统?”这个问题);详细设计(还不是编写程序,而是设计出程序的详细规格说明);编码和单元测试(写出正确的容易理解、容易维护的程序模块);综合测试(通过各种类型的测试(及相应的调试)使软件达到预定的要求);软件维护(通过各种必要的维护活动使系统持久地满足用户的需求)4、螺旋模型:综合了瀑布模型和快速原型的优点,并增加了风险分析5、5种模型的特点。瀑布模型具有三个特点:1阶段间具有顺序性和依赖性2推迟实现的观点3质量保证的重点快速原型模型是不带反馈环的,软件产品的开发基本上是线性顺序进行的增量模型也称为渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每一个构件由多个相互作用的模块构成,并且能够完成特定的功能螺旋模型综合了瀑布模型和快速原型的优点,并增加了风险分析喷泉模型第2章结构化分析1、可行性分析主要是进行哪三个方面的分析?P23技术可行性、经济可行性和操作可行性2、结构化分析主要建立什么模型?P32主要建立功能模型(数据流图)、数据模型(ER图)和行为模型(状态图)3、E-R关系图包含什么信息?P40包含着实体(客观世界中存在的且可相互区分的事物)、联系(客观世界中的事物彼此间往往是有联系的)和属性(实体或联系所具有的性质)4、什么是数据流图?P41数据流图(DFD)是一种形象直观的图形,它描绘数据在软件中从输入移动到输出的过程中所经受的变换(即加工处理)5、会画简单的实体联系图、系统流程图、数据流图?P426、什么是数据字典?P47数据字典是描述数据的信息的集合,是对目标系统中使用的所有数据的定义的集合7、结构化分析的策略是自顶向下逐步求精。8、与用户沟通主要有那三种方法。主要有访谈、简易的应用规格说明技术和原型系统9、CASE计算机辅助软件工程CASE:是借助于计算机及其软件工具的帮助,开发、维护、管理软件产品的过程,其目的是为了加快系统开发的过程,提高所开发系统的质量。-2-第3章结构化设计1、结构化软件设计准则,什么是模块化?P81模块化就是把程序划分成独立命名且独立访问的模块,每个模块完成一个子功能,这些模块集成起来构成一个整体2、什么是耦合?P84耦合是对一个软件结构内不同模块之间互连程度的度量3、模块的耦合性包括哪些类型?按从低到高怎么排列?什么是控制耦合?P84-85包括非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合4、什么是内聚?P85内聚是一个模块内的各个元素彼此结合的紧密程度5、模块的内聚性包括哪些类型?按从低到高怎么排列?什么是顺序内聚?P85-86包括偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚以上从右到左。如果一个模块内的处理元素和同一功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),称为顺序内聚6、结构化设计启发规则,什么是深度、宽度、扇出、扇入、模块的控制域、作用域?P87深度表示软件结构中控制的层数;宽度是软件结构内同一个层次上的模块总数的最大值;扇出是一个模块直接控制(调用)的模块数目;扇入是有多少个上级模块直接调用着它;模块的控制域是这个模块本身以及所有直接或间接从属于它的模块集合;模块的作用域定义为受该模块内一个判定影响的所有模块的集合7、按数据流的类型,结构化设计方法有两种设计策略,它们是变换分析设计和事务分析设计8、划分模块时,尽量做到高内聚低耦合,保持模块的独立性。9、详细设计的三个任务。过程设计、数据设计和接口设计10、界面设计应该考虑的四个问题。1模块化与模块独立2抽象3逐步求精4信息隐藏11、程序流程图、盒图、PAD图、判定表、判定树、伪码的使用及转化。第4章结构化实现1、以G。J。Myers的观点,简述软件测试的目的?P172⑴测试是为了发现程序中的错误而执行程序的过程⑵好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案⑶成功的测试是发现了至今为止尚未发现的错误的测试2、软件测试准则P174所有测试都应该能够追溯到用户需求应该在开始测试之前预先制定出测试计划在软件测试过程中应该应用Pareto原理应该从“小规模”测试开始,逐步过渡到“大规模”测试穷举测试是不可能的为了达到最佳的测试效果,应该由独立的第三方来从事测试工作3、什么是黑盒测试法和白盒测试法?P175、186白盒测试方法是按照程序内部预期应有的逻辑测试程序,检验程序中的每条执行通路是否能按预定要求正确工作-3-黑盒测试让软件工程师设计出能充分检查程序所有功能需求的输入条件集4、逻辑覆盖。逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试5、白盒测试、黑盒测试的种类是什么?P186-190白盒测试的种类:逻辑覆盖和控制结构测试黑盒测试的种类:等价划分、边界值分析和错误推测6、等价分类法的基本思想是什么?P186-187首先把程序的输入域划分成若干个数据类,然后根据划分出的输入数据种类设计测试用例7、什么是集成测试?P195集成测试是测试和组装软件的系统化技术,在把模块按照设计要求组装起来的同时进行测试,主要目标是发现与接口有关的问题8、集成测试阶段,渐增式与非渐增式测试有哪些区别?P195先分别测试每个模版,再把所有模块按设计要求放在一起结合成所要程序,这种方法称为非渐增式测试。把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试,这种每次增加一个模块的方法称为渐增式测试。非渐增式测试一下子把所有模块放在一起,并把整个程序作为一个整体来进行测试。渐增式测试与“一步到位”的非渐增式相反,把程序划分成小段来构造和测试。9、测试步骤。单元测试、集成测试、确认测试和验收测试10、α测试与β测试的差别。α测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试;β测试由软件的最终用户们在一个或多个客户场所进行。11、错误总数的估算。120ˆBbBBc第5章面向对象方法学部分1、简述面向对象方法学的主要优点?P2641与人类习惯的思维方法一致2面向对象软件稳定性好3面向对象软件可重用性好4较易开发大型软件产品5可维护型好2、什么是脚本、对象、类、实例、消息、方法、属性、继承、封装、多态、重载、动态联编、静态联编?P226-229脚本是指系统在某一执行期间内出现的一系列事件在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象(Object)“类”就是对具有相同数据和相同操作的一组相似对象的定义实例就是由某个特定的类所描述的一个具体的对象。消息,就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明方法,就是对象所能执行的操作,也就是类中所定义的服务属性,就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象继承是指能够直接获得已有的性质和特征,而不必重复定义它们封装就是把某个事物包起来,使外界不知道该事物的具体内容多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。-4-在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系3、喷泉模型中喷泉一词体现了什么特性?P232“喷泉”这个词形象地表明了面向对象软件开发过程迭代和无缝的特性4、简述三种面向对象模型的主要功能?P231对象模型(描述系统数据结构)、动态模型(描述系统控制结构)和功能模型(描述系统功能)5、对象与对象之间的关系(关联、聚集、泛化)(理解)P235-240关联关系表示两类对象之间存在着某种语义上的联系,也就是对象之间有相互作用、相互依靠的关系聚集表示一类对象与另一类对象之间的关系,是整体与部分的关系泛化关系,就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系,表明在通用元素(类)和具体元素(类)之间存在一般与特殊的关系。第6章软件维护1、软件维护是定义?软件维护有那些类型。所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程包括修正性维护、适应性维护、完善性维护和预防性维护2、软件维护的代价比例。完善性维护占全部维护活动的50%~66%,改正性维护占17%~21%,适应性维护占18%~25%,其他维护活动只占4%左右3、决定软件维护性的因素。1可理解性2可测试性3可修改性4可移植性5可重用性4、逆向工程的定义。软件的逆向工程就是分析程序以便在源代码更高的抽象层次上创建出该程序的某种表示的过程第7章软件项目管理1、CMM的五个等级是什么?初始级、可重复级、已定义级、已管理级和优化级2、质量保证。软件质量保证是在软件过程中的每一步都进行的“保护性活动”实验实验2:请根据P76习题3,绘制E-R图描绘本系统中的数据对象。-5-实验3:数据流图为方便旅客,某航空公司拟开发一个机票预订系统,旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。请用数据流图描绘本系统中的功能。旅行社旅客机票文件记账文件检查确认打印取票单校对订票交款打印记账旅客信息取票单旅客信息航班信息取票单机票航班信息账单航班信息取票单交款信息取票单软件工程实验4:根据下面学生成绩单管理的数据流图完成软件结构图。-6-学生成绩单管理的第一级分解:学生成绩单管理的第二级分解:-7-软件工程实验5:1:把P108页程序流程图用PAD图描述。2:完成P166页习题9第一小问,用判定表表示手续费的计算。-8-S1S2S8S3S4S5S6S7S9S10是否是否6A:软件测试根据所给源程序及该程序的可执行程序,画出程序的控制流程图,设计相应的测试用例并执行之,要求达到100%条件覆盖(判定中的各个条件的所有可能结果至少出现一次)。根据输入的年份判断是否为闰年。#includestdafx.hintisleapYear(intyear){intisLeapYear;if(year%4==0&&(year%100!=0||year%400==0))isLeapYear=1;elseisLeapYear=0;returnisLeapYear;}Int_main(intargc,_TCHAR*argv[]){intyear;scanf(“%d”,&year);if(isLeapYear(year)==1)printf(“true”);elseprintf(“false”);print