软件工程复习资料 第一章 1、软件的概念: 软件是计算机中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。 2、软件具有下列特点: 1.软件是一种逻辑产品,它具有抽象性和无形性。 2.软件的生产与硬件不同。 3.软件在运行和使用中,不会磨损和老化,但它存在退化问题。 4.软件的开发和运行对计算机系统有一定的依赖性。 5.软件开发至今仍未完全摆脱手工开发方式,大多数软件是“定做”的。 6.软件开发成本高、风险高。 7.相对于计算机硬件技术的发展,计算机软件技术的发展十分缓慢。 3、计算机软件技术的发展经历了三个阶段: 程序设计时期(20世纪40年代中期至60年代中期),软件质量取决于个人编程水平。 程序系统时期(20世纪60年代中期至70年代中期),软件质量取决于开发小组的技术水平 软件工程时期(20世纪70年代以后)。 软件质量取决于软件工程管理水平。 软件技术的发展主线是由个体简单的开发方式向着复杂、大规模、标准化、工程化的方向发展,在最高阶段,把软件开发界定为两方面的内容:软件开发和软件维护。 4、软件开发引发的问题 : 1.社会对软件需求的不断发展 2.软件开发理念和手段与客观实际存在的差异 ① 对软件本身的认识存在差异 ② 对软件的服务对象认识不足 ③ 对软件开发缺乏科学管理 ④ 软件开发手段落后 5、软件危机 (1)发生时间:软件发展第二阶段(程序系统阶段)的末期 (2)软件危机是指在计算机软件开发和维护过程中遇到的一系列严重问题。 问题主要体现在两方面:①如何开发软件满足用户的需求,②如何维护已有的软件 (3)软件危机的主要表现有以下几方面: 1.软件开发经费超支、进度拖延 2.软件不能符合用户的要求 3.软件难以维护 4.软件可靠性差 5.软件开发生产率低 (4)主要原因: 1 社会对软件的需求急剧增加 2 软件本身的特点:软件本身存在着复杂性 3软件开发理念和手段与客观实际存在的差异 ① 对软件本身的认识存在差异 ② 对软件的服务对象认识不足 ③ 对软件开发缺乏科学管理 ④ 软件开发手段落后 寻找解决软件危机途径的过程就是软件工程形成的过程 6、软件工程 核心:以工程化的原理和方法对软件进行规划、定义、开发和维护; 宗旨:以较少的投入,最快的时间生产出高质量的软件。 定义:“软件工程是软件开发、运行、维护和引退的系统方法”。 软件工程的主要思想是强调软件开发过程中应用工程化原则的重要性。 软件工程的三要素是方法、工具和过程。 软件工程的基本目标:实现软件的优质高产,即在给定成本、进度的前提下,达到要求的软件功能,取得较好的软件性能,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性,并满足用户需求的软件产品。 软件工程的内容:软件开发技术和软件工程管理。 7、软件生命周期: 一个软件从定义到开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,这个时期称软件生命周期(或软件生存周期)。 生命周期的划分原则 : 各阶段的任务应尽可能相对独立; 同一阶段各项任务的性质尽可能相同 软件生命周期通常划分为3个时期、6个阶段。即: 软件定义、软件开发、软件维护 问题的定义和可行性研究;需求分析;软件设计;程序编码;软件测试;运行与维护 8、软件开发模型 软件开发模型是在软件生命周期基础上构造出的由软件开发全过程中的活动和任务组成的结构框架。它反映了软件开发中各种活动的组织衔接方式。它是软件项目开发工作的基础。 常见的软件开发模型: 1.瀑布模型2.渐增式模型 3.快速原型模型4.软件重用模型5.喷泉模型 6.螺旋模型 瀑布模型是一种理想化的、文档驱动的模型,通过文档连接软件开发过程的各个阶段(阶段间具有顺序性和依赖性),但它缺乏灵活性, 特别是无法解决软件需求不明确或不准确的问题。 螺旋模型将瀑布模型与增量模型结合起来,加入了两种模型均忽略了的风险分析。按照“制定计划,风险分析,实施工程,客户评价”四个步骤循环实施。在实施过程中加入了风险分析,提高了风险识别和规避的能力。 9、软件开发应遵守的方法和原则:(软件工程的原则) 抽象、局部化与信息隐蔽、模块化、一致性、完整性和可验证性。 10.软件开发方法:结构化方法 Jackson方法 面向对象(Object Oriented)方法 结构化方法可使用瀑布模型、增量模型和螺旋模型进行开发; Jackson方法可使用瀑布模型、增量模型进行开发; 面向对象的开发方法一般是采用喷泉模型,也可用瀑布模型、 增量模型进行开发。 第二章 软件的定义及可行性研究(软件定义时期) 1、主要任务:就是在对用户要求充分了解的前提下,分析未来新系统(即目标系统)的主要目标,分析开发系统的可行性。 2、可行性研究的任务(或目标系统的可行性研究有那几个方面?) 对已提出的任何一种解决方案,都从经济、技术、运行和法律诸方面来研究其可行性,做出明确的结论供用户参考。 可行性研究的目的是明确“问题是否能够解决”和“是否值得解决” 可行性研究的实质:在高层次上做一次大大简化了的需求分析和设计 3、名词解释: 系统成本 = 开发成本+运行操作费用 + 维护费用 纯收入 = 累计经济效益(折合成现在值)- 投资额 3、系统流程图的符号及应用 P20 4、投资回收期是累计的经济效益等于最初投资所需要的时间,也就是达到估计开发总成本加上运行维护费用所需要的时间。 5、简述可行性研究的步骤。 (1)审核系统的规模和目标。 (2)研究现行系统。 (3)导出新系统的高层逻辑模型。 (4)重新定义问题。 (5)提出和评价供选择的方案。 (6)推荐可行的方案。 (7)草拟项目开发计划 (8)书写文档,提交审查 6、经济可行性分析 从经济上衡量一个项目是否有开发价值,主要研究两个方面的内容:一是新系统成本的估计;二是新系统可能产生的效益。又称为成本/效益分析。 第三章 需求分析 :是软件生存周期的重要的一步,也是最关键的一步。 1、需求分析的基本任务:准确定义新系统的目标,为了满足用户需要,回答“回答系统必须做什么”的问题( 细化“系统必须做什么”,准确地回答“系统必须做什么”) 2、需求分析的具体任务: 1、确定系统的综合要求 2、分析系统的数据要求 3、导出新系统的逻辑模型 4、修正系统的开发计划 5、开发原型系统 6、整理完成需求规格说明书 需求获取的基本原则:1、点面结合,把握重点2、以流程为主线。 需求获取的途径和方法:1、用户访谈和会议2、把握用户的工作流程3.开发人员和委托人的交流和合作。 3、需求分析的基本过程 1、问题识别 2、分析与综合 3、编写文档 4、分析评审 需求分析常用的方法: 面向数据流的结构化分析方法(SA) 面向数据结构的Jackson方法(JSD) 面向数据结构的结构化数据系统开发方法(DSSD) 面向对象的分析方法(OOA) 结构化分析方法(SA)的基本思想是“分解”和“抽象”, 核心思想是:采用“自顶向下,逐步求精”的技术,对系统进行划分。 结构化分析常用的工具有:数据流图(DFD)、数据词典(DD)、实体-联系图(E-R图) 4、数据流图 数据流图的画法及细化原则P39。 数据流图的四种基本图形符号:
5、数据词典: 定义:对数据流图中包含的所有元素的定义和说明的数据集合。是数据流的补充工具 数据词典和数据流图共同构成系统的逻辑模型,二者缺一不可。 数据词典共六类条目:数据流、数据项、数据结构、数据存储、加工逻辑与外部实体 数据词典的常用符号。
数据存储 数据源点或终点
加 工 加工名 数据流 数据流文件名 实体名
箭 头 圆或椭圆 单或双杠 矩形框 6、数据词典中对基本加工逻辑说明有三种描述方式: 结构化语言,判定表,判定树。 三种描述方式的具体使用。P42-P44 数据词典的功能:数据词典最重要的功能就是它是分析阶段的工具 数据词典中对加工逻辑的描述很有价值 数据词典也是下一步设计的依据 数据词典的实现方法 三种途径:人工方法,自动方法,混合方法 7、快速原型法:软件原型的分类:废弃(throw away)型 追加(add on)型 原型是软件开发过程中,软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。 原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习和了解目标系统的机会,强调软件开发人员与用户的不断交互,通过原型的演进不断深入了解、适应用户的需求,减少失误,从而使软件产品更加适用。 原型化开发过程:1、快速分析 2、构造原型 3、运行和评价原型4、修改和改进 5、判定原型完成 6、判断原型细部是否需要说明 7、原型细部的说明 8、判定原型效果 9、整理原型和提供文档 第四章 软件设计 :是将需求分析所得出的软件“要做什么”变换为“怎么做” 软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成任务,即确定系统的物理模型,解决软件“怎么做”的问题。 软件设计的重要性:(1)软件设计是软件开发阶段的关键步骤,通过“软件设计说明书”反映设计的结果。做出的决策将直接影响软件实现的成败。 (2)软件设计是软件开发中形成质量的关键环节,是软件维护的基础。 软件设计一般遵循以下原则:模块化、抽象、信息隐蔽与局部化、一致性、完整性、可验证性。 总体设计过程中应完成以下工作:确定最佳方案、功能分解、体系结构设计、模块设计 数据结构与数据库设计、用户界面设计、整理完成设计文档、评审 1、软件设计的划分: 从工程管理角度,软件设计分两步完成:总体设计(概要设计)、详细设计(过程设计) 从技术角度有任务:软件结构设计、数据设计、界面设计和过程设计 2、模块: 是能够单独命名并独立地完成一定功能的程序语句的集合。模块化就是将系统划分为若干个较小的、功能独立的模块来完成目标任务。 3、名词解释: 抽象是抽出事物的本质特性而暂时不考虑它们的细节。 4、在设计阶段应达到的目标是: 可靠性;可维护性;可理解性;高效率。 5、常见的体系结构有两大类:层次结构和客户机/服务器结构。 6、模块化:模块设计的主要任务就是设计具有独立功能而且和其他模块间没有过多的相互