1、软件危机是指在计算机开发过程中的开发和维护过程中所遇到的一系列的严重问题。2、软件是程序、数据及相关文档的完整集合,程序是能够完成预定功能和性能的可执行的程序序列;数据是是使程序能够适当的处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。3、软件工程学包含3个要素:方法、工具、过程。4、目前使用最广泛的软件工程方法学是传统方法学和面向对象方法学。5、软件工程方法学的软件过程基本上可以用瀑布模型来描述。6、瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型。7、Rup把软件生命周期划为:初始、精化、构建、移交阶段。8、可行性研究的三方面:技术可行性、经济可行性、操作可行性。9、数据流图(DFD)是一种图形化技术,他描绘信息流和数据从输入移动到输出的过程中所经受的变化。10、数据字典是关于数据信息的集合,也就是对数据流程图中所包含的所有元素的定义的集合。11、数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据如就不严格,没有流程图,数据字典也难以发挥作用。12、需求分析阶段结束之前,系统分析员应该写出软件需求规格说明书,以书面形式准确的描述软件需求。13、9、结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法。14、ER图中包含了实体、关系和属性,矩形代表实体,菱形表示关系,椭圆或圆角矩形表示属性,用直线把实体和其属性连接。15、验证软件需求的正确性:一致性、完整性、现实性、有效性。16、总体设计的基本目的是回答“概括地说,系统应该如何实现?”,总体设计又称为概要设或初步设计。17、模块的独立程度可以有两个定性标量度量:内聚和耦合。18、软件测试的目标:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现可至今为止尚未发现的错误的测试。19、软件测试步骤:模块测试、子系统测试、系统测试、验收测试、平行运行。20、软件可靠性是程序在给定的时间点,按照规格说明书的规定,成功的运行的概率。21、用面向对象方法开发软件,通常需要建立3种形式的模型:描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。22、用面向对象方法开发软件,在任何情况下,对象模型始终都是最重要、最基本的、最核心的。23、通常,使用UML提供的类图来建立对象模型。24、类与类之间通常有关联、泛化(继承)、依赖和细化等4种关系。25、在UML中,在一段为空心的三角形的连线表示泛化关系。26、复杂问题的对象模型通常由:主题层、类与对象层、结构层、属性层和服务层。27、广义的说,软件重用可分为知识重用、方法和标准的重用、软件成分的重用。28、工程网络和Gantt图同样是安排进度和管理工程进度情况的强有力的工具。29、3种典型人员组织方式:民主制程序员组、住程序员组、现代程序员组。30、软件过程的输出信息可以分为3类计算机程序、描述计算机程序的文档、数据,这些项组成了软件过程中产生的全部信息,人们把他们统称为软件配置,而这些项就是软件配置项。31、Cmm把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成五个逐层提高的等级。能力的成熟度的5个等级从低到高依次是:初始级(1级)、可重复级(2级)、已定义级(3级)已管理级(4级)和优化级(5级)。15、编码风格:持续内部文档、数据说明、语句构造、输入输出、效率、32、软件危机的典型表现:对软件开发成本和进度的估计常常很不准确;用户对“已完成”的软件系统不满意的现象经常发生;软件产品质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机总成本中所占的比例逐年上升;软件开发生产效率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。33、软件不同于硬件,他是计算机系统的逻辑部件而不是物理部件。34、软件不同于一般程序,它的一个显著特点就是规模庞大。简单题1、软件工程基本原理(1)用分阶段的生存周期严格管理。(2)坚持进行阶段评审。(3)实行严格的产品控制。(4)采用现代程序设计技术。(5)结果应能清楚地审查。(6)开发小组人员应该少而精。(7)承认不断改进软件工程实践的必要性。2、软件生命周期各阶段的基本任务软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。(1)问题定义(2)可行性研究(3)需求分析(4)总体设计(5)详细设计(6)编码和单元测试(7)综合测试(8)软件维护3、需求分析的任务一、确定对系统的综合要求(1)功能需求(2)性能需求(3)可靠性和可用性需求(4)出错处理需求(5)接口需求(6)约束(7)逆向需求(8)将来可能提出的需求二、分析系统的数据要求三、导出系统的逻辑模型四、修正系统开发计划4、改进软件设计的启发式规则(1)改进软件结构提高模块独立性(2)模块规模应该适中(3)深度、宽度、扇出和扇入都应适当(4)模块的作用域应该在控制域之(5)力争降低模块接口的复杂程度(6)设计单入口单出口的模块(7)模块功能应该可以预测5、面向对象设计准则和启发式原则(1)模块化(2)抽象(3)信息隐藏(4)弱耦合(5)强内聚(6)可重用(1)设计结果应该清晰易懂(2)一般-特殊结构的深度应适当(3)设计简单的类(4)使用简单的协议(5)使用简单的服务(6)把设计变动减至最小6、软件维护的几种类型(1)改正性维护(2)适应性维护(3)完善性维护(4)预防性维护7、决定软件可维护性因素(1)可理解性(2)可测试性(3)可修改性(4)可移植性(5)可重用性8、软件配置项软件配置的主要任务就是控制变化,同时也负责各个软件配置项和软件各种版本的标志、软件配置审计以及软件配置发生的任何变化的报告。(1)标识软件配置中的对象(2)版本控制(3)变化控制(4)配置审计(5)状态报告设计题1、等价类有效/无效数据边界值测试2、UML类图的描述3、N-S图、PAD图论述题(1)软件工程(2)可行性研究问题定义阶段必须回答的关键问题是:“要解决的问题是什么”。如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会自白浪费时间和金钱,最终得出的结果很可能是毫无意义的。尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。(3)需求分析这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。(4)总体设计这个阶段的基本任务是,概括地回答“怎样实现目标系统?”这个问题。概要设计又称为初步设计、逻辑设计、高层设计或总体设计。(5)详细设计这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。(6)编码实现(语言,测试)这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。(7)维护维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。(8)面向对象技术(9)项目管理1.软件工程学:为了更有效地开发与维护软件,软件工作者早20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科。2.软件危机典型变现:(1).对软件发开成本和进度的估计常常不准确.(2).用户对已完成的软件系统不满意的现象经常发生.(3).软件产品的质量往往靠不住.(4).软件常常是不可维护的.(5).软件通常没有适当的文档资料.(6).软件成本在计算机系统总成本中所占的比例逐年上升.(7).软件开发产生率提高的速度,远远跟不上计算机应用迅速普及深入的趋势.3.产生软件危机的原因:(1).软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件.(2).软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升.(3).软件本身独有的特点确实给开发和维护带来一些客观困难.(4)与软件开发和维护有关的许多错误认识和做法形成,可以归因于在计算机系统发展的早期阶段软件开发的个体特点.4.消除软件危机的途径:(1).应该对计算机软件有一个正确的认识.(2).充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是组织良好、管理严密、各类人员协同配合、共同完成的工程项目.(3).在使用要总结出成功的技术和方法,尽快消除错误概念和做法.(4).开发和使用更好的软件工具5.软件工程的本质特性:(1).软件工程关注于大型程序的构造.(2).软件工程的中心课题是控制复杂性.(3).软件经常变化.(4).开发软件的效率非常重要.(5).和谐地合作是开发软件的关键.(6).软件必须有效地支持它的用户.(7).在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品.6.软件工程的原理:(1).用分段的生命周期计划严格管理.(2).坚持进行阶段评审.(3).实行严格的产品控制.(4).采用现代程序设计技术.(5).结果应能清楚地审查.(6).开发小组的人员应该少而精.(7).承认不断改进软件工程实践的必要性.7.软件生命周期:由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段.8.软件开发时期4个阶段:总体设计,详细设计,编码和单元测试,综合测试.9.软件维护,维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要.10.瀑布模型的特点:(1).阶段间具有顺序性和依赖性.(2).推迟实现的观点.(3).质量保证的观点.11.快速原型模型:是快速建立起来的可以在计算机运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集.12.快速模型的主要优点是不带馈环的,软件产品基本上是线性顺序进行的.13.可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决.14.可行性的解法:(1)技术可行性.(2)经济可行性.(3)操作可行性.15.可行性研究过程步骤:(1).复查系统规模和目标.(2).研究目前正在使用的系统.(3).导出新系统的高层逻辑模型.(4).进一步定义问题.(5).导出和评价供选择的解法.(6).推荐行动方针.(7).草拟开发计划.(8).书写文档提交审查.16.系统流程图:是概括地描绘物理系统的传统工具.它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件.17.数据流图(DFD):是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换.18.数据字典:是关于数据的信息的集合,就是对数据流图中包括的所有元素的定义的集合.19.数据字典组成元素:(1)数据流.(2)数据流分量.(3)数据存储.(4)处理.20.定义数据的方法:定义绝大多数复杂事物的方法,都是用被定义的事物的成分的某种组合表示这个事物,这些组成成分又由更底层的成分的组合来定义.21.数据字典最重要用途:作为分析阶段的工具。22.为什么要进行需求分析:因为它的基本任务是准确地回答“系统必须做什么?”这个问题。可行性研究阶段只是粗略了解用户的需求,许多细节被忽略,然而最终的系统中却不能遗漏任何细节。所以可行性研究并不能代替需求分析。23.软件系统综合要求:(1)功能需求.(2)性能需求.(3)可靠性和可行性需求.(4)出错处理需求.(5)接口需求.(6)约束.(7)逆向需求.(8)将来可能提出的要求.24.访谈:是最早开始使用的获取用户需求的技术,是迄今为止仍然广泛使用的需求分析技术.25.需求分析过程3种模型:数据模型、功能模型和行为模型.26.数据模型包含3种相互关联信息:数据对象、数据对象的属性及数据对象彼此间相互连接的关系.27.总体设计的目的:就是回答概括地说,系统应该如何实现?这个问题.28.总体设计两个过程:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构.29.总体设计过程步骤:(1)设想供选择的方案.(2)选取合理的方案.(3)推荐最佳方案.(4)功能分解.(5)设计软件结构.