第一章软件工程学概述什么叫软件危机?软件危机的表现有哪些?产生软件危机的原因是什么?答:1.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。2.a.对软件开发成本和进度的估算很不准确。b.用户对“已完成的”软件系统不满意的现象经常发生。c.软件产品的质量往往靠不住。d.软件常常是不可维护的。e.软件通常没有适当的文档资料。f.软件成本在计算机系统总成本中所占的比例逐年上升。g.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。3.客观:软件本身特点逻辑部件:缺乏“可见性”;硬件常有通用部件规模庞大:管理和控制开发过程困难主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护什么是软件工程?它有哪些本质特性?怎么样用软件工程消除软件危机?答:1.用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。2.a.软件工程关注于大型程序的构造b.软件工程的中心课题是控制复杂性c.软件经常变化d.开发软件的效率非常重要e.和谐地合作是开发软件的关键f.软件必须有效地支持它的用户g.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品3.a.对软件有一个正确的认识:软件=程序+方法+规则+数据+文档软件开发应该组织良好、管理严密、协调配合推广使用成功的技术和方法应用开发和使用好的软件工具b.为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科什么是软件工程三要素?它们之间是什么关系?软件工程的基本原理是什么?答:1.工具,方法,过程2.方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是运用方法而提供的自动或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。3.(1)严格按照计划进行管理;(2)坚持进行阶段评审;(3)实行严格的产品控制;(4)采用现代化的程序设计技术;(5)结果要能清晰地审查;(6)开发小组成员的素质要好,数量却不易多;(7)要承认不断改善软件工程实践的必要性。说明软件生命周期的划分为几个阶段,每个阶段的基本任务?瀑布模型、原型模型、螺旋模型、增量模型优缺点以及适用范围?答:1.(1).问题定义:问题定义阶段必须回答的关键问题是:“要解决的问题是什么”(2).可行性研究:该阶段要回答的关键问题是:“上一个阶段所确定的问题是否有行得通的解决办法”。(3)需求分析:a.这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。b.这个阶段的另外一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明(specification)。(4)概要设计:a.这个阶段的基本任务是,概括地回答“怎样实现目标系统?”b.概要设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系(5)详细设计a.详细设计阶段的任务就是把解法具体化,也就是回答“应该怎样具体地实现这个系统”这个关键问题。b.这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明(6)编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。(7)综合测试a.这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。(8)软件维护a.维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要b.通常有四类维护活动:改正性维护、适应性维护、完善性维护、预防性维护2.(1)瀑布模型:优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。缺点:“瀑布模型是由文档驱动的”,缺乏灵活性:仅通过静态的规格说明很难全面正确地认识动态的软件产品。要求用户不经过实践就提出完整准确的需求是不切实际的。适用范围:由于瀑布模型完全依赖于书面的规格说明,很可能导致最终开发出的软件不能真正满足用户的需要。(2)原型模型:优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险;有助于获取用户需求,加强对需求的理解尽早发现软件中的错误支持需求的动态变化缺点:所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下;适用范围:适合于需求动态变化,事先难以确定系统(3)增量模型:优点:能在较短的时间内向用户提交可完成部分功能的产品逐步增加产品功能可以使用户有较充裕的时间学习和适应缺点:在把每个新的增量构件集成到现有的软件体系结构中时,必须不破坏原来已经开发的产品软件体系结构必须是开放的本身具有矛盾性*面要求开发人员把软件看作一个整体*另一方面要求开发人员把软件看作构件序列,构件间彼此独立(4)螺旋模型:优点:有助于获取用户需求,加强对需求的理解尽早发现软件中的错误支持需求的动态变化支持风险分析,可降低或者消除软件开发风险缺点:过多的迭代次数会增加开发成本,延迟提交时间只适合大型软件项目的开发,否则,每个阶段的风险分析将占用很大一部分资源,增加成本对开发人员的风险分析能力是极大的考验适用范围:适合于需求动态变化,事先难以确定并且开发风险较大的系统第2章可行性分析1.可行性分析的目的?.可行性研究的步骤有哪些?从哪些方面进行可行性研究?答:1.用最小的代价,在尽可能短的时间内确定问题是否能够解决2.(1)复查系统规模和目标(2)研究目前正在使用的系统(3)导出新系统的高层逻辑模型(4)进一步定义问题(5)5导出和评价供选择的解法(6)推荐行动方针(7)草拟开发计划(8)书写文档提交审查3.技术可行性:使用现有的技术能实现这个系统经济可行性:系统的经济效益能否超过开发成本操作可行性:系统的操作方式在这个用户组织内是否行得通常用的成本估算方法有哪些?答:代码行技术,任务分解技术,自动估计成本技术什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?画数据流图的原则有哪些?答:1.软件系统逻辑模型的一种图形。数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。数据流图有4种基本符号:正方形表示数据的源点或终点;圆角矩形代表变换数据的处理;开口矩形代表数据存储;箭头表示数据流。画数据流图的原则有:1确定系统的源点和终点2确定系统的输入和输出数据流的关系3保持分解前后输入/输出数据流必须相同(父子平衡)4尽量简化加工之间的联系5用“自顶向下”方法,逐层画出数据流图,每张数据流图中加工(处理)的个数不能超过9个(7加减2)6注意分解速度(一般每分解一层增加2-7个加工)7在画数据流图时应避免线条交叉,必要时可使用重复的外部项(源点或终点)或数据存储符号8适当的命名,加工处理要编号第3章什么是数据字典?其作用是什么?包含哪些元素?数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据字典的作用是在软件分析和设计的过称中给人提供关于数据的描述信息。数据字典应该由对下列4类元素的定义组成:(1)数据流(2)数据流分量(即数据元素)(3)数据存储(4)处理考察重点:系统流程图、数据流图、数据字典(应用题)第四章总体设计一.需求分析的定义、任务和目的是什么?定义:为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求,对需求的深入理解是软件开发获得成功的前提条件。任务:基本任务是准确回答“系统必须做什么”。需求分析任务综述:深入描述软件的功能和性能确定软件设计的约束确定软件同其它系统元素的接口细节定义软件的其它有效性需求目的:为了开发出真正满足用户需求的软件产品。基本任务是准确回答“系统必须做什么”。二..获取需求的常用方法1.访谈正式访谈系统分析员将提出一些事先准备好的具体问题非正式访谈系统分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法2.面向数据流自顶向下求精基本思想:“自顶向下,逐步求精”抽象和分解3.简易的应用规格说明技术4.快速建立软件原型三.需求分析的原则1.必须理解并描述问题的信息域2.必须定义软件应完成的功能3.必须描述作为外部事件结果的软件行为4.必须对描述信息、功能和行为的模型进行分解四.考察重点:状态转换图、ER图(应用题)第五章一:总体设计的目标是什么?遵循的基本原理有哪些?目的:概括的说总体设计的目的就是回答“系统该如何实现这个问题”通过这个这个阶段的工作将划分出组成系统的物理元素--程序、文件数据库、人工过程和文档等,但每个物理元素仍然处于黑盒级,这些黑盒子里的具体内容将在以后仔细设计。基本原理:1》抽象:抽出本质,忽略细节,分层理解2》模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。3》逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。4》信息隐蔽和局部化:信息隐蔽原理应该这样设计和确定模块,使得一个模块内包含的信息(过程或数据)对于不需要这些信息的模块来说,是不能访问的局部化是把一些关系密切的软件元素物理地放得彼此靠近。显然,局部化有助于实现信息隐藏5》模块独立性:模块独立是好设计的关键,而设计又是决定软件质量的关键环节模块化程度较高的软件容易编制独立的模块比较容易维护和测试2.什么是耦合?有哪几种耦合?什么是内聚?有哪几种内聚?如何增强模块的独立性?耦合:是对一个软件结构内不同模块之间互连程度的度量耦合强弱取决于模块间接口复杂程度,进入或访问一个模块的点,以及通过接口的数据模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性《耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统》耦合种类:公共耦合:几个模块共享一个数据区域特征耦合:把整个数据结构作为参数传递而被调用模块只使用其中一部分数据元素时就出现了特征耦合。控制耦合:一个模块通过传递控制信息来控制另一个模块标记耦合:模块间通过参数表传递记录信息,这个记录是某一数据结构的子结构,而不是简单变量数据耦合:只有数据在模块之间进行交换,只通过参数传递基本类型的数据非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的非直接耦合的模块独立性最强内聚:标志着一个模块内各个元素彼此结合的紧密程度内聚有七种,由弱到强分别为偶然内聚-逻辑内聚-时间内聚-过程内聚-通信内聚-顺序内聚-功能内聚增强模块独立性:提高模块的内聚程度,减少耦合3.衡量模块独立性的两个标准是什么?它们各表示什么含义?*高内聚,少耦合;*对于一个模块而言,模块自身的内聚越强,模块间的耦合就越小,模块所具有的独立性就越好。可以说高内聚低耦合是我们进行软件设计的一贯原则4.什么叫模块?什么叫模块化?模块设计时应注意哪些规则?模块:是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。规则:高内聚,少耦合4.影响耦合度的因素有哪些?.降低耦合度的方法有哪些?内容耦合公共耦合特征耦合控制耦合标记耦合数据耦合非直接耦合--内容方法:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合环境的范围,完全不用内容耦合。第六章详细设计1.详细设计的根本目标和任务?详细设计阶段的根部目标是确定应该怎样具体地实现所要求的系统。详细设计阶段的任务是要设计出程序的“蓝图”。2.层次图和