1、软件工程基础一、软件工程的基本概念1、软件定义与软件特点软件指的是计算机系统中与硬件相互依存的另一部分,是程序、数据和相关文档的完整集合。软件三要素:程序、数据及文档名称 描述 程序 软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列数据 使程序能正常操纵信息的数据结构文档 与程序的开发、维护和使用有关的图文资料软件的特点:软件是一种逻辑实体,具有抽象性;软件的生产与硬件不同,它没有明显的制作过程;软件在运行、使用期间不存在磨损、老化问题,必须对其修改和维护对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;软件复杂性高,成本昂贵;软件开发涉及诸多的
2、社会因素。根据应用目标的不同,软件可分应用软件、系统软件和支撑软件(或工具软件) 。 名称 描述 应用软件 为解决特定领域的应用而开发的软件,如办公自动化软件系统软件 计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件,如操作系统 支撑软件(或工具软件) 支撑软件是介于两者之间,协助用户开发软件的工具性软件。2、软件工程:软件工程产生背景:20 世纪 60 年代末“软件危机”软件危机:泛指在计算机软件的开发和维护过程中遇到的一系列严重的问题,集中表现在成本、质量、生产效率等几个方面 。 软件工程时间:1968 年 NATO 会议,德国人 Fritz Bauer软件工程是指应
3、用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序软件工程包括 3 个要素:方法,工具和过程名称 描述 方法 方法是完成软件工程项目的技术手段 工具 工具支持软件的开发、管理、文档生成 过程 过程支持软件开发的各个环节的控制、管理 软件工程学:是指应用工程、科学、数学的原理与方法研制、维护计算机软件的有关技术及管理方法的一门新兴工程科学。软件工程是建立并使用完善的工程化原则,以较经济的手段获得,能在实际机器上有效运行的可靠软件的一系列方法;软件工程的主要思想强调在软件开发过程中需要应用工程化原则。软件工程的核心思想是把软件当作一个工程产品来处理。3、软件工程过程软件工程过
4、程是把软件转化为输出的一组彼此相关的资源活动,包含 4 种基本活动:(1)P(plan) 软件规格说明; (2)D(do)软件开发;(3)C(check)软件确认; (4 )A(action)软件演进4、软件的生命周期软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的整个过程。可分为软件定义,软件开发及软件维护 3 个阶段。软件生命周期中,能够准确确定软件系统必须做什么和必须具备哪些功能的阶段是:需求分析。维护阶段是持续时间最长,花费代价最大的一个阶段定义阶段 开发阶段 维护阶段5、软件工程的内容:软件开发技术和软件工程管理6、软件工程的目标:在给定成本、进度的前提下,开发出具有有
5、效性、可靠性、可理解性、可维护性、可重用性、可适用性、可移植性、可追踪性和可互操作性且满足用户需求的产品7、软件工程的原则:抽象,信息隐蔽,模块化,局部化,确定性,一致性,完备性,可行性研究初步项目计划需 求分 析概 要设 计详 细分 析实 现 测 试 使 用 维 护 退 役交 付可验证性 二、结构化分析方法1、需求分析任务:1)导出目标系统的逻辑模型,解决“做什么问”题2)确定软件系统功能功能需求分析阶段的工作:需求获取,需求分析,编写需求规格说明书,需求评审。常见的需求分析方法有:(1)结构化需求分析方法; 面向数据结构的 Jackson 方法(ISD ) ;面向数据流的结构化分析方法(S
6、A) ;面向数据结构的结构化数据系统开发方法(DSSD) ;(2)面向对象的分析的方法(OOA) 。从需求分析建立的模型的特性来分:静态分析和动态分析。2、结构化分析方法结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用1、结构化分析方法的概念结构化分析方法是面向数据流自顶而下逐步求精进行需求分析,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。结构化方法的核心和基础是结构化程序设计理论。 基本思想 将系统分析看成工程项目,有计划、有步骤地进行工作。 开发策略 自顶向下,逐层分解2、结构化分析的常用工具(1)数据流图(DFD-Data Flow Diagram)
7、:是结构化分析方法中用于系统逻辑模型的一种工具。它以图形的方式描绘数据在系统中流动和处理的过程。数据流图中四种基本的符号。箭头( ):表示数据流,数据流是数据在系统中传播的路径。圆或椭圆( ):表示加工,加工又称为数据处理,是对数据流进行某些操作或变换。双横( ):表示数据存储(数据源) 。数据存储又称为文件,指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。方框( ):源、潭。表示数据的源点或终点。它是软件系统外部环境中的实体,统称外部实体建立数据流图的步骤(1)由外向里:先画系统的输入输出,然后画系统的内部。 (2)自顶向下(3)逐层分解(2)数据字典(DD-Data Dictio
8、nary):它是结构分析方法的核心,是用来描述系统中所用到的全部数据和文件的文档,作用是对 DFD中出现的被命名的图形元素进行确切解释。数据字典由以下 4 类元素组成1)数据流 2)数据流分量 3)数据存储 4)处理 注:数据字典的编制过程中,常用定义方式描述数据结构数据字典定义方式中常用的符号符号 含义“ ” 表示“等于、定义为、有什么构成”【.】 表示“或”即选择竖线前后的一个“ + ” 表示“与 、和”nm 表示“重复”即括号内的项要重复若干次,n,m 是重复的上下限(.) 表示“可选”即括号内的项可以没有* 表示“注释”。 。 表示符(3)判定树(决策树):是一种描述加工的图形工具,适
9、合描述时候处理中具有多个判断,而且每个决策与若干条件有关。(4)判定表:与判定树类似,也是一种描述加工的图形工具。如果一个加工逻辑有多个条件、多个操作,并且在不同的条件组合下执行不同的操作,那么可以使用判定表来描述。3、软件需求规格说明书软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段得出的最主要的文档。软件需求规格说明书的作用:(1)便于用户、开发人员进行理解和交流(2)反映出用户问题的结构,可以作为软件开发工作的基础和依据(3)作为确认测试和验收的特点软件需求规格说明书的特点:有正确性、无歧义性、完整性、可验证性、一致性、可理
10、解性、可修改性和可追踪性。其中最重要的是无歧义性。三、结构化设计方法1、软件设计的分类:从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。(1)结构设计定义软件系统各主要部件之间的关系; (2)数据设计将分析时创建的模型转化为数据结构的定义; (3)接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信; (4)过程设计则是把系统结构部件转换为软件的过程性描述。从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。(1)概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式; (2)详细设计确立每个模块的实现算法和局部数据结构,用
11、适当方法表示算法和数据结构的细节。软件设计的过程(迭代):高层次结构低层次过程穿插数据和接口 2、软件设计的基本原理:抽象、模块化、信息隐蔽、模块独立性模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能抽象化:抽出事物的本质特性而暂时不考虑它们的细节。信息隐藏和局部化:信息隐蔽是指在一个模块内包含的信息(过程或数据) ,对于不需要这些信息的其他模块来说是不能访问的,实现信息隐蔽依靠对象的封装。模块独立性:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量软件的模块独立性是用耦合性和内聚性两个定性的度量标准。耦合性:是对一个软件结构内
12、不同模块之间互联程度的度量。耦合性的强弱取决于模块间接口的复杂程度(即模块间的紧密程度)内聚性:是一个模块内部各个元素间彼此结合的紧密程度的度量(即模块内部各元素的紧密程度)一个模块的内聚性越强则该模块的模块独立性越强。一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。在结构程序设计中,模块划分的原则:模块内具有高内聚度,模块间具有低耦合度。 (“高内聚低耦合” )耦合和内聚的种类(详见教材第 74 页) 。耦合度由低到高:非直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合。内聚性由强到弱:功能内聚,顺序内聚,通信内聚,过程内聚,时间内聚,逻辑内聚,偶然内聚。3、结构
13、化设计方法结构化分析方法是面向数据流自顶而下,逐步求精进行需求分析的方法,与结构化需求分析方法对应的是结构化设计方法。基本思想将软件设计成由相对独立,单一功能的模块组成的结构,与结构分析方法衔接使用,以数据流图为基础得到软件的模块结构,适用于变换型结构和事物型结构的目标系统。概要设计也称总体设计,此阶段需要将系统进一步分解,划分为模块以及模块的层次结构。1、概要设计基本任务: 设计软件系统结构、数据结构和数据设计、编写概要设计文档、概要设计文档评审2、概要设计的工具:结构图(SC-Structure Chart )也称程序结构图,结构图表示:模块用矩形( )表示箭头( )表示模块间的调用关系用
14、带实心圆的箭头( )表示传递的是控制信息空心圆箭心表示( )传递的是数据。用带注释的箭头表示模块调用过程中来回传递的信息结构图的基本形式:基本形式、顺序形式、重复形式、选择形式。结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。程序结构图中的专业术语:名称 描述 深度 表示控制的层数 上级模块,从属模块 上,下两层模块a 和b,且有 a调用b,则a是上级模块,b是从属模块宽度 整体控制跨度(最大模块的层)的表示扇入 调用该模块的模块个数扇出 一个模块直接调用的其他模块数原子模块 树中位于叶子节点的模块3、面向数据流的设计方法任何软件系统都可以用数据流图表示,典型的数据流类型有两种:变换型和事务型。变换型:数据传入系统经过处理后按原来路径输出的系统。 (从内部形式变换成外部形式又变成内部形式)变换型系统结构图由输入、中心变换、输出三部分组成。事务型:存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能的系统。