《软件工程专题》由会员分享,可在线阅读,更多相关《软件工程专题(30页珍藏版)》请在金锄头文库上搜索。
1、软件工程专题1、软件工程知识 1.1 概述 软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的 原则和方法来解决软件问题的工程。其目的是提高软件生产率、提高 软件质量、减低软件成本。软件工程是 1968 年在德国的 NATO 会议上提出的,希望用工程化的 原则和方法来克服软件危机;而软件危机就是软件开发和维护过程中 的各种问题,由于软件开发阶段缺乏好的方法的指导和好的工具的辅 助,而且缺少有关的文档,使得大量的软件难以维护。 软件生命周 期是指由软件定义、软件开发和软件维护等阶段组成的全过程,反映 软件生存期内各种工作得组织以及各个阶段如何衔接。下表归纳了软 件生存周期各个阶段的任务
2、、参与人员和产生文档。常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型阶段任务参与人员产生文档软件定义阶段一一待开发软件要“做什么”系统分析确定待开发软 件的总体要求 和适用范围,以 及与之有关的 硬件、支撑软件 的要求用户、项目 负责人、系 统分析员可合并项 目计划书中软件项目计划确定待开发软 件的目标,对其 进行可行性分 析,并对资源分 配、进度安排等 做出合理的计 划用户、项目 负责人、系 统分析员可行性分 析报告、项 目计划书需求分析确定待开发软 件的功能、性 能、界面等要 求,从而确定系 统的逻辑模型用户、项目 负责人、系 统分析员需求规格说明书软件开发阶段一一待开发软件“
3、怎么做”概要设计软件设计模块分解,确定 软件的结构,模 块的功能和模 块间的接口,以 及全局数据结 构的设计系统分析 员、高级程 序员设计说明 书、数据说 明书、模块 开发卷宗详细设计编码设计每个模块 的实现细节和 局部数据结构 的设计用某种程序语 H为每个模块荀级程序 员、程序员斋级程序 员、程序员程序清单软件测试编写程序 发现软件中的 错误并加以纠 正高级程序员 或系统分析 员另一部 门或单位软件测试 计划、软件 测试用例 说明,软件测试报告软件维护阶段一开发后交付使用的软件的维护软件维护便软件适应外 界环境的变化F 实现功能的扩维护人员维护计划、 维护报告充和质置的改善帀修改软件软件由计
4、算机程序、数据及文档组成,同时与硬件、数据库人、过程 等共同构成计算机系统。软件工程包括三个要素:方法、工具和过程。主要的软件开发方法有以下几种方法:生命周期法:命周期法认为:每一个软件系统都有一定的生命周期。软件的生命周期是指一个软件系统从其提出、调 查到分析、设计和有效使用,直至被淘汰或取代的整个期间。软件生 命周期法就是按软件生命周期的各个阶段划分任务,按一定的规则和 步骤,有效地进行软件开发的方法。通常一个软件系统的生命周期可分为五个阶段:准备 阶段、分析阶段、设计阶段、实施阶段、运行与维护阶段原型法:原型法是先根据用户的最主要要求,开 发出能实现系统最基本功能的一个原型,再根据用户对
5、原型使用与评 价的意见,反复修改完善原型,直到等到用户满意的最终系统为止。原型法分 4 个阶段:确定用户需求;设计原型; 使用、评价原型;修改、完善原型。1.2 软件分析软件开发模型:瀑布模型;演化模型(原型法);螺旋模型;喷泉模 型(迭代和无间隙);软件成本模型;可行性分析的任务是从技术上、 经济上、使用上、法律上分析需解决的问题是否存在可行的解。需求分析是软件生存周期中相当重要的一个阶段。需求分析主要是确 定待开发软件的功能、性能、数据、界面等要求。具体有以下几点:惻确定软件系统的综合要求惻分析软件系统的数据要求惻导出系统的逻辑模型惻修正项目开发计划惻 如有必要,可开发一个原型系统需求分析
6、的基本原则是能够表达和理解问题的信息域和功能域;以 层次化的方式进行分解和不断细化;要给出系统的逻辑视图和物理视 图; 描述软件需求的方法: 功能层次模型:一般来讲就是系统的功能图,模 块分布图等描述整个系统的功能的分布和功能的层次结构; 数据流模型:就是以数据流为着眼点的分析方法 得到的模型,主要通过数据在整个系统的流动情况来确定系统的主要 功能主线和流程; 控制流模型:通过了解和界定系统中控制线,通 过控制流的走向和控制的对象来确定系统的功能分布和控制与被控 制的关系;结构化分析(SA)方法是一种面向数据流的需求分析方法,它适用于 分析大型数据处理系统。结构化分析方法的基本思想是自顶向下逐
7、层 分解,这样做可以把一个大问题分解成若干个小问题,经过多次逐层 分解,每个最底层的问题都是足够简单、容易解决的,这个过程就是 分解的过程。结构化方法的分析结果由数据流图DFD、数据词典和加工逻辑说明几 个部分组成。其中, DFD 的基本成分有数据流、加工、文件和源/宿。 惻画数据流图的基本步骤:自外向内、自顶向下、逐层细化、完善求精;惻数据流图的父图与子图要平衡,即输入和输出的数据流一致;数据流图中的每个加工至少有一个输入数据流和一个输出数据流;惻局部的数据存储不画出来,只有当局部数据存储作为某些数据加工之间的数据接口才画出,这有利于信息隐蔽;惻画数据流的时候不画控制流,两者的区别就是控制流
8、中没有数据;惻一个加工的数据流与输出流不应该同名;惻 允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出 流向两个不同的加工;惻保持数据守恒:一个加工的所有输出数据必须能从该加工的所有的输入流中获得;惻在整套数据流图中,每个文件都必须既有读文件的数据流也有写文件的数据流;软件开发过程中的软件工程原则(8个):惻抽象;自顶向下、逐层细化;惻信息隐蔽和数据封装;惻模块化;局部化;惻确定性;一致性和标准化;惻完备性和可验证性;软件工程基本原理(7个):惻 按软件生存周期分阶段指定计划并认真实施;惻坚持进行阶段评审;惻坚持严格的产品控制;惻使用现代程序设计技术;惻明确责任,使得工作
9、结果能够得到清楚的审查;惻用人少而精; 不断改进开发过程;1.3 软件设计软件设计原则 : 软件设计的原则对提高软件的设计质量有很大的帮 助。抽象抽象是指忽视一个主题中与当前目标无关的那些方面,以便更充分地 注意与当前目标有关的方面。过程抽象和数据抽象是常用的两种主要 抽象手段。 模块化 模块化是指将一个待开发的软件分解成若干个小的简单的部分 模块,每个模块可独立地开发、测试、最后组装成完整的软件。这是 一种复杂问题的“分而治之”的原则。模块是指执行某一特定任务的数据结构和程序代码。一个模块有它的 外部特征和内部特征。 信息隐蔽 信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐 蔽
10、或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显 露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。模块独立 模块独立是指每个模块完成一个相对独立的子功能,并且与其他模块 之间的联系简单。衡量模块独立程度的度量标准有两个:耦合和内 聚。耦合是指模块之间联系的紧密程度。耦合度越高则模块的独立性越差按耦合度从低到高依次有 7 种耦合方式。 非直接耦合(独立运行)数据耦合(用参数表传递简单数据)惻标记耦合(传递数据结构或者一部分)惻 控制耦合(传递的信息包括控制模块的信息) 外部耦合(模块与软件之外的环境有关)惻 公共耦合(多个模块引用同一全局的数据区)
11、内容耦合(访问内部数据,代码重叠或者多个入口)内聚是指模块内部各元素之间联系的紧密程度内聚度越低模块的独 立性越差。按内聚度从低到高依次有7种内聚种类。偶然内聚(模块完成的多个任务,任务之间的关系松散)惻 逻辑内聚(模块完成逻辑相关的一组任务) 瞬时内聚(模块的所有任务必须在同一时间间隔内执行) 过程内聚(模块的处理元素相关而且按照特定的次序执行) 通信内聚(模块的所有元素集中在一个数据结构区域上) 顺序内聚(模块的处理元素相关,必须顺序执行)功能内聚(模块完成单一的功能,各个部分协调工作,而且不可缺少) 模块分解原则: 满足信息隐蔽;尽量内聚度高,模块间偶合度低;惻模块大小在(50-100语
12、句);惻模块调用深度不能过大;模块的扇入(直接调用该模块)应尽量大,扇出(直接调用下级模块数)不宜过大;惻设计单入口和单出口的模块;惻模块的作用域应在控制域之内: 作用域:受模块内一个判定影响的所有的模块的集合; 控制域:该模块本身和被该模块直接或间接调用的所有的模块的集合;模块的功能应是可以预测的,相同输入得到相同输出结构化设计方法结构化设计(SD)方法是一种面向数据流的设计方 法,它可以与 SA 方法衔接。结构化设计采用结构图(SC)来描述程序的结构。其基本成分有模 块、调用和输入/输出数据。 结构图:条件调用 循环调用在需求分析阶段用SA方法产生了数据流图(DFD)。面向数据流的 设计可
13、以方便的将DFD转换成程序结构图ODFD从系统的输入数据流 到系统的输出数据流的一连串连续变换形成一条信息流。DFD的信息 流大体可分为两种类型:变换流和事务流。与之对应的也存在两种分 析,变换分析和事务分析。变换分析是从变换流型的 DFD 导出程序 结构图,而事务分析则是从事务流行型的 DFD 导出程序结构图。 SD 方法的具体设计步骤为:惻 复查并精化数据流图惻 确定 DFD 的信息流类型 根据信息流类型分别将变换流或事务流转换成程序结构图 根据软件设计的原则对程序结构图作改进 结构化程序设计 结构化程序(SP)设计采用自顶向下逐步求精的设计方法和单入口单 出口的控制结构。结构化程序设计的
14、描述工具主要有图形描述工具、语言描述工具和表 格描述工具。常用的图形描述工具有程序流程图、盒图(NS图)和 问 题 分 析 图 ( PAD )。 典 型 的 语 言 描 述 工 具 是 PDL(program design language)。典型的表格描述工具是判定表和判定 树。 面向数据结构的 Jackson 方法也十分常用:Jackson 方法是以数据结构为设计基础,设计目标是得出对程序处 理过程的描述,其设计过程是从描绘数据结构的 Jackson 图推导出描 绘程序结构的 Jackson 图。这种方法最适合于详细设计阶段使用。 Jackson 方法的具体设计步骤为:分析并确定输入和输出
15、的数据的逻辑结构,并用Jackson图表示 惻找出输入数据结构与输出数据结构间有对应关系的数据单元惻从描述数据结构的Jackson图导出描述程序结构的Jackson图软件编码: 根据详细设计说明书编写程序,为开发项目选择程序设计语言需要考 虑的因素有应用领域、算法和计算的复杂性、软件运行环境、用户需 求、数据结构和开发人员的水平。软件的设计质量与程序设计语言的 技术性能无关,但在程序设计转向程序代码时,转化的质量受语言性 能的影响。好的程序应该具有模块化结构,系统应该有较高的模块独立性。 从应用领域看, COBOL 适合商业领域; FORTRAN 适合科学计算; PROLOG和LISP适合人工智能领域;SMALLTALK、C+、JAVA是面向对 象语言;C是开发系统的程序设计语言;1.4软件测试 对源程序最基本的质量要求是正确性和可靠性,此外还很注重软件的 易使用性、易维护性和易移植性。软件测试的工作量约占软件开发总 工作量的 40%以上,其目的是尽可能多的发现软件产品(主要是