1、软件工程复习重点温馨提示:紫魏嫒你的个人盘点,有任何遗漏记得通知一下哦,亲 题型:一、名词解释 5个 15分二、简答题 6个 50分三、综合设计与计算 21分四、软件架构 14分第一章1、 软件危机定义:软件危机(Software Crisis)是指软件在开发和维护过程中所遇到的一系列严重问题。2、 产生软件危机的原因:既与软件本身的特点有关,也和软件开发和维护的方法不正确有关。l 软件是逻辑产品而不是物理产品,进度和质量难于评价,开发过程难于管理和控制;l 软件规模庞大,程序的复杂性随程序规模的增长而呈指数增长;l 开发过程中或多或少地采用了错误的技术和方法(如忽视需求分析、认为开发软件就是
2、写程序、轻视软件维护等)。3、软件的生命周期:软件从定义、开发、使用和维护,直到最终被废弃这个漫长的时期称为软件的生命周期。4、消除软件危机的途径:l 对软件的定义有一个正确的认识。l 必须认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、协同配合、共同完成的工程项目。必须吸收和借鉴人类长期从事工程项目所积累起来的原理、概念、技术和方法以及计算机硬件研究和开发的经验和教训;l 推广使用在实践中总结出来的成功的技术和方法,消除错误的概念和做法,使用和开发更好的软件工具,形成更好的软件工程支撑环境. 总之,需要通过一定的技术措施(技术和方法)和管理措施来消除软件危机。5、
3、软件工程:软件工程是:把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,即把工程化应用于软件中;研究中提到的途径。6、 软件工程的本质特性:l 软件工程关注于大型程序的构造;l 软件工程的中心课题是控制复杂性;l 软件经常变化;l 开发软件的效率非常重要;l 和谐地合作是开发软件的关键;l 软件必须有效地支持它的用户;l 软件工程领域是由具有一种文化背景的人替具有另一种文化背景的人创造产品(跨文化)。7、软件工程的基本原理:l 用分阶段的生命周期计划严格管理l 坚持进行阶段评审l 实行严格的产品控制l 采用现代程序设计技术l 结果应能清楚地审查l 开发小组人员应该少而精l 承认
4、不断改进软件工程实践的必要性8、 软件工程方法学:通常把软件生命周期过程中使用的一整套技术的集合称为软件工程方法学(Methodology),也称为范型(Paradigm),它包括方法(如何做)、工具(支撑平台)和过程(工作步骤)。(对于软件生命周期,计算机的说可能出在最后一题)9、 软件生命周期:软件的生命周期由软件定义、软件开发、软件维护(运行维护)三个时期组成,每一个时期又进一步划分为若干个阶段。10、软件生命周期每个阶段的基本任务:l 问题定义阶段(要解决的问题是什么)l 可行性分析阶段(上一阶段所确定的问题是否有行得通的解决办法)必要性、可能性l 需求分析(确定系统必须完成那些工作)
5、做什么l 总体设计(怎样实现目标系统)怎样做l 详细设计(应该怎样具体的实现这个系统)l 编码和单元测试(写出正确的容易理解、容易维护的程序模块)l 综合测试(通过各种类型的测试(及相应的调试)使软件达到预定的要求)l 软件维护(通过各种必要的维护活动使系统持久的满足用户的需要)11、 软件过程定义:软件过程(Software Engineering Process)是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。12、 软件过程:l 瀑布模型(重点)l 快速原型模型(重点)l 增量模型(重点)l 螺旋模型l 喷泉模型l Rational统一过程l 敏捷过程与
6、极限编程l 微软过程13、极限编程(XP):(1)极限编程的有效实践:l 客户作为开发团队的成员l 使用用户的素材l 短交付周期l 验收测试l 结对编程l 测试驱动开发l 集体所有l 持续集成l 可持续的开发速度l 开放的工作空间l 及时调整计划l 简单的设计l 重构l 使用隐患(2) 极限编程的整体开发过程l 项目组针对客户代表提出的“用户故事”(用户故事类似于用例,但比用例更简单,通常仅描述功能需求)进行讨论,提出隐喻,在此项活动中可能需要对体系结构进行“试探”(所谓试探就是提出相关难点的试探性解决方案)l 项目组在隐喻和用户故事的基础上,根据客户制定的优先级制定交付计划(为了制订出切实可
7、行的交付计划,可能需要对某些技术难点进行试探)l 开始多次迭代过程(通常每个迭代历时1-3周),在迭代期内产生的新用户故事不在本次迭代内解决,以保证本次开发过程不受干扰l 开发后的新版本软件通过验收测试之后交付用户使用思考题:(这些是计算机老师布置的作业题,最好是看一下)1-1什么是软件危机?它有哪些典型表现?为什么会出现软件危机?1-2什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?1-3什么是软件过程?它与软件工程方法学有何关系?1-4 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。第二章1、可行性分析:l 技术可行
8、性:使用现有技术能实现这个系统吗?l 经济可行性:这个系统的经济效益能超过它的开发成本吗?l 操作可行性:系统的操作方式用户能否接受。必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。2、数据流图:数据流图(Data Flow Diagram,DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经历的变换.DFD也称为泡泡图(Bubble Chart).(重点是会画图,看懂书上订货系统,图2.5、2.6、2.7)3、 数据字典:(老师课件的)数据字典(Data Dictionary)是对与系统有关的所有数据元素给出一个有组织的列表和精确的、严格的定义,使用户和软
9、件设计师双方对输入、输出、存储成分和中间计算结果有共同的理解。这是一种半形式化的工具。(书上的)数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。第三章1、需求分析的任务:(1)确定对系统的综合要求l 功能需求:指定系统必须提供的服务,划分出系统必须完成的所有功能。l 性能需求:指定系统必须满足的定时约束或容量约束,如速度(响应时间)、信息量速率、主存容量、磁盘容量、安全性等方面的需求。l 可靠性和可用性需求:可靠性需求定量地指定系统的可靠性;可用性与可靠性密切相关,它量化了用户可以使用系统的程度。l 出错处理需求:说明系统对环境错误应该怎样响应。l 接口需求:描述
10、应用系统与环境通信的格式.如:用户接口需求;硬件接口需求;软件接口需求;通信接口需求。l 约束:设计或实现系统时应遵守的限制条件。如:精度;工具和语言约束;设计约束;标准;硬件平台。l 逆向需求:说明软件系统不应该做什么。理论上有无限多个逆向需求。l 将来可能提出的要求:虽然不属于当前系统开发范畴,但将来很可能会提出的要求。以便在设计过程中对将来可能的扩充和修改预做准备。(2) 分析系统的数据要求(3) 导出系统的逻辑模型(4) 修正系统开发计划2、与用户沟通获取需求的方法:l 访谈l 面对数据流自顶向下求精l 简易的应用规格说明技术l 快速建立软件原型3、实体-联系图:会画图思考题:3-1
11、为什么要进行需求分析?通常对软件系统有哪些需求?3-2 怎样与用户有效地沟通以获取用户的真实需求?3-3 计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或 号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。 请用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。3-4 分析习题2第3题所述的机票预订系统。请用实体-联系图描绘本系统中的数据对象并用数据流图
12、描绘本系统的功能。第五章1、 总体设计:2个阶段l 系统设计阶段,确定系统的具体实现方案l 结构设计阶段,确定系统的软件结构9个步骤l 设想供选择的方案l 选取合理的方案l 推荐最佳方案l 功能分解l 设计软件结构l 设计数据库l 制定测试计划l 书写文档l 审查和复审(技术审查和管理复审)2、 设计原理(概念和原理):(1) 模块化:模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来形成一个整体,可以完成指定的工程满足用户的需求。(2) 抽象(3) 逐步求精(4) 信息隐藏和局部化(5) 模块独立l 耦合:耦合是对一个软件结构内不同模块之间互连程序的
13、度量。软件设计尽可能追求松散耦合的系统。耦合分为:数据耦合;控制耦合;公共环境耦合;内容耦合。设计原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合.l 内聚:内聚(Cohesion)是一个模块内部各个元素之间彼此结合的紧密程度,它是信息隐藏和局部化概念的自然拓展。内聚的种类:a.低内聚:偶然内聚、逻辑内聚和时间内聚;b.中内聚:过程内聚和通信内聚;c.高内聚:顺序内聚和功能内聚。设计原则:力争做到高内聚。3、 启发式规则:l 改进软件结构提高模块独立性l 模块规模应该适中l 深度、宽度、扇出和扇入都应适当l 模块的作用域应该在控制域之内l 力争降低模块接口的复杂程度l
14、设计单入口单出口的模块l 模块功能应该可以预测4、 面向数据流的设计方法(计算机老师划了这里为重点,老冯说是教学重点,但内容太多,不可能在 上浓缩出题。所以自己看着办吧,建议最好是弄懂了。)(1)概念l 变换流l 事务流l 设计过程(2) 变换分析l 例子l 设计步骤1) 复查基本系统模型2) 复查并精化数据流图3) 确定数据流图具有变换特性还是事务特性4) 确定输入流和输出流的边界,从而孤立出变换中心5) 完成“第一级分解”6) 完成“第二级分解”7) 对软件结构进一步精化。第六章1、过程设计工具:l 程序流程图l 盒图l PAD图(会画图)PAD图的特点(老冯精化后的优点): a.结构十分
15、清晰; b.容易将PAD图转换成高级语言源程序; c.可以自顶向下,逐步求精。l 判定表l 判断树l 过程设计语言(PDL)2、 McCabe方法(1) 流图 (2) 计算环形复杂度的方法(考计算题):l 流图中的区域数等于环形复杂度;l 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数;l 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。思考题:书上P142 6-3、6-8第七章1、软件测试的目标:l 测试是为了发现程序中的错误而执行程序的过程;l 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;l 成功的测试是发现了至今为止尚未发现
16、的错误的测试。2、 软件测试准则:l 所有测试都应该能追溯到用户需求;l 应该远在测试开始之前就制定出测试计划;l 把Pareto原理用于软件测试(错误二八律);l 应该从“小规模”测试开始,并逐步进行大规模测试l 穷尽测试是不可能的;l 为达到最佳效果,应由独立的第三方来构造测试。3、 测试方法:l 黑盒测试:又称功能测试它把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,只检查程序功能是否能按说明书的规定正常使用,程序能否适当的接收输入数据,产生正确的输出信息,并且保持外部信息的完整性。l 白盒测试:又称结构测试它把程序看成装在一个透明的白盒子中,完全了解程序结构和处理过程,按照程
17、序内部的逻辑测试程序,检查程序中的每条通路是否能按照预定的要求正确工作。4、 确认测试:确认测试也称为验收测试,目的是验证软件的有效性。l Alpha测试:由用户在开发者的场所进行,并且在开发者对用户的“指导”下(受控环境下)进行测试。l Beta测试:由软件的最终用户们在一个或多的客户场所进行的测试,是非受控环境下“真实”进行的。5、 白盒测试技术6、 黑盒测试技术7、 调试:调试(纠错)作为成功测试的后果出现,也就是说,调试使在测试发现错误之后排除错误的过程。8、 软件可靠性:l 软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。l 软件可用性是程序在给定的时间点,
18、按照规格说明书的规定成功地运行的概率。第八章1、 软件维护:软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。2、 软件的可维护性:软件可维护性是维护人员理解、改正、改动或改进这个软件的难易程度。3、 决定软件可维护性的因素:l 可理解性l 可测试性l 可修改性l 可移植性l 可重用性4、 软件再工程过程:l 库存目录分析l 文档重构l 逆向工程l 代码重构l 数据重构l 正向工程第九章1、 对象模型:对象模型表示静态的、结构化的系统的“数据”性质,是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构,为建立动态模型和功能模型提供了框架.2、动态模型:动态模型表示瞬时的、行为化的系统的“控制”性质,规定了对象模型中的对象的合法变化序列。动态模型规定了对象模型中对象的合法变化序列,是瞬时的、行为化的性质的表示。一般用状态图来描绘对象的状态、触发状态转换的事件以及对象的行为.3、功能模型:功能模型表示变化的系统的“功能”性质,指明了系统应该做什么,直接反映了用户对目标系统的需求。功能模型由一组数据流图组成。