软件工程知识点整理.doc
软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题。包含下述两方面的问题:1.如何开发软件,以满足对软件日益增长的需求;2.如何维护数量不断膨胀的已有软件。软件工程:指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济的开发出高质量的软件并有效的维护它。 软件生命周期:由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。P11软件定义时期:a.问题定义 b.可行性研究 c.需求分析;软件开发时期:a.总体设计 b.详细设计 c.编码和单元测试 d.综合测试;运行维护时期;可行性研究:确定问题是否值得去解决。通过分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后能带来的效益是否大到值得投资开发这个系统的程度。可行性研究实质上是要进行一次大大压缩建华了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。P35性能需求:系统必须满足的定时约束或容量约束,通常包括速度、信息量速率、主存容量、磁盘容量、安全性等方面的需求。P56耦合:对一个软件结构内不同模块之间互连程度的度量。P97数据耦合:两个模块彼此之间通过参数交换信息,且交换的信息仅仅是数据。详细设计:确定应该怎样具体地实现所要求的系统。通过一个阶段的设计工作,得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。P117等价类划分:一种黑盒测试技术,通过把程序的输入域划分成若干个数据类,据此导出测试用例。P172多态性:有许多形态。在类等级的不同层级中可以共享一个行为的名字,然而不同层次中的每个类却各自按自己的需求来实现这个行为。 P214继承:能够直接获得已有的性质特征,而不必重复定义他们。回归测试:重新执行已经做过的测试的某个子集,以保证程序的变化没有带来非预期的副作用。P160渐增型测试:把下一个要测试的模块同已经测试好的模块结合起来进行测试的每次增加一个模块的方法P157增量模型:也称为渐增模型。把软件产品作为一系列的增量构建来设计、编码、集成和测试,分批的逐步向用户提交产品。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。P17内聚:一个模块内各个元素彼此结合的紧密程度,是信息隐藏和局部化的自然扩展。P98功能内聚:模块内所有处理元素属于一个整体,完成一个单一的功能。白盒测试法:根据程序的控制结构设计测试数据。黑盒测试法:着重测试软件功能,是与白盒测试互补的测试方法,很可能发现白盒测试不容易发现的其他类型的错误。P171可移植性:把程序从一种计算环境转移到另一种计算环境的难易程度。 软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功运行的概率。信息隐藏:一个模块内包含的信息(模块的实现细节)对于不需要这些信息的模块来说是不能访问的。P96完善性维护:为了满足在使用软件的过程中用户提出的增加新功能、修改已有功能或一般性的改进意见进行的维护,通常占软件维护工作的大部分。调试:在测试发现错误之后排除错误的过程。P176模块独立性:模块具有独立功能且和其他模块之间没有过多的相互作用。模块化:把程序划分成独立命名且可以独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。抽象:抽出事物的本质特性而暂时不考虑它们的细节。共享聚集:在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成。组合聚集:部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失。1. 软件工程有哪些本质特征?1) 软件工程关注于大型程序的构造2) 软件工程的中心课题是控制复杂性3) 软件经常化4) 开发软件的效率非常重要5) 和谐地合作是开发软件的关键6) 软件必须有效地支持它的用户7) 在软件工程领域中是由一种文化背景的人替具有另一种文化背景的人创造产品2. 软件生命周期包括哪些阶段?每个阶段又包含什么小阶段?由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。1) 软件定义时期:a.问题定义 b.可行性研究 c.需求分析2) 软件开发时期:a.总体设计 b.详细设计 c.编码和单元测试 d.综合测试3) 运行维护时期3. 软件过程中瀑布模型的优缺点优点:可强迫开发人员采用规范的方法;严格规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。 缺点:几乎完全依赖书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。4. 可行性研究的任务是什么?一般可以从哪些方面研究可行性?1) 可行性研究实质上是要进行一次大大压缩建华了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。可行性研究最根本的任务是对以后的行动方针提出建议。2) 技术、经济、操作、法律、社会效益等5. 可行性研究有哪些步骤?1) 复查系统规模和目标 2) 研究目前正在使用的系统 3) 导出新系统的高层逻辑模型 4) 进一步定义问题 5) 导出和评价供选择的解法 6) 推荐行动方针7) 草拟开发计划8) 书写文档提交审查6. 需求分析阶段的基本任务是什么?需求分析阶段的基本任务是要准确地定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作:问题识别;分析与综合,导出软件的逻辑模型;编写文档。7. 对软件系统通常有哪些需求?功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的需求8. 与用户沟通获取需求的方法有哪些?访谈、面向数据流自顶向下求精、简易的应用规格说明技术、快速建立软件原型9. 典型的总体设计的过程包括哪些步骤?设想供选择的方案 2.选取合理的方案 3.推荐最佳方案 4.功能分解 5.设计软件结构 6.设计数据库 7.制定测试计划 8.书写文档 9.审查和复审10. 模块的内聚性、耦合性包括哪些类型,给出名称和简单定义?1) 内聚偶然内聚:一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类时间内聚:一个模块包含的任务必须在同一段时间内执行过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行通信内聚:模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行功能内聚:模块内所有处理元素属于一个整体,完成一个单一的功能。2) 耦合数据耦合:两个模块彼此之间通过参数交换信息,且交换的信息仅仅是数据控制耦合:两个模块之间传递的信息中有控制信息特征耦合:把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素公共环境耦合:两个或两个以上的模块通过一个公共数据环境相互作用内容耦合:当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时的耦合11. 在软件总体设计时,可借鉴的启发式规则有哪些?1) 改进软件结构提高模块独立性2) 模块规模应该适中3) 深度,宽度,扇出和扇入都应该适当4) 模块的作用域应该在控制域之内5) 力争降低模块接口的复杂程度6) 设计单入口单出口的模块7) 模块功能应该可以预测12. 详细设计的任务是什么?详细设计阶段过程设计的工具有哪些?1) 确定应该怎样具体地实现所要求的系统。通过一个阶段的设计工作,得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。2) 程序流程图、盒图、PAD图、判定表、判定树、过程设计语言13. 请描述Jackson结构程序设计方法的步骤?1) 分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构。2) 找出输入数据结构和输出数据结构中有对应关系的数据单元。3) 从描绘数据结构的Jackson图导出描绘程序结构的Jackson图。4) 列出所有操作和条件,并且把它们分配到程序结构图的适当位置。5) 用伪码表示程序。14. 简述软件测试的准则是什么?大型软件系统测试步骤?1) 软件测试的准则:a) 所有的测试都应追溯到用户需求b) 应该远在测试开始之前就制定出测试计划c) 把Pareto原理应用到软件测试中d) 应该从“小规模”测试开始,并逐步进行“大规模”测试e) 穷举测试是不可能的f) 为了达到最佳的测试效果,应该由独立的第三方从事测试工作2) 大型软件系统测试步骤:a) 模块测试b)子系统测试 c)系统测试d)验收测试e)平行运行15. 单元测试的测试重点是什么?1)模块接口2)局部数据结构 3)重要的执行通路4)出错处理通路5)边界条件16. 黑盒测试主要是为了发现哪几类错误?1)功能不正确或遗漏;2)界面错误;3)数据结构错误或外部数据库访问错误;4)性能错误;5)初始化和终止错误17. 调试的目的是什么?调试有哪些途径?1) 目的:在测试发现错误之后排除错误2) 途径:蛮干法、回溯法、原因排除法(对分查找法、归纳法、演绎法)18. 常见的维护类型和定义1) 改正性维护:诊断和改正错误2) 适应性维护:为了和变化的环境适当地匹配而修改软件3) 完善性维护:为了满足在使用软件的过程中用户提出的增加新功能、修改已有功能或一般性的改进意见进行的维护,通常占软件维护工作的大部分4) 预防性维护:为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件19. 决定软件可维护性的主要因素有哪些,请详细描述;如果已有维护记录,从哪些方面评价度量维护活动?1) 决定软件可维护性的主要因素:a) 可理解性:外来读者理解软件的结构、功能、接口和内部处理过程的难易程度b) 可测试性:诊断和测试的容易程度c) 可修改性:软件容易修改的程度d) 可移植性:把程序从一种计算环境转移到另一种计算环境的难易程度e) 可重用性:同一事物不做修改或稍加改动就在不同环境中多次重复使用2) 评价度量维护活动:每次程序运行平均失效的次数;用于每一类维护活动的总人时数 ;平均每个程序、每种语言、每种维护类类所做的程序 变动类;维护过程中增加工删除一个源语句平均花费的人时数 ;维护每种语言平均花费的人时数; 一张维护要求表的平均周转时间;不同维护类型所占的百分比。20. 简述建立对象模型的过程(1)确定类:标出来自问题域的相关对象类。 (2)准备数据字典:为所有建模实体准备一个数据字典,准确描述各对象类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制; (3)确定关联:确定二个或多个类之间的相互依赖; (4)确定属性:只考虑与具体应用直接相关的属性 ;(5)使用继承来细化类:使用继承来共享公共结构,以此来重新组织类21. 面向对象设计的准则a) 模块化。对象就是模块,它是把数据结构和操作这些数据的方法紧密结合在一起所构成的模块。b) 抽象。类实际是一种抽象数据类型,它对外开放的公共接口构成类的规格说明(即协议)。c) 信息隐藏。它是通过对象的封装性实现,类结构分离了接口与实现,从而支持了信息隐藏。d) 弱耦合。降低对象之间的交互耦合,提高继承耦合。e) 强内聚。多利用服务内聚、类内聚和一般特殊内聚。f) 可重用。有两个含义,一是尽量使用已有的类,二是在创建新类时,应该考虑将来的可重复使用性。22. 简述对象模型、动态模型、功能模型之间的关系(1) 针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。 (2) 状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。 (3) 功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。 (4) 数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。 (5) 数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。 (6) 用例图中的行为者,可能是对象模型中的对象。 (7) 功能模型中的处理(或用例)可能产生动态模型中的事件。 (8) 对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。