软件工程复习提纲考试题型:判断10题30分、简答40(4道题)、设计30分(2道题)第1章:软件与软件工程1.软件的概念,组成三要素:程序、数据、文档软件是“能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述程序的操作和使用的文档”2.软件危机的概念,主要问题,主客观原因,解决途径1)软件危机是指软件开发和维护过程中遇到的一系列严重问题.2)软件危机包括下述两方面的问题:如何开发软件,满足对软件的日益增长的需求.如何维护数量不断膨胀的已有软件.3)造成软件危机的主客观原因客观:软件本身特点规模大,逻辑性强,不可见性分布性复杂性主观:缺乏软件工程的指导,没有掌握正确的软件开发方法学,忽视问题的定义与分析,急于求成忽视需求分析软件开发=程序编写轻视软件维护4)软件危机的解决途径软件危机使得人们认识到:必须建立工程概念,用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理、维护和更新。开发先进的软件工具,具备智能化、自动化。---计算机辅助软件工程。3.软件工程的概念,主要目标,原则1)软件工程是开发、运行、维护和修复软件的系统方法2)软件工程的主要目标生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。3)软件工程的原则软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。包括如下原则:(1)选取适宜的开发模型(2)采用合适的设计方法(3)提供高质量的工程支撑(4)重视软件工程的管理。4.软件工程的两个明显特点:规范化和文档化1)规范化的重要性:为了使由许多人共同开发的软件系统能正确无误地工作,开发人员必须遵守相同的约束规范(用统一的软件开发模型来统一软件开发步骤和应进行的工作,用产品描述模型来规范文档格式,使其具有一致性和兼容性),规范化使软件生产摆脱了个人生产方式,进入了标准化、工程化阶段。2)文档在软件工程中具有重要的作用:一个复杂的软件要让其他人员读懂并且理解,除程序代码外,还应有完备的设计文档来说明设计思想、设计过程和设计的具体实现技术等有关信息。文档的主要作用如下:①开发人员相互沟通、协同工作的有利工具;②按进度要求提交指定文档,能使软件生产过程的不可见性变为部分可见,便于对软件生产进度进行管理;③通过对提交的文档进行技术审查和管理审查,以保证软件的质量和有效的管理。1.两类软件工程:传统软件工程(结构化开发方法)和面向对象的软件工程5.软件生存周期软件产品从形成概念,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期。软件生存周期一般包括计划(定义)、开发、运行(维护)三个时期,每一个时期又划分为若干阶段。每个阶段有明确的任务,这样使规模大、结构复杂和管理复杂的软件开发变得容易控制和管理。计划时期:问题定义、可行性分析。开发时期:需求分析、软件设计、编码、测试。运行时期:软件维护。6.瀑布模型瀑布模型的含义,主要缺陷及造成缺陷的原因。在项目的早期,用户常常很难清楚地给出所有需求,瀑布模型却要求如此。由于瀑布模型的特点,早期的错误直到开发晚期才能被发现,开发的风险较大。7.原型化方法原型化方法解决的问题、主要优缺点。建立原型的主要原因是为了解决在产品开发的早期阶段需求不确定的问题,用户、经理和其他非技术项目风险承担者发现在确定和开发产品时,原型可以使他们的想象更具体化。原型在软件开发过程中可以起到以下主要作用:(1)明确并完善需求原型作为一种需求工具,它初步实现所理解的系统的一部分。用户对原型的评价可以指出需求中的许多问题,在你开发真正产品之前,可以最低的费用来解决这些问题。(2)探索选择设计方案原型作为一种设计工具,用它可以探索不同的用户界面技术,使系统达到最佳的可用性,并且可以评价可能的技术方案。(3)发展为最终的产品原型作为一种构造工具,是产品最初子集的完整功能实现,通过一系列小规模的开发循环,你可以完成整个产品的开发。8.增量模型主要解决:客户对需求不清楚,一些需求之间存在依赖关系,如需求B依赖于需求A的实现才能更好地了解需求。9.面向对象开发模型对象,类,继承,消息第3章软件需求分析1.需求的任务步骤(1)需求获取(问题识别):采集、识别和提取用户的需求,对问题和需求形成文档化的描述,使各种人员达成一致的理解和认可。(2)需求分析:分析和综合所采集的信息,建立系统的详细逻辑模型。(3)需求规格说明:编写软件需求规格说明书,明确、完整和准确地描述已确定的需求。(4)需求验证:评审软件需求规格说明,以保证其正确性、一致性、完备性、准确性和清晰性。(5)需求管理:定义需求基线,在整个项目过程中跟踪需求状态及其变更情况。2.用例建模用例模型:3.静态建模:对象关系图对象之间的几种关系:关联、聚合、泛化、实现、依赖4.动态建模:对象行为图状态图、协作图、顺序图、活动图第5-6章设计概述1.软件设计的目标和任务根据用信息域表示的软件需求,以及功能和性能需求,进行数据设计将实体–关系图中描述的对象和关系,以及数据词典中描述的详细数据内容转化为数据结构的定义。系统结构设计体系结构设计定义软件系统各主要部件之间的关系。过程设计过程设计则是把体系结构中部件转换成软件组件的过程性描述。接口(界面)设计接口设计根据数据流图定义软件内部各部件之间、软件与其它协同系统之间及软件与用户之间的交互机制。2.从工程管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为软件的系统结构设计和接口设计。详细设计,即过程设计。通过对结构表示进行细化,得到软件组件的详细的数据结构和和操作。3.软件设计的基本概念模块(module)与构件(component)classDiagram3.45PersonStundentTeacherPhoneMicrophoneTelephoneSet模块:定义输入、输出和特性的程序实体构件:可重复使用的软件组件抽象(abstract)与细化(refinement)抽象:分层次考虑和处理问题(数据和过程)细化:从高到低的逐步分解过程信息隐藏对其它模块隐藏模块内部的数据和过程软件复用4.软件的模块化软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。5.抽象与细化抽象软件系统进行模块设计时,可有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。在较低的抽象层次上,则采用过程化的方法。自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。细化与抽象相反又互补,实质为分解6.什么是封装?=信息隐藏“informationhiding”特征的物理本地化为单一的黑盒子抽象,在公共接口下隐藏了他们的执行将外部的规范说明与内部的实现相分离的一种思想客户对象依靠接口交互对其它模块隐藏模块内部的数据和过程7.模块独立性(moduleindependence)耦合是模块之间的互相连接的紧密程度的度量。内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。第9章面向对象方法学引论1.类的概念系统设计:系统整体结构的设计对象设计:对OOA模型中类/对象模型的具体化和细化消息设计:从对象-关系模型,设计出消息模型设计模型复审2.对象之间的几种关系:关联、聚合、泛化、实现、依赖第10章面向对象分析用例模型,参见第3章第11章面向对象的设计1.架构设计C/S架构,2层、3层、n层2.用户界面设计3.程序设计4.数据存储设计第12章面向对象实现(重点是软件测试)1.软件测试的目标基于不同的立场,存在着两种完全不同的测试目的。从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。2.软件测试目的(1)测试是程序的执行过程,目的在于发现错误;(2)一个好的测试用例在于能发现至今未发现的错误;(3)一个成功的测试是发现了至今未发现的错误的测试。3.软件测试的原则1.应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。2.测试用例应由测试输入数据和对应的预期输出结果这两部分组成。3.程序员应避免检查自己的程序。4.在设计测试用例时,应包括合理的输入条件和不合理的输入条件。4.测试的种类黑盒测试:测试程序功能白盒测试:测试程序结构5.黑盒测试这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。6.黑盒测试的等价分类法(equivalencepartitioning)把输入数据的可能值划分为若干等价类有效等价类和无效等价类每一无效等价类至少需要一个测试用例7.等价类划分等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。划分等价类等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。等价类的划分有两种不同的情况:①有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。②无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。8.黑盒测试--边界值分析法边界值分析法(boundaryvalueanalysis)是使被测程序在边界值及其附近运行,从而更有效地暴露程序中潜藏的错误边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。我们应注意到这三个数值应当满足A>0、B>0、C>0、A+B>C、A+C>B、B+C>A,才能构成三角形。但如果把六个不等式中的任何一个大于号“>”错写成大于等于号“≥”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。9.白盒测试此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进