软件工程
软件:程序+文档
工程:用较大而复杂的设备进行的工作或需要投入巨大人力和物力的工作
软件开发的特点:多个软件开发人员分工合作、共同完成;各个开发阶段之间应很好衔接;软件成果要面向用户,接受用户检验
把软件当作一种工业产品,按照一般工程的原理和方法组织软件的计划、开发和维护----软件工程。
第一章绪论
1.1.1 软件的特点一、软件的定义
软件是计算机程序及其说明程序的各种文档。
软件=程序+文档
程序是计算任务的处理对象和处理规则的描述;
文档是有关计算机程序功能、设计、编制、使用的文字或图形资料。
1软件工程的产生
二、软件的特点
软件开发不同于硬件设计:软件是一种逻辑实体,而不
是具体的物理实体。因而它具有抽象性。
软件的生产与硬件不同:在软件的开发过程中没有明显的制造过程,主要是研制。
软件维护不同于硬件维护:在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题;但存在维护问题。
软件产品的生产主要是脑力劳动。软件费用不断增加,软件成本相当昂贵。
1软件工程的产生
1.1.2 软件生产的发展
1、程序设计时代(1946-1956年)
2、程序系统时代(1956-1968年)
3、软件工程时代(1968年至今)
1软件工程的产生
1.1.3 软件危机
软件危机:软件生产与市场需求极不适应的严重现象。软件危机的主要表现:
经费预算经常突破,完成时间一再拖延。
开发的软件不能满足用户要求。开发的软件可维护性差。
开发的软件可靠性差。
1软件工程的产生
产生软件危机的原因:
软件的规模越来越大,结构越来越复杂。软件开发的管理困难。软件开发费用不断增加。软件开发技术落后。生产方式落后。
开发工具落后,生产率提高缓慢。
1软件工程的产生
1.1.4 软件工程一、软件工程的定义
软件工程是用科学知识和技术原理来定义、开发、维护软件的一门学科。
主要思想是用工程化的方法代替传统手工方法。
工程化的方法借用了传统的工程设计原理的基本思想,采用了若干科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到需求分析、设计、实现,直到
维护的整个过程。
1软件工程的产生
二、软件工程的目标
软件工程是一门工程性学科,目的是成功地建造一个大
型软件系统。
所谓成功,是要达到以下几个目标:
付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;
需要较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
1软件工程的产生
三、软件工程面临的问题
软件费用:软件费用上升的势头还将继续。软件可靠性:提高软件可靠性要付出足够的代价。软件可维护性:如何提高软件的可维护性,减少软件维
护的工作量,也是软件工程面临的主要问题之一。软件生产率:如何提高软件生产率,是软件工程又一重要问题。
软件重用:是软件工程中的一个重要研究课题,软件重
用的理论和技术至今尚未彻底解决。
1软件工程的产生
软件生存周期
软件生存周期是借用工程中产品生存周期的概念而得来的。引入软件生存周期概念,可使软件生产有相应的模式、流程、工序和步骤。
软件生存周期是指一个软件从提出开发要求开始直到该软件报废为止的整个时期。
把整个生存周期划分为若干阶段,使得每个阶段有明确
的任务,把规模大、结构复杂和管理复杂的软件开发变得容易控制和管理。
2软件生存周期
软件生存周期的各阶段有不同的划分:软件规模、种类、开发方式、开发环境以及开发使用的方法都影响软件生存周期的划分。
划分软件生存周期的阶段应遵循的基本原则:各阶段的
任务应尽可能相对独立,同一阶段各项任务的性质尽可能相同。
软件生存周期包括:
2软件生存周期
可行性分析和项目开发计划:必须要回答的问题是“要解决的问题是什么”。该问题有行得通的解决办法
码? 若有解决问题的办法,则需要多少费用? 需要多少资源? 需要多少时间? 要回答这些问题,就要进行问题定义、可行性分析,制定项目开发计划。
需求分析:任务不是具体地解决问题,而是准确地确定“软件系统必须做什么?” ,确定软件系统必须具备哪些功能。完整、全面地收集、分析用户业务中的信息和处理,从中分析出用户要求的功能和性能,完整、准确地表达出来(软件需求说明书)。
2软件生存周期
概要设计:把确定的各项功能需求转换成需要的体系结构。概要设计就是设计软件的结构(由哪些模块组成、模块的层次结构、模块的调用关系、每个模块的功能),同时设计应用系统的总体数据结构和数据库结构。详细设计:为每个模块完整的功能进行具体描述,要把功能描述转变为精确的、结构化的过程描述(模块的控
制结构、先做什么、后做什么、有什么样的条件判定、
有些什么重复处理等),并用相应的表示工具把这些控制结构表示出来。
2软件生存周期
编码:把每个模块的控制结构转换成计算机可接受的程序代码,写出的程序应是结构好,清晰易读,并且与设
计相一致。
测试:是保证软件质理的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。测试分为模块测试、组装测试、确认测试。
维护:是软件生存周期中时间最长的阶段。软件运行过
程中需要对它进行修改(如发现了软件隐含的错误、适应变化了的软件工作环境、用户业务发生变化等)。
2软件生存周期
1.3.1 软件生存周期模型的概念
软件生存周期模型揭示了如何演绎软件过程的思想,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
确立了软件开发和演绎中各阶段的次序限制以及各阶段活动的准则,确立开发过程所遵守的规定和限制。目前的软件生存周期模型主要包括瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。
3软件生存周期模型
1.3.2 瀑布模型
瀑布模型是将软件生存周期各活动规定为依线性顺序联接的若干阶段的模型(可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护)。规定了由前至后、相互衔接的固定次序,如同瀑布流水,逐级下落;为软件开发提供了一种有效的管理模型;以文档作为驱动、适合于需求很明确的软件项目开发的
模型。
3软件生存周期模型
瀑布模型的特点
瀑布模型严格按照生存周期各个阶段的目标、任务、文档和要求来进行开发;强调每个阶段的严格性,每个活动过程结束后,通过严格的阶段性复审与确认,才能进入下一阶段活动。
瀑布模型是以文档形式驱动的,为合同双方最终确认产品规定了蓝本,为管理者进行项目开发管理提供了基础,为
开发过程施加了“政策”或纪律限制,约束了开发过程中的活动。
3软件生存周期模型
瀑布模型以里程碑开发原则为基础,提供各阶段的检查点,确保用户需求,满足预算和时间限制。
瀑布模型是一种整体开发模型。
瀑布模型适合于功能和性能明确、完整、无重大变化的软
件开发。
瀑布模型的局限性
瀑布模型是一种理想的线性开发模式,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。
3软件生存周期模型
1.3.3 增量模型
增量模型是一种非整体开发的模型。软件在该模型中是“逐渐”开发出来的,开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题。或者先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。增量模型具有较大的灵活性,适合于软件需求不明确、设
计方案有一定风险的软件项目。
3软件生存周期模型
1.3.4 螺旋模型
螺旋模型将瀑布模型与增量模型结合起来,加入了风险分析。是一种风险驱动的模型。
将开发过程分为几个螺旋周期,每个螺旋周期可分为:
第一制定计划(确定目标、选定实施方案、明确开发限制条件);第二风险分析(分析所选方案、识别风险、通过原型消除风险);第三开发实施(实施软件开发);
第四用户评估(评价开发工作、提出修改意见、建立下一个周期的计划)。
3软件生存周期模型
1.3.5 喷泉模型
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型;它适合于面向对象的开发方法;它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性,系统某些部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统。强调增量开发,依据分析一点,设计一
点的原则,并不要求一个阶段的彻底完成,整个过程是一个迭代的逐步提炼的过程。
3软件生存周期模型
1.4.1 结构化方法
结构化方法由结构化分析、结构化设计和结构化程序设计构成;是一种面向数据流的开发方法;方法简单实用,应用较广,技术成熟。
所谓结构化分析就是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析。
4软件开发方法
所谓结构化设计就是根据模块独立性准则、软件结构准
则,将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。所谓结构化程序设计就是根据结构程序设计原理,将每个模块的功能用相应的标准控制结构表示出来,从而实现详细设计。
结构化方法总的指导思想是自顶向下、逐步求精;基本原则是功能的分析与抽象。
4软件开发方法
1.4.2 Jackson 方法
是一种面向数据结构的开发方法。该方法首先描述问题的输入、输出数据结构,分析其对应性,然后推出相应的程序结构,从而给出问题的软件过程描述。1.4.3 维也纳开发方法(VDM )
VDM 是一种形式化的开发方法,软件的需求用严格的形式语言描述,把描述模型逐步变换成目标系统。
VDM 是一个基于模型的方法,主要思想是:将软件系统当作模型来给予描述。
4软件开发方法
1.4.4 面向对象方法
面向对象方法是以对象作为最基本的元素,它也是分析问题、解决问题的核心。
面向对象开发方法包括面向对象分析、面向对象设计和
面向对象实现。面向对象开发方法有Booch 方法、Coad 方法和OMT 方法等。
统一建模语言UML (Unified Modeling Language )是面
向对象的标准建模语言,已成为面向对象建模的工业标准。
4软件开发方法
软件工具一般是指为了支持软件人员开发和维护活动而使用的软件。
工具箱:一种工具支持一种开发活动,将各种工具简单组合起来就构成工具箱。
软件开发环境:其目的是使软件工具支持整个生存周期,做到不仅支持各阶段中的技术工作,还要支持管理和操作工作。
计算辅助软件工程:可以简单地定义为软件开发的自动化,通常简称为CASE 。
5软件开发工具
第二章软件要求定义
2.1.1
可行性研究
首先需要进行概要的分析研究,初步确定项目的规模和目标、项目的约束和限制,并清楚地列举出来。
然后进行简要的需求分析,抽象出项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决办法,对每种解决方法都要从技术、经济和社会三方面研究它的可行性。
1 可行性研究
技术可行性
技术可行性研究的内容:分析要开发项目的功能、性能和限制条件,确定在现有的资源条件下,技术风险有多大,项目是否能实现。经济可行性
研究的内容:估算开发成本和评估取得的效益,以确定要开发的项目是否值得投资开发。
1可行性研究
社会可行性
研究的内容:研究要开发的项目是否存在任何侵犯、妨碍
等责任问题,其运行方式在用户组织内是否行得通,现有管理制度、人员素质和操作方式是否可行。2.1.2 可行性研究的文档
引言、可行性研究前提、对现有系统的分析、所建设系统的技术可行性分析、所建议系统的经济可行性分析、所建
议系统的社会因素可行性分析、其他可供选择方案、结论意见。
1可行性研究
经过可行性研究后,若一个项目是值得开发的,应制定项目开发计划。
软件项目开发计划是软件工程中的一种管理性文档。主要是对开发软件项目的费用、时间、进度、人员组织、硬件设备的配置、软件开发环境和运行环境的配置等进行说明和规划,是项目管理人员对项目进行管理的依据,据此对项目的费用、进度和资源进行控制和管理。
项目开发计划主要内容如下:项目概述、实施计划、人员组织及分工、交付期限。
2项目开发计划
需求分析是指开发人员要准确理解用户的要求,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转
换到相应的需求规格说明的过程。
软件需求分析与说明要适用下面的基本原则:
1、必须能够表达和理解问题的数据域和功能域。数据域包括数据流、数据内容和数据结构,而功能域反映上述三方面的控制信息。
2、可以把一个复杂问题按功能进行分解并可逐层细化。
3软件需求分析
3、建模。模型可以帮助分析人员更好地理解软件系统的信息、功能和行为,这些模型也是软件设计的基础。
结构化分析方法和面向对象分析方法都遵循以上原则。需求分析的任务:准确地定义新系统的目标,回答系统必
须“做什么”的问题。1、问题识别
双方确定对问题的综合需求,主要包括:功能需求、性能需求、环境需求、用户界面需求。另外还有可靠性、安全性、保密性、可移植性和可维护性等需求。
3软件需求分析
2、分析与综合,导出软件的逻辑模型
对获取的需求进行一致性的分析检查,逐步细分软件功能,划分成各个子功能。其中包括对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成分,并建立
起新系统的逻辑模型。
3、编写文档,包括:编写需求说明书、初步用户使用手册和确认测试计划以及修改完善项目开发计划。
3软件需求分析
需求分析的方法1、结构化分析方法
是一种从问题空间到某种表示的映射方法,用数据流图表示软件的功能,是结构化中重要的、被普遍接受的表示系
统;它由数据流图和数据词典构成。这种方法简单实用,适于数据处理领域问题。
沿现实世界中的数据流进行分析,把数据流映射到分析结果中。但现实世界中的有些要求不是以数据流为主干的,就难于用此方法。
3软件需求分析
二、面向对象的分析
是把ER 图中的概念与面向对象程序设计语言中的主要概念结合在一起而形成的一种分析方法。采用了实体、关系和属性等信息模型分析中的概念以及封闭、类结构和继承性
等面向对象程序设计语言中的概念。3软件需求分析
三、信息建模方法
是从数据的角度来对现实世界建立模型的,它对问题空间的认识是很有帮助的。基本工具是ER 图,基本要素由实体、属性和联系构成。
实体E 是一个对象或一组对象,实体把信息收集在其中,关系R 是实体之间的联系或交互作用。
此外还有功能分解方法等。
3软件需求分析
需求分析的文档
需求说明书是需求分析阶段最重要的技术文档之一。提供了用户与开发人员对开发软件的共同理解,其作用相当于用户与开发单位之间的技术合同,是今后各阶段设计工作的基础,也是本阶段评审和测试阶段确认与验收的依据。需求说明书的主要内容:说明每个功能的输入、处理和输
出;外部接口需求(用户接口、软件接口、硬件接口和通信接口);性能需求;设计约束;其他需求,包括数据库、操作等。
3软件需求分析
第三章软件设计
概要设计基本任务
一、设计软件系统结构(简称软件结构)
为了实现目标系统,首先要进行结构设计,具体方法如下:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块;(2)确定每个模块的功能;(3)确定模块之间的调用关系;(4)确定模块之间的接口,即模块之间传递的信息;(5)评价模块结构的质量。软件结构的设计是以模块为基础的。
1软件概要设计概述
二、数据结构及数据库设计
对于大型数据处理的软件系统,除了系统结构设计外,数据结构与数据库设计也是重要的。
1、数据结构的设计:采用逐步细化的方法设计有效的数据
结构,将大大简化软件模块处理过程的设计。2、数据库的设计:概念设计、逻辑设计、物理设计。三、编写概要设计文档
编写概要设计文档的内容如下:概要设计说明书、数据库1软件概要设计概述
软件概要设计文档
概要设计说明书是概要设计阶段结束时提交的技术文档。按国标GB8576-88的《计算机软件产品开发文件编制指南》规定,软件设计文档可分为“概要设计说明书”、“详细
设计说明书”和“数据库设计说明书”。概要设计说明书的主要内容如下:
引言、总体设计、接口设计、运行设计、系统数据结构设计、系统出错处理设计。
1软件概要设计概述
3.2.1 模块化
模块:在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素(如高级语言中的过程、函数和子程序等)。在软件的体系结构中,模块是可组合、分解和更换的单元。模块具有以下基本属性:
(1)接口:指模块的输入与输出。
(2)功能:指模块实现什么功能。
2软件设计的基本原理
(3)逻辑:描述内部如何实现要求的功能及所需的数据。(4)状态:指该模块的运行环境,即模块的调用与被调用关系。
功能、状态与接口反映模块的外部特性;逻辑反映它的内
部特性。
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
2软件设计的基本原理
3.2.2 抽象
抽象是认识复杂现象过程中使用的思维工具,软件工程实施中的每一步都可以看作是对软件抽象层次的一次细化。在系统定义阶段,软件可作为整个计算机系统的一个元素
来对待;在软件需求分析阶段,软件的解决方案是使用问题环境中的术语来描述;从概要设计到详细设计阶段,抽象的层次逐步降低,将面向问题的术语与面向实现的术语
结合起来描述解决方法,直到产生源程序时到达最低的抽象层次。
2软件设计的基本原理
3.2.3 信息隐蔽
所谓信息隐蔽是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的;“隐蔽”的意思是有效的模块化通过定义一组相互独立的模块来实现,这些独立的模块彼此之间仅仅交换那些为了完成系统功能所必需的信息,而将那些自身的实现细节与数据“隐藏”起来。
一个软件系统在整个生存期中要经过多次修改,信息隐蔽为软件系统的修改、测试及以后的维护都带来好处。
2软件设计的基本原理
3.2.4 模块独立性
为了降低软件系统的复杂性,提高可理解性、可维护性,必须把系统划分成为多个模块,但模块不能任意划分,应尽量保持其独立性。
模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
模块独立性概念是模块化、抽象及信息隐蔽这些软件工程基本原理的直接产物。只有符合和遵守这些原则才能得到高度独立的模块。
2软件设计的基本原理
如何衡量软件的独立性呢? 根据模块的外部特征和内部特征,提出了两个定性的度量标准——耦合性和内聚性。一、耦合性(Coupling )
耦合性也称块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
2软件设计的基本原理
模块的耦合性有以下几种类型:
无直接耦合(耦合程度最低)
数据耦合标记耦合控制耦合公共耦合
内容耦合(耦合程度最高)
2软件设计的基本原理
6 种由低到高的耦合类型,为设计软件、划分模块提供了决策准则。提高模块独立性、建立模块间尽可能松散的系
统,是模块化设计的目标。可采取如下措施:
(1)在耦合方式上降低模块间接口的复杂性(包括模块的接口方式、接口信息的结构和数量):接口方式不采用直接引用(内容耦合),而采用调用方式;接口信息通过参数传递且传递信息的结构尽量简单,不用复杂参数结构,参数的个数也不宜太多。
(2)在传递信息类型上尽量使用数据耦合,避免控制耦
合,慎用或有控制地使用公共耦合。
2软件设计的基本原理
二、内聚性(Cohesion )
内聚性也称块内联系,指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高。
2软件设计的基本原理
内聚性有以下几种类型:
偶然内聚(内聚程度最低)
逻辑内聚时间内聚通信内聚顺序内聚
功能内聚(内聚程度最高)
2软件设计的基本原理
耦合性与内聚性是模块独立性的两个定性标准。对软件系
统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
当内聚性与耦合性发生矛盾时,为了提高内聚性而可能使耦合性变差,在这种情况下,建议给予耦合性以更高的重视。
2软件设计的基本原理
3.3.1 软件结构图
软件结构图是软件系统的模块层次结构,反映了整个系统的功能实现。一般采用结构图SC (Structure Chart )来表示软件结构,主要内容有:
(1)模块:用方框表示,并用名字标识该模块,名字应体现该模块的功能。
(2)模块的控制关系:两个模块间用单向箭头或直线连接起来表示它们的控制关系。按照惯例,总是图中位于上方的模块调用下方的模块。
3软件结构准则
(3)模块间的信息传递:模块间还经常用带注释的短箭头表示模块调用过程中来回传递的信息。有时箭头尾部带
空心圆的表示传递的是数据,带实心圆的表示传递的是控制信息。
3软件结构准则
B 学生记录
学号查标询志
记地录址
A 查询成绩
图3.2
(4)两个附加符号:表示模块有选择调用或循环调用。
3软件结构准则
A
B
C T1M
T2T3
(a )
(b )
(5)结构图的形态特征。结构图的形态特征包括:①深度:指结构图控制的层次/模块的层数。②宽度:指一层中最大的模块个数。
③扇出:一个模块直接下属模块的个数。④扇入:指一个模块直接上属模块的个数。
3软件结构准则
3软件结构准则
宽 度
扇出
D
A
B
C
M
T
扇入
深度
(6)画结构图应注意的事项:
①同一名字的模块在结构图中仅出现一次。②调用关系只能从上到下。
③不严格表示模块的调用次序,习惯上从左到右。有时为了减少连线的交叉,适当地调整同一层模块左右位置,以保持结构图的清晰性。
3软件结构准则
3.3.2 软件结构设计优化准则
软件概要设计的主要任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计的原理改进软件设计,并软件结构的设计优化。
1、模块独立性准则
划分模块时,尽量做到高内聚,低耦合,保持模块相对独
立性,并以此原则优化初始的软件结构。
3软件结构准则
若干模块之间耦合强度过高,每个模块内功能不复杂,可进行合并;多个相关模块,应分析其功能,消去重复功能。
2、控制范围与作用范围之间的准则
一个模块的作用范围应在其控制范围之内,且条件判定所
在的模块应与受其影响的模块在层次上尽量靠近。一个模块的作用范围指受该模块内一个判定影响的所有模
块的集合。
一个模块的控制范围指模块本身以及其所有下属模块(直
接或间接从属于它的模块)的集合。
3软件结构准则
3、软件结构的形态特征准则
软件结构的深度、宽度、扇入及扇出应适当。
深度能粗略地反映系统的规模和复杂程度,宽度也能反映系统的复杂情况。一个模块的扇出太多,说明本模块过分
复杂,缺少中间层。单一功能模块的扇入数大比较好,说明本模块为上层几个模块共享的公用模块,重用率高。软件结构从形态上看,应是顶层扇出数较高一些,中间层扇出数较低一些,底层扇入数较高一些。
3软件结构准则
4、模块的大小准则
在考虑模块的独立性同时,为了增加可理解性,模块的大小最好在50-150条语句左右,可以用1-2页打印纸打印,便于人们阅读与研究。
5、模块的接口准则
模块的接口要简单、清晰以及含义明确,便于理解,易于实现、测试与维护。
3软件结构准则
3.3.3 表示软件结构的HIPO 图
HIPO (Hierarchy Plus Input/Processing/Output )图是表示软件系统结构的工具,既可以描述软件的层次结构(H 图/层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况(IPO 图)。
3软件结构准则
3.4.1 详细设计的基本任务
1、算法设计:用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。
2、数据结构设计:对于需求分析、概要设计确定的概念
性的数据类型进行确切的定义。
3、物理设计:对数据库进行物理设计,即确定数据库的物理结构。物理结构主要指数据库的存储记录格式、存储记录安排和存储方法,这些都依赖于具体所使用的数据库系统。
4软件详细设计
4、根据软件系统的类型,还可能要进行以下设计:(1)代码设计:为了提高数据的输入、分类、存储及检索等操作的效率以及节约内存空间,对数据库中的某些数据项的值要进行代码设计。(2)输入/输出格式设计。
(3)人机对话设计:对于一个实时系统,用户要与计算机频繁对话,因此要进行对话方式、内容及格式的具体设计。
4软件详细设计
5、编写详细设计说明书,主要内容:
(1)引言:包括编写目的、背景、定义、参考资料。(2)程序系统的组织结构。
(3)程序1(标识符)设计说明:包括功能、性能、输入、输出、算法、流程逻辑、接口。(4)程序2(标识符)设计说明。
(5)程序N (标识符)设计说明。6、评审
4软件详细设计
3.4.2 详细设计方法
处理过程设计中采用的典型方法是结构化程序设计(SP )方法。
1、采用自顶向下、逐步求精的程序设计方法
在需求分析、概要设计中都采用了自顶向下、逐层细化的方法。使用“抽象”这个手段,上层对问题、模块和数据抽象,下层则进一步分解,进入另一个抽象层次。在详细设计中,对于某个模块内部的处理过程仍可逐步求精,降低处理细节的复杂度。
4软件详细设计
2、使用三种基本控制结构构造程序对一个模块可用下面三种方式分解:
(1)用顺序方式对过程分解,确定各部分的执行顺序。(2)用选择方式对过程分解,确定某个部分的执行条件。(3)用循环方式对过程分解,确定某个部分进行重复的开始和结束的条件。3、主程序员的组织形式
采用以一个主程序员、一个后备程序员和一个程序管理员三人为核心,再加上一些专家、其他技术人员组成小组。
4软件详细设计
3.5.1 程序流程图又称程序框图
是历史最悠久、使用最广泛的一种描述程序逻辑结构的工具,流程图的优点是直观清晰、易于使用,是开发者普遍采用的工具。但是它有如下严重缺点:
(1)可以随心所欲地画控制流程线的流向,容易造成非结构化的程序结构。
(2)流程图不能反映逐步求精的过程,往往反映的是最
后的结果。
(3)不易表示数据结构。
5软件详细设计表示法
3.5.2 PAD 图
PAD (Problem Analysis Diagram )图/问题分析图是一种算法描述工具,是一种由左往右展开的二维树型结构。PAD 图的优点如下:
(1)清晰地反映了程序的层次结构。图中的竖线为程序的层次线,最左边竖线是程序的主线,其后一层一层展开。(2)支持逐步求精的设计方法,左边层次中的内容可以抽象,然后由左到右逐步细化。
5软件详细设计表示法
2.5.3 过程设计语言
过程设计语言PDL(Process Design Language)是一种用于描述模块算法设计和处理细节的语言,它一般分为内外两层语法,外层语法应符合一般程序设计语言常用的语法规则,而内层语法则用一些简单的句子、短语和通用的数学符号来描述程序应执行的功能。
5软件详细设计表示法
第四章软件编码
程序设计风格指一个人编制程序时所表现出来的特点、习惯及逻辑思路等。
1、源程序文档化
源程序文档化的原则为:
(1)标识符应按意取名。若是几个单词组成的标识符,每个单词第一个字母用大写,或者之间用下划线分开,这便于理解。但名字也不是越长越好,必要时用缩写名字。(2)程序应加注释。注释是程序员与读者之间通信的重要工具,主要说明程序的功能。注释分序言性注释和功能性注释。
程序设计风格
2、数据说明,指导原则:
(1)数据说明顺序应规范,如按常量说明、类型说明、全程量说明及局部量说明顺序;(2)一个语句说明多个变量时,各变量名按字典序排列;(3)对复杂数据结构,要加注释,说明在程序实现时的特点。
3、语句构造,构造的原则:
简单直接,不要使代码复杂化;不要一行多个语句;不同层次的语句采用缩进形式;避免复杂的判定条件,避免多重的循环嵌套;表达式中使用括号提高运算次序清晰度。
程序设计风格
4、输入和输出,考虑原则:
输入操作步骤和输入格式尽量简单;检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息;输入一批数据时使用数据或文件结束标志,而不要用计数来控制;交互式输入时提供可用的选择和边界值;当程序设计语言有严格的格式要求时,保持输入格式的一致性;输出数据表格化、图形化。
5. 效率:指处理机时间和存储空间的使用。
程序设计风格
第五章软件测试5.1.1 软件测试的目的
对软件测试的目的有以下观点:
(1)软件测试是为了发现错误而执行程序的过程。
(2)一个好的测试用例能够发现至今尚未发现的错误。
(3)一个成功的测试是发现了至今尚未发现的错误的测
试。
1软件测试概述
5.2.1 静态测试与动态测试
1、静态测试
静态测试是指被测试程序不在机器上运行,而是采用人工
检测和计算机辅助静态分析的手段对程序进行检测。
2、动态测试
动态测试指通过运行程序发现错误,一般意义上的测试大
多是指动态测试。测试任何产品,一般有两种方法:一是
测试产品的功能,二是测试产品内部结构及处理过程。对
软件产品进行动态测试时,也用这两种方法,分别称为黑
盒测试法和白盒测试法。
2测试方法
5.2.2 黑盒测试法与白盒测试法
1、黑盒法
把被测试对象看成一个黑盒子,测试人员完全不考虑程序
的内部结构和处理过程,只在软件的接口处进行测试,依
据需求说明书,检查程序是否满足功能要求。黑盒测试又
称为功能测试或数据驱动测试。
黑盒测试主要发现以下错误:是否有不正确或遗漏了的功
能;在接口上,能否正确地接受输入数据,能否产生正确
的输出信息;访问外部信息是否有错;性能上是否满足要
求等。
2测试方法
2、白盒法
该方法把测试对象看作一个打开的盒子,测试人员须了解
程序的内部结构和处理过程,通过对程序中尽可能多的逻
辑路径进行测试,检验内部控制结构和数据结构是否有错,
实际的运行状态与预期的状态是否一致。
黑盒法和白盒法都不能使测试达到彻底。为了用有限的测
试发现更多的错误,需精心设计测试用例。黑盒法、白盒
法是设计测试用例的基本策略,每一种方法对应着多种设
计测试用例的技术,每种技术可达到一定的软件质量标准
要求。
2测试方法
5.3.1 白盒技术
白盒测试是结构测试,被测对象基本上是源程序,以程序
的内部逻辑结构为基础设计测试用例。
追求程序内部的逻辑结构覆盖程度,当程序中有循环时,
覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆
盖最有代表性的路径的测试用例。
3测试用例的设计
这 6 种覆盖标准比较如下:
3测试用例的设计
语句覆盖发现错误能力最弱;判定覆盖包含了语句覆盖;
条件覆盖对每一条件进行单独检查,一般情况它的检错能
力较判定覆盖强,但有时达不到判定覆盖的要求;判定/
条件覆盖包含了判定覆盖和条件覆盖的要求;条件组合覆
盖发现错误能力较强,凡满足其标准的测试用例,也必然
满足前4种覆盖标准。
3测试用例的设计
5.3.2 黑盒技术
黑盒测试是功能测试,设计测试用例时,需要研究需求说
明和概要设计说明中有关程序功能或输入、输出之间的关
系等信息,从而与测试后的结果进行分析比较。
用黑盒技术设计测试用例的方法一般有4种,但没有一种
方法能提供一组完整的测试用例,以检查程序的全部功能,
在实际测试中应该把各种方法结合起来使用。
3测试用例的设计
1、等价类划分
等价类划分将输入数据域按有效/无效(合理/不合理)划
分为若干个等价类,测试每个等价类的代表值就等于对该
类的其它值的测试。
(1)划分等价类
从程序的功能说明(需求说明书)中找出每个输入条件,
将每个输入条件划分为两个/多个等价类。
合理等价类是指各种正确的输入数据,不合理的等价类是
其它错误的输入数据。
3测试用例的设计
(2)确定测试用例
根据已划分的等价类,按以下步骤设计测试用例:
为每一个等价类编号。
设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的
合理等价类。重复这步,直到所有合理等价类被测试用例
覆盖。
设计一个测试用例,使其只覆盖一个不合理等价类。重复
这一步,直到所有不合理等价类被覆盖。
3测试用例的设计
如某一报表处理系统,要求用户输入处理报表的日期。
假设日期限制在1990年1月至1999年12月,即系统只能对
该段时期内的报表进行处理。如果用户输入的日期不在此
范围内,则显示输入错误信息。该系统规定日期由年、月
的6位数字字符组成,前4位代表年,后两位代表月。现用
等价类划分法设计测试用例,来测试程序的“日期检查功
能”。
3测试用例的设计
划分等价类并编号: 划分成3个有效等价类,7个无效等价
类。
3测试用例的设计
为合理等价类设计测试用例,对于表中编号为1、5、8对应的3个合理等价类,用一个测试用例覆盖(例如“199905”)。
为每一个不合理等价类至少设计一个测试用例:
3测试用例的设计
测试数据
期望结果
覆盖范围
99MAY 输入无效219995 输入无效31999005 输入无效
4
198912 输入无效6200001 输入无效7199900 输入无效9199913 输入无效
10
3测试用例的设计
2、边界值分析
程序往往在处理边界情况时发生错误,边界情况指输入等价类和输出等价类边界上的情况。检查边界情况的测试用例是比较高效的,可以查出更多的错误。3、错误推测
在测试程序时,人们根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。
3测试用例的设计
4、因果图
因果图能有效地检测输入条件的各种组合可能会引起的错误。基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。
3测试用例的设计
5、综合策略
(1)在任何情况下都应使用边界值分析法,用这种方法
设计的用例暴露程序错误能力强。
(2)必要时用等价类划分方法补充一些测试用例。(3)再用错误推测法补充测试用例。
(4)检查上述测试用例的逻辑覆盖程度,如未满足所要求的覆盖标准,再增加例子。
(5)如果需求说明中含有输入条件的组合情况,则一开始就可使用因果图法。
3测试用例的设计
5.4.1 软件测试过程中的信息软件测试时需要以下三类信息:
(1)软件配置:指需求说明书、设计说明书和源程序等。(2)测试配置:指测试方案、测试用例和测试驱动程序等。
(3)测试工具:指计算机辅助测试的有关工具。
4测试过程
5.4.2 软件测试的步骤及与各开发阶段的关系
软件产品在交付使用之前要经过单元测试、集成测试、确认测试和系统测试。
4测试过程
单元测试单元测试
单元测试
集成测试
确认测试
系统测试
已集成软件
设计信息软件需求确认软件
其他系统元素可交付软件
模块模块
模块
…
5.4.3 单元测试1、测试的内容:
(1)模块接口;(2)局部数据结构;(3)重要的执行路径;(4)错误处理;(5)边界条件。
2、测试的方法
由于被测试的模块往往不是独立的程序,处于整个软件结构的某一层位置上,被其他模块调用或调用其他模块,其本身不能进行单独运行。在单元测试时,需要为被测模块设计驱动模块(driver )和桩(stub )模块。
4测试过程
5.4.4 集成测试1、集成测试的目的
将所有模块按照设计要求组装成一个完整的系统而进行的测试,也称组装测试或联合测试。
2、集成测试的方法
(1)非渐增式测试:首先对每个模块分别进行单元测试,然后再把所有的模块按设计要求组装在一起进行的测试。(2)渐增式测试:逐个把未经过测试的模块组装到已经
测试过的模块上去,进行集成测试。
4测试过程
5.4.5 确认测试
确认测试/有效性测试:任务是检查软件的功能与性能是
否与需求说明书中确定的指标相符合。1、进行确认测试
确认测试一般是在模拟环境下运用黑盒测试方法,由专门
测试人员和用户参加的测试。测试结束后,应写出测试分析报告。2、软件配置审查
软件配置审查的任务是检查软件的所有文档资料的完整性、
正确性。
4测试过程
调试的目的
软件测试的目的是尽可能多地发现程序中的错误, 而调试则是在进行了成功的测试之后才开始的工作。
调试的目的是确定错误的原因和位置,并改正错误,因此
调试也称为纠错。
5调试
第六章软件维护
1、校正性维护
为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护, 校正性维护占整个维护工作的21%。
2、适应性维护
计算机硬件和软件环境在不断发生变化,数据环境也在不断发生变化,为了使应用软件适应这种变化而修改软件的过程称为适应性维护。这种维护活动要占整个维护活动的25%。
1 软件维护的内容
3、完善性维护
在软件运行时期,用户往往会对软件提出新的功能要求与性能要求,为了适应这些变化,增加软件功能、增强软件性能和提高软件运行效率而进行的维护活动称为完善性维护。这种维护性活动数量较大,占整个维护活动的50%。4、预防性维护
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。在整个维护活动中,预防性维护占很小的比例,只占4%。
1 软件维护的内容
6.2.1 非结构化维护和结构化维护
若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。6.2.2
维护的困难性
软件维护的困难性主要是由于软件需求分析和开发方法的缺陷造成的。软件生存周期中的开发阶段没有严格而又科学的管理和规划,就会引起软件运行时的维护困难。
2 软件维护的特点
6.3.1
维护的流程
1、制定维护申请报告
所有软件维护申请报告或软件问题报告是维护阶段的一种文档,由申请维护的用户填写;在软件维护组织内部还要
制定一份软件修改报告,是维护阶段的另一种文档。2、维护过程
维护申请经评审需要维护,则实施维护。3、维护的复审
在维护任务完成后,要对维护任务进行复审。
3软件维护的实施
6.3.2 维护的副作用
因修改软件而造成的错误或其他不希望出现的情况称为维护的副作用。1、编码副作用
在使用程序设计语言修改源代码时可能引入错误:删除或修改子程序、标号和标识符;改变程序代码的时序关系,改变占用存储的大小,改变逻辑运算符;修改文件的打开或关闭;改进程序的执行效率;把设计上的改变翻译成代码的改变;为边界条件的逻辑测试做出改变。
3软件维护的实施
2、数据副作用
数据副作用是修改软件数据结构导致的结果:重新定义局部或全局的常量,重新定义记录或文件格式;增加或减少一个数组或高层数据结构的大小;修改全局或公共数据;重新初始化控制标志或指针;重新排列输入/输出或子程序的参数。3、文档副作用
如果对可执行软件的修改没有反映在文档中,就会产生文档副作用。必须在软件交付之前对整个软件配置进行评审,
3软件维护的实施
6.4.1 可维护性定义
软件可维护性是指软件能够被理解、校正、适应及增强功能的容易程度。
软件的可维护性、可使用性和可靠性是衡量软件质量的几个主要特性,也是用户十分关心的几个问题。
软件的可维护性是软件开发阶段的关键目标。软件可维护性可用7个质量特性来衡量:可理解性、可测试性、可修
改性、可靠性、可移植性、可使用性和效率。
4软件可维护性
6.4.2提高可维护性的方法
1、建立明确的软件质量目标
为保证程序的可维护性,应该在一定程度上满足可维护性的各个特性,但各个特性的重要性随着程序用途的不同或计算机环境的不同而改变。因此明确软件所追求的质量目标对软件的质量和生存周期的费用将产生很大的影响。
2、使用先进的软件开发技术和工具
利用先进的软件开发技术能大大提高软件质量和减少软件费用。
4软件可维护性
3、建立明确的质量保证
质量保证是指为提高软件质量所做的各种检查工作,不仅在软件开发的各阶段中得到了广泛应用,而且在软件维护中也是一个非常重要的工具。
4、选择可维护的语言
程序设计语言的选择对维护影响很大。低级语言很难理解,很难掌握,因而很难维护。一般来说高级语言比低级语言更容易理解, 在高级语言中,一些语言可能比另一些语言更容易理解。
4软件可维护性
5、改进程序的文档
(1)程序文档:包括源代码的注释、设计文档、系统流
程图、程序流程图和交叉引用表等。
(2)用户文档:通常是指用户手册。
(3)操作文档:包括操作员手册、运行记录和备用文件
目录等。
(4)数据文档:是程序数据部分的说明,它由数据模型
和数据词典组成。
4软件可维护性
(5)历史文档
历史文档有三类:系统开发日志、出错历史和系统维护日志。了解系统如何开发和系统如何维护的历史对维护程序员来说是非常有用的信息,因为系统开发者和维护者是分开的。利用历史文档可以简化维护工作,例如理解原设计意图,指导维护员如何修改代码而不破坏系统的完整性。
4软件可维护性
第七章增量模型7.1.1 瀑布模型的局限性
瀑布模型是一种线性顺序模型,存在着比较明显的缺点,
各阶段之间存在着严格的顺序性和依赖性,特别是强调预
先定义需求的重要性,而实际项目很少遵循这种线性顺序
进行的。
7.1.2增量模型的基本思想
增量模型和瀑布模型之间的本质区别是:瀑布模型属于整
体开发模型;而增量模型属于非整体开发模型,推迟某些
阶段或所有阶段中的细节,从而较早地产生工作软件。
增量模型
7.1.3 增量模型的分类
根据增量的方式和形式,增量模型有渐增模型和原型模型。
1、渐增模型
是瀑布模型的变种,有两类渐增模型:
(1)增量构造模型:在瀑布模型的基础上,对一些阶段
进行整体开发,对另一些阶段进行增量开发。
(2)演化提交模型:在瀑布模型的基础上,所有阶段都
进行增量开发,即不仅是增量开发,也是增量提交。
增量模型
2、原型模型/快速原型模型
是增量模型的另一种形式,在开发真实系统之前,构造一
个原型,在原型上逐渐完成整个系统的开发工作。根据原
型作用分为三类原型模型:
(1)探索型原型:把原型用于开发的需求分析阶段,目
的是弄清用户的需求,确定所期望的特性,并探索各种方
案的可行性。
增量模型
(2)实验型原型:主要用于设计阶段,考核实现方案是
否合适,能否实现。对于一个大型系统,若对设计方案心
中没有把握时,可通过这种原型来证实设计方案的正确性。
(3)演化型原型:主要用于及早向用户提交一个原型系
统,该原型系统包含系统的框架或系统的主要功能,在得
到用户的认可后,将原型系统不断扩充演变为最终的软件
系统。它将原型的思想扩展到软件开发的全过程。
增量模型
第八章结构化方法
1、结构化方法
结构化方法遵循的原理是自顶向下、逐步求精,使用的工
具有数据流图(DFD)、数据字典、判定表、判定树和结
构化语言等。
结构化方法是从分析、设计到实现都使用结构化思想的软
件开发方法,由结构化分析SA(Structured Analysis)、
结构化设计SD(Structured Design )和结构化程序设计
SP(Structured Pergramming)组成。
1概述
2、发展历程
在结构化方法的发展历程上,是随着SP方法的提出、SD方
法的出现直至SA方法提出才逐渐形成的。
3、基本思想:总的指导思想是自顶向下、逐步求精;两
个基本原则是抽象与分解。
4、特点:使用最早的开发方法,使用时间也最长;应用
最广,特别适合于数据处理;相应的支持工具多,发展较
为成熟。
1概述
5、优点:简单、实用;适合于瀑布模型,易为开发者掌
握;成功率较高;特别适合于数据处理领域中的应用,
对其他领域的应用也基本适用。
6、存在问题:对于规模大的项目,特别复杂的应用不太
适应;难于解决软件重用的问题;难于适应需求的变化;
难于彻底解决维护问题。
1概述
SA 是一种建模活动,根据软件内部数据传递、变换的关
系,自顶向下逐层分解,描绘出满足功能要求的软件模型。
8.2.1自项向下逐层分解的分析策略
面对一个复杂的问题,采取的策略往往是分解,把一个复
杂的问题划分成若干小问题,然后再分别解决,将问题的
复杂性降低到人可以掌握的程度。
分解可分层进行,先考虑问题最本质的方面,形成问题的
高层概念;然后再逐层添加细节,在分层过程中采用不同
程度的“抽象”级别;最高层的问题最抽象,低层的问
题较为具体。
2结构化分析
2结构化分析
X
1
2
3
顶层
0层
3.1
3.2
3.3
2.1
2.2
1.1
1.2
1.3
1层
顶层抽象地描述了整个系统,底层具体地画出了系统的每
一个细节,中间层是从抽象到具体的逐步过渡;这种层次
分解使分析人员分析问题时不至于一下子陷入细节,逐步
地去了解更多的细节,如在顶层,只考虑系统外部的输入
和输出,其他各层反映系统内部情况。
2结构化分析
8.2.2 描述工具
SA方法利用图形等半形式化的描述方式表达需求,简明易
懂。描述工具有以下几种:
(1)数据流图:描述系统的分解,即描述系统由哪几部
分组成,各部分之间的联系等。
(2)数据字典:定义了数据流图中的数据和加工,是数
据流条目、数据存储条目、数据项条目和基本加工条目的
汇集。
2结构化分析
(3)描述加工逻辑的结构化语言、判定表及判定树:详细描述数据流图中不能被再分解的每一个基本加工的处理
逻辑。
8.2.3 SA 分析步骤
1、建立当前系统的物理模型
当前系统/现行系统指目前正在运行的系统(需要改进的正在运行的软件系统/人工的处理系统)。了解当前系统的工作过程,收集资料、文件、数据及报表等,并进行描
述(如画系统流程图)。该模型包含了许多具体因素,反映现实世界的实际情况。
2结构化分析
2、抽象出当前系统的逻辑模型
物理模型反映了系统“怎么做”的具体实现,去掉物理模型中非本质的因素,抽取出本质的因素,形成当前系统的逻辑模型,反映了当前系统“做什么”的功能。3、建立目标系统的逻辑模型
目标系统指待开发的新系统。分析、比较目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型。4、作进一步补充和优化。
2结构化分析
数据流图DFD (Data Flow Diagram )是SA 方法中用于表示系统逻辑模型的一种工具,以图形的方式描绘数据在系统
中流动和处理的过程。是一种功能模型。8.3.1
基本图形符号
→:箭头,表示数据流。○:圆或椭圆,表示加工。=:双杠,表示数据存储。
□:方框,表示数据的源点或终点。
3数据流图
8.3.2 画数据流图
按照问题的层次结构进行逐步分解,绘出一套分层的数据流图。
1、画系统的输入输出
画系统的输入输出/顶层数据流图:顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系,顶层图只有一张。
3数据流图
2、画系统内部
画系统内部/下层数据流图:采用自顶向下、由外向内的原则进行分解。一般先根据当前系统工作分组情况,按新系统应有的外部功能,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。
画更下层数据流图时,则分解上层图中的加工,直到每一个加工足够简单,不能再分解为止。不再分解的加工称为
基本加工。
3数据流图
数据字典DD 是用来定义数据流图中各个成分的具体含义的数据集合。
数据字典有4类条目:数据流、数据项、数据存储及基本加工。数据项是组成数据流和数据存储的最小元素。
4数据字典
8.5.1
结构化语言
结构化语言是介于自然语言(英语或汉语)和形式语言之间的一种半形式语言。它的结构分成外层和内层两层。8.5.2 判定表
当加工的动作依赖于多个逻辑条件的取值时,用结构化语言很难描述清楚加工逻辑,而判定表比较适合描述复杂条件组合与相应动作之间的对应关系。
判定表由4部分组成,用双线分割开 4 个区域。
5加工逻辑描述
构造判定表的步骤:(1)提取问题中的条件;
(2)标出条件的取值,计算所有条件的组合数;(3)提取可能采取的动作或措施;(4)制作判定表;(5)完善判定表。
5加工逻辑描述
如某数据流图中有一个“确定保险类别”的加工,指的是申请汽车驾驶保险时,要根据申请者的情况确定不同的保险类别。加工逻辑为: 如果申请者的年龄在21岁以下,要额外收费;如果申请者是21岁以上并是26岁以下的女性,适用于A 类保险;如果申请者是26岁以下的已婚男性,或者是26岁以上的男性,适用于B 类保险;如果申请者是21岁以下的女性或是26岁以下的单身男性,适用于C 类保险。除此之外的其他申请者都适用于A 类保险。
5加工逻辑描述
5加工逻辑描述
5加工逻辑描述
8.5.3 判定树
判定树是判定表的变形,它比判定表更直观,且易于理解和使用。
5加工逻辑描述
5加工逻辑描述
确定保险类别
C 类保险且额外收费B 类保险且额外收费
B 类保险
C 类保险B 类保险
C 类保险且额外收费A 类保险未婚
已婚
已婚
未婚
年龄≤21岁
21岁<年龄≤26
年龄>26岁年龄≤21岁
年龄>21岁
男性
女性
8.6.1 数据流的类型
要把数据流图(DFD )转换成软件结构,首先必须研究DFD 的类型。各种软件系统,不论DFD 如何庞大与复杂,一般可分为变换型数据流图和事务型数据流图两类。1、变换型数据流图
变换型的DFD 是由输入、变换/处理和输出三部分组成,虚线为标出的流界。
6结构化设计
6结构化设计
变换中心
输出流
输入流
物理输入
逻辑输入
逻辑输出
物理输出
2、事务型的数据流图
若某个加工将它的输入流分离成许多发散的数据流,形成许多平行的加工路径,并根据输入的值选择其中一个路径来执行,这种特征的DFD 称为事务型的数据流图,这个加
工称为事务处理中心。
6结构化设计
6结构化设计
T
输入流
事务处理中心
加工路径
…
8.6.2 设计过程
(1)精化DFD : 仔细研究分析DFD ,并参照数据字典,认真理解其中的有关元素,检查有无遗漏或不合理之处,进行必要的修改。
(2)确定DFD 类型: 对变换型,确定变换中心和逻辑输入、逻辑输出的界线,映射为变换结构的顶层和第一层;对事务型,确定事务中心和加工路径,映射为事务结构的顶层
和第一层。
(3)分解上层模块,设计中下层模块结构。
6结构化设计
(4)给出设计约束或限制: 如数据类型和格式的限制,内存容量的限制,时间的限制,数据的边界值,个别模块
的特殊要求等。
(5)进行设计评审:软件设计阶段,不可避免地会引入人为的错误,如果不及时纠正,就会传播到开发的后续阶
段中去,并在后续阶段引入更多的错误。
设计文档完成以后,就可进行评审,有效的评审可以显著地降低后续开发阶段和维护阶段的费用。在评审中应着重
评审软件需求是否得到满足,即软件结构的质量、接口说明、数据结构说明、实现和测试的可行性以及可维护性。
6结构化设计
第九章面向对象方法
9.1.1 面向对象程序设计模式1、程序设计基本模式
程序设计模式是人们在程序设计时所采用的基本方式模型,它以一类程序设计语言为基础,体现了该类语言的主要特
点,以支持应用领域所希望的设计风格。
程序设计模式包括:过程程序设计、结构化程序设计、函数程序设计、逻辑程序设计。
1面向对象基础
2、面向对象程序设计模式的机制(1)基本特征
面向对象的程序设计将计算看作是一个系统的开发过程,系统由对象组成,经历一连串的状态变化以完成计算任务。面向对象程序设计对体系结构和支撑软件系统没有突变要求,因而不存在难以应用现有资源的问题。(2)基础构件
面向对象程序的基础构件是对象和类。对象是一种不依赖于外界的模块,包含数据和为方法。具有相同特性(属性和行为)和共同用途的一组对象抽象成类。
1面向对象基础
(3)基本机制
面向对象程序设计的基本机制是继承性、消息和方法,还有在特定方面提供更为专门的、灵活的机制, 如重置、多态等。
继承机制体现了面向对象程序设计的原则:程序员在构造程序时,不必从零开始,只需对差别进行程序设计。
1面向对象基础
9.1.2 面向对象的基本概念
1、对象:是人们要研究的任何事物,从简单的整数到复
杂的飞机等均可看作对象;对象可以是具体事物,也可以是抽象的规则、计划、事件等。对象类型有如下4种:
(1)有形实体(看得见、摸得着的实物),如计算机、机房、书等。
(2)人/组织所起的作用,如医生、教师学生等;(3)在特定时间所发生的事件,如飞行、演出、事故和开会等;
1面向对象基础
(4)厂商对产品性能的说明,如产品名字、型号及各种性能指标等。
对象不仅能表示结构化的数据,而且能表示抽象的事件、规则以及复杂的工程实体。因此,对象具有很强的表达能
力和描述功能。
对象具有状态,一个对象用数据值来描述它的状态,如某个具体的学生张三具有姓名、年龄、性别、家庭地址、学
历及所在学校等数据值。
1面向对象基础
对象具有操作,用于改变对象的状态,对象及其操作就是对象的行为。如某个工人经过“增加工资”的操作,工资额就发生变化。
对象实现了数据和操作的封装;对象内的数据具有自己的
操作,从而可灵活地专门描述对象的独特行为,具有较强的独立性和自治性;其内部状态不受或很少受外界的影响,有很好的模块化特点。
对象为软件重用奠定了坚实的基础。
1面向对象基础
2、类
具有相同或相似性质对象的抽象就是类。对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类的关系:若干类之间有一定的结构关系,通常有:
(1)一般具体结构称为分类结构/“或”关系,是“is a”关系。例如汽车和交通工具都是类,它们之间的关系是一种“或”关系,汽车“是一种”交通工具。类的这种
层次结构可用来描述现实世界中的一般化的抽象关系。
1面向对象基础
通常越在上层的类越具有一般性和共性,越在下层的类越具体、越细化。
(2)整体成员结构称为组装结构/“与”关系,是“has a”关系。例如汽车和发动机都是类,它们之间是一种
“与”关系,汽车“有一个”发动机。类的这种层次关系可用来描述现实世界中的类的组成的抽象关系。上层的类具有整体性,下层的类具有成员性。在类的结构关系中,
通常上层类称为父类或超类,下层类称为子类。
1面向对象基础
3、消息和方法
对象之间进行通信的一种构造叫做消息。
这种通信机制称为消息传递。发送一条消息至少要包含说明接收消息的对象名、发送给该对象的消息名(对象名.
方法名),一般还要对参数加以说明,参数可以是只有认识消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
1面向对象基础
消息传递是从外部使得一个对象具有某种主动数据的行为。对于一个系统来说,使用消息传递的方法可更好地利用对
象的分离功能。
类中操作的实现过程叫做方法,一个方法有方法名、参数及方法体。当一个对象接收一条消息后,它所包含的方法决定对象怎样动作。
由于对象的内部对用户是密封的,所以消息只是对象同外
部世界连接的管道。对象内部的数据只能被自己的方法所操纵。
1面向对象基础
9.1.4 面向对象的特征1、对象唯一性
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象;在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识;对象建立时由系统授予新对象唯一的对象标识符。
1面向对象基础
2、分类性
分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是一种抽象,反映了与应用有
关的重要性质。每个类是个体对象的可能无限集合,每个对象是相关类的实例。3、继承性
继承性是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。
在类层次中,子类只继承一个父类的数据结构和方法,称
为单重继承; 在类层次中,子类继承了多个父类的数据结
构和方法,称为多重继承。
1面向对象基础
4、多态性/多形性
多态性是指相同的操作或函数、过程作用于多种类型的对象上并获得不同结果。不同的对象,收到同一消息产生完全不同的结果,这种现象称为多态性。
如MOVE 操作,可以是窗口对象的移动操作,也可以是国际象棋棋子移动的操作。
多态性允许每个对象以适合自身的方式去响应共同的消息。这就增强了操作的透明性、可理解性和可维护性。用户不必为相同的功能操作作用于不同类型的对象而费心去识别。
1面向对象基础
9.1.5 面向对象的要素1、抽象
抽象是指强调实体的本质、内在的属性,而忽略一些无关紧要的属性,运用继承性和多态性强化了这种能力。
面向对象技术与其它技术相比更具抽象性:对象具有极强的抽象表达能力,可表示一切事物,既可表达结构化数据,也可表达非结构化数据(如图形、声音、规则);类实现
了对象的数据和行为的抽象,是对象的共性的抽象。
1面向对象基础
2、封装性(信息隐蔽)
封装性是保证软件部件具有优良的模块性的基础,使得每个软件部件都有友好的界面接口,其内部实现与外部可访问性分离。
对象是封装的最基本单位。面向对象的类是封装良好的模块。
面向对象基础
3、共享性
(1)同类中对象的共享:同一个类中的对象有着相同数据结构和相同的行为特征,有结构、行为特征的共享关系。(2)在同应用中的共享:在同一应用的类层次结构中,
存在继承关系的各相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。
(3)在不同应用中的共享:面向对象不仅允许在同一应
用中共享信息,也可通过类库这种机制和结构来实现不同应用中的信息共享。
1面向对象基础
4、强调对象结构而不是程序结构
面向对象技术强调对象是什么,而不强调对象是如何被使用,对象的使用依赖于应用的细节,并且在开发中不断变化。当需求变化时,对象的性质比对象的使用方式更为稳定,因此从长远看,在对象结构上建立的软件系统将更为稳定。
面向对象技术特别强调数据结构,对程序结构的强调比传
统的功能分解方法要少得多。
1面向对象基础
9.2.1 Booch 方法
Booch 最先描述了面向对象的软件开发的基础问题,认为
软件开发是一个螺旋上升的过程,首先发现应用领域的对象和类,然后确定其含义,找出类之间的关系,说明界面和实现。这些步骤完成之后,又开始发现新的对象和类等。
Booch 方法提出了对象认定的基于词法分析的方法。通过分析正文描述,将其中的名词映射为对象,将其中的动词映射为方法,从而为对象和方法的认定提供了一种简单的策略。Booch 方法为面向对象的分析中的对象认定方法奠定了基础。
2面向对象的开发方法
9.2.2 Coad 方法
Coad 方法是面向对象的开发方法,比较完整而系统地介绍了面向对象的分析和面向对象的设计。
面向对象的分析是用面向对象的方法对目标系统的问题空
间进行理解、分析和反映。通过对象的认定和对象层次的认定,确定问题空间中应存在的对象和对象层次结构。面向对象的设计则是用面向对象的方法,构造目标系统的
解空间,通过对象的认定和对象层次结构的组织,确定解空间中应存在的对象和对象层次结构,并确定外部和主要的数据结构。
2面向对象的开发方法
9.2.3 面向对象的建模和设计方法(OMT 方法)OMT 方法是一种新兴的面向对象开发方法,该方法吸收了面向对象技术的基本的直观映象,通过一整套的符号表示和相应的方法学来系统地反映现实世界的客体。该方法还给出了好的设计与坏的设计的示例及准则,用来帮助软件开发者避免一些常见的易犯的错误。
该方法将面向对象的概念应用于软件生存周期的各个阶段,
并说明了如何在软件开发的整个生存周期中贯穿运用面向对象的概念、方法及技术进行分析、设计和实现。
2面向对象的开发方法
OMT 方法学是组织开发的一种过程,其基础是开发系统的对象模型、动态模型和功能模型,再细化这3种模型,并优化以构成设计。
2面向对象的开发方法
1)对象模型
对象模型表示了静态的、结构化的系统数据性质,描述的是系统的静态结构。使用对象图工具来刻划系统,是分析阶段其他两种模型的核心,是其他两个模型的框架。2)动态模型
动态模型是与时间和变化有关的系统性质,描述了系统的控制结构,表示了瞬时的、行为化的系统控制性质; 该模型关心的是系统的控制、操作的执行顺序; 该模型从对象的事件和状态的角度出发,表现了对象的相互行为。
2面向对象的开发方法
3)功能模型
功能模型描述了系统的所有计算。它指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,而不考虑所计算的次序;功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,数据流图不表示控制信息,控制信息在动态模型中表示;
数据流图也不表示对象中值的组织,这种信息在对象模型中表示。
2面向对象的开发方法
9.3.1 UML 概述1、UML 的形成
自从面向对象建模语言出现以后,面向对象建模语言就从10余种增加到50余种,各有自己的特点,相互之间既有共
同之处,也有差异,用户没有能力区别不同语言之间的差别,很难找到适合于其应用的语言,极大地妨碍了用户之间的交流。在客观上有必要建立统一建模语言。
3统一建模语言UML
2、图形表示
用例图(用于表示系统的功能,并指出各功能的操作者);静态图(类图、对象图及包图,表示系统的静态结构);行为图(状态图和活动图,用于描述系统的动态行为和对象之间的交互关系);交互图(顺序图和合作图,用于描述系统的对象之间的动态合作关系);实现图(构件图和配置图,用于描述系统的物理实现)。
3统一建模语言UML
3、UML 用于软件的开发
UML 是一个建模语言,用于建立软件系统的模型, 适用于系统开发的不同阶段。
(1)用户需求:使用用例图来捕获用户的需求。
(2)系统分析:主要关心问题域中的主要概念,如对象、类以及它们之间的关系等,需要建立系统的静态模型,可用类图来描述。
(3)系统设计:在分析基础上,定义软件系统中的技术细节用到的类,为实现阶段提供更详细的设计说明。
3统一建模语言UML
(4)系统实现:使用面向对象程序设计语言,将设计阶段的类转换成源程序代码,用构件图来描述代码构件的物理结构以及构件之间的关系。用配置图来描述和定义系统中软硬件的物理体系结构。
(5)测试:UML 建立的模型也是测试阶段的依据。可使用类图进行单元测试,可使用构件图、合作图进行集成测试,可使用用例图进行确认测试,以验证测试结果是否满足用户的需求。
3统一建模语言UML
4、UML 的特点
(1)统一了面向对象方法的基本概念。(2)建模能力更强
UML 吸取了不同面向对象方法的长处,溶入了其他面向对象方法的可取之处,UML 的表达能力更强,表示更清晰和一致,建模能力就更强了。(3)独立于开发过程
UML 只是一种建模语言,与具体软件开发过程无关。(4)UML 提出了许多新概念。
3统一建模语言UML
9.3.2 UML 的模型1、用例图
用例图描述了系统的功能需求,它从执行者的角度来理解系统,用于获取系统的需求、规划和控制项目;描述了系
统外部的执行者与系统提供的用例之间的某种联系。用例图着重于从系统外部执行者的角度来描述系统需要提供的功能,指明这些功能的执行者;用例图驱动了需求分析之后的各个阶段的工作。
3统一建模语言UML
在金融贸易系统的用例模型中,有4种执行者(贸易经理、
营销人员、销售人员和记帐系统);基本的用例是“进行交易”,“超越边界”用例就是“进行交易”用例的扩展;在营销人员交易过程中还用到“风险分析”和“交易估价”
两个用例,而这两个用例中都包含有公共的“评价”动作;贸易经理与“设置边界”用例连接;记帐系统是一个外界系统,它需要“更新帐目”。
3统一建模语言UML
3统一建模语言UML
贸易经理
营销人员
记帐系统
销售人员
《使用》
《扩展》
评价
更新帐目
超越边界
进行交易
交易估价风险分析
设置边界
《使用》
2、静态模型(1)类图
类图是面向对象方法的核心,描述了系统中存在的类以及类之间的关系。其本质反映了系统中包含的各种对象的类
型以及对象之间的各种静态关系。类图还描述了类的属性、操作以及对模型中各种成分的约束。类图包含有类、关联和关系等模型元素。
3统一建模语言UML
如一个软件公司有许多部门,分为开发部门和管理部门两
种;每个开发部门开发多个软件产品;每个部门由部门名字唯一确定;该公司有许多员工,分为经理、工作人员和开发人员;开发部门有经理和多个开发人员,管理部门有
经理和多个工作人员;每个开发人员可参加多个开发项目,每个开发项目需要多个开发人员;每位经理可主持多个开发项目。
3统一建模语言UML
3统一建模语言UML
软件产品
开发部门软件公司管理部门员工部门
开发人员经理
工作人员
开发项目
部门名
有
有有有
有有1+
1+1+1+1+1+
1+开发
参加主持
1+
(2)对象图
对象图是类图的一种变形,是类图的一种实例化。一张对象图表示的是与其对应的类图的一个具体实例。(3)包图
包是将许多类组合成为一个更高层次的抽象单位,形成高内聚、低耦合的类的集合。
包图用于描述包中存在的类以及包与包之间的各种关系,是管理复杂系统的若干类以及类结构的有力工具。
3统一建模语言UML
3、动态模型(1)状态图
描述了一个对象在其生存期中的行为,即一个特定对象的所有可能的状态以及由于各种事件发生而引起的状态之间
的转移。状态图的模型元素有状态、状态之间的转移。(2)活动图
活动图既可以描述操作的行为,也可以描述用例和对象内部的工作过程。活动图描述了需要做的活动以及执行这些活动的顺序。
3统一建模语言UML
(3)顺序图
顺序图和合作图都是交互图,主要描述对象之间的动态合作关系以及合作过程中的行为次序。顺序图描述对象之间动态行为的交互关系,着重体现对象之间消息传递的时间顺序。(4)合作图
用于描述相互合作的对象之间的交互关系,更侧重于说明哪些对象之间有消息传递,而不像顺序图那样侧重于在某种特定的情况下对象之间传递消息的时序性上。
3统一建模语言UML
4、实现模型(1)构件图
构件图描述系统中存在的软构件以及它们之间的依赖关系,构件图的元素有构件、依赖关系和界面。
3统一建模语言UML
3统一建模语言UML
可执行程序Main.exe
Main 类Main.obj Main 类Main.cpp 图形库Graphic.dll
Square 类Square.obj
Square 类Square.cpp
Circle 类Circle.o bj Circle 类Circle .cpp
(2)配置图
配置图用来描述系统硬件的物理拓扑结构以及在此结构上执行的软件,即系统运行时刻的结构。配置图可以显示计算结点的拓扑结构和通信路径、结点上执行的软构件、软
构件包含的逻辑单元等。配置图的元素有结点和连接。
3统一建模语言UML
3统一建模语言UML
填写界面
保险单客户PC
保险数据库
保险系统
保险系统配置保险政策
保险用户
保险服务器
《TCP/IP 》
配置
UML 是一种建模语言,而不是一种方法,它独立于过程;在使用UML 建模时,可遵循任何类型的建模过程;UML 的作者给出了一个推荐性的建模过程指导----RUP (Rational Unified Process )。RUP 的特点:
(1)基于构件:通过明确定义接口将软件构件相互连接建造成软件系统。
(2)使用UML :使用UML 制定软件系统的所有蓝图。
4统一软件开发过程
(3)用例驱动:开发过程是沿着一系列从用例得到的工作流进行的。
(4)以系统构架为中心:构架刻画了系统的整体设计。(5)按迭代与增量方式开发。
(6)可剪裁:统一过程是一个框架,可以根据具体情况加以剪裁。
4统一软件开发过程
RUP 利用两维空间来描述建模过程:
在水平轴方向代表时间,显示了过程动态的一面,它用周期、阶段、迭代、里程碑等概念进行描述。RUP 将一个开发周期划分成初始、细化、构造和移交4个阶段;每个阶
段又有若干个次迭代;每次迭代都有一个核心工作流;每个阶段的结果都是一个里程碑(时间上的一个点,此时需作出重要决策)。
4统一软件开发过程
在垂直轴方向代表内容,显示过程静态的一面,它用工人(谁在做)、活动(怎么做)、产品(做什么)、工作流程(什么时间做)等概念进行描述。在RUP 中通过九种核心工作流程(其中六个核心“工程”工作流程,三个核心
“支持”工作流程)把工人和活动划分成不同的逻辑组合。
4统一软件开发过程
4统一软件开发过程
配置管理项目管理环境
商业模型实现测试分析和设计
预备循环
Iter.#1阶段
处理工作流
支持工作流
Iter.#2
Iter.
#n
Iter.#n+1Iter.#n+2
Iter.#m
Iter.#m+1
分布
需求
详细化
提交
初始化
构造
沿时间方向
按照内容组织
第十章软件质量与软件工程管理
10.1.1 概述
Jackson 方法是面向数据结构的设计方法。JSP 方法根据输
入、输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构,而不是软件的体系结构,因此该方法适用于详细设计阶段。
面向数据流的设计(SD 方法)和面向数据结构的设计
(JSP 方法)的共同点都是数据信息驱动的,都试图将数据表示转换成软件表示,不同之处在于面向数据结构的设计不利用数据流图,而根据数据结构的表示来设计。
1Jackson 方法
10.1.2
Jackson 图
Jackson 图是JSP 方法的描述工具,在分析、确定问题的数据结构后,用Jackson 图来描绘问题的数据结构。1、Jackson 图的表示
虽然程序中实际使用的数据结构种类繁多,但是它们的数据元素彼此间的逻辑关系却只有顺序、选择和重复三种,
因此,逻辑数据结构也只有这三种。
1Jackson 方法
顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次;选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个;重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成
1Jackson 方法
(b )
A
C D
B
(a )
A
C °
D °
B °
A
B *(c )
10.2.1 软件质量概述1、软件质量的定义
软件质量是贯穿软件生存期的一个极为重要的问题,关于软件质量的定义有多种说法,从实际应用来说,软件质量
定义如下:
(1)与所确定的功能和性能需求的一致性。
(2)与所成文的开发标准的一致性。
(3)与所有专业开发的软件所期望的隐含特性的一致性。
2软件质量
2、影响软件质量的因素
影响软件质量的因素可以分为如下两大类:(1)可以直接度量的因素,如单位时间内千行代码(KLOC )中所产生的错误数。
(2)只能间接度量的因素,如可用性或可维护性。在软件开发和维护过程中,为了定量地评价软件质量,
必须对软件质量特性进行度量,以测定软件具有要求质量
特性的程度。
2软件质量
3、软件质量保证
软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量活动。质量保证策略的发展可以分为3个阶段:
(1)以检测为重:产品制成后检测,判断产品的质量。(2)以过程管理为重:把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。
(3) 以新产品开发为重:在产品开发设计阶段采取有力措施,以便消灭由于设计原因而产生的质量隐患。
2软件质量
10.2.2 软件可靠性定义
软件可靠性表明了一个程序按照用户的要求和设计的目标,执行其功能的正确程度。一个可靠的程序应要求是正确的、完整的、一致的和健壮的。
软件可靠性是指在给定的时间内,在规定的环境条件下系统完成所指定功能的概率。
2软件质量
10.2.4 软件容错技术1、容错软件定义
规定功能的软件,在一定程度上对自身错误的作用具有屏蔽能力,则称此软件为具有容错功能的软件,即容错软件。
2、容错的一般方法
实现容错技术的主要手段是冗余。冗余是指实现系统规定
功能是多余的那部分资源,包括硬件、软件、信息和时间。由于加入了这些资源,有可能使系统的可靠性得到较大的提高。
2软件质量
(1)结构冗余
结构冗余按其工作方式,它分为静态、动态和混合冗余3种。静态冗余通过表决和比较来屏蔽系统中出现的错误。常用的有三模冗余和多模冗余。
动态冗余主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来顶替它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可不工作,前者叫做热备份系统,后者叫做冷备份系统。
2软件质量
(2)信息冗余
为检测或纠正信息在运算或传输中的错误,须另外加一部分信息,这种现象称为信息冗余。采用奇偶码、定重码及循环码等冗余码制式就可以发现甚至纠正这些错误。(3)时间冗余
时间冗余是指以重复执行指令或程序来消除瞬时错误带来的影响。对于复执不成功的情况,通常的处理办法是发出中断,转入错误处理程序,或对程序进行复算,或重新组合系统,或放弃程序处理。
2软件质量
1、软件工程管理的重要性
软件是非物质性的产品,而且是知识密集型的逻辑思维的产品。
随着软件规模的不断增大,开发人员也随着增多,开发时
间也相应持续增长,这些都增加了软件工程管理的难度,同时也突出了软件工程管理的必要性与重要性。
3软件工程管理技术
2、软件工程管理的内容(1)开发人员
软件开发人员一般分为: 项目负责人、系统分析员、高级程序员、程序员、初级程序员、资料员和其他辅助人员。
不同职责的人,要求的素质不同。(2)组织机构
组织机构不等于开发人员的简单集合, 要求有好的组织结构;合理的人员分工;有效的通信。软件开发的组织机构包括主程序员、专家组及民主组织3种形式。
3软件工程管理技术
(3)用户
软件是为用户开发的,在开发过程中自始至终必须得到用户的密切合作和支持。(4)控制
控制包括进度控制、人员控制、经费控制和质量控制。(5)文档资料
软件工程管理很大程度上是通过对文档资料管理来实现的。
3软件工程管理技术
考题类型及要求
一、考题类型1、判断题:10%2、单项选择题:20%3、填空题:20%4、名词解释:10%
5、简答题:20%
6、综合类题:20%
考题类型及要求
考题类型及要求
二、复习要求
1、以本次考前辅导内容为基础,做好本门课程的全面复习;
2、在复习课程内容的同时,应及时进行归纳总结;
3、根据复习内容,完成网上阶段练习和网上作业;
4、注意知识的综合利用。
考题类型及要求