《软件工程PPT统一完整版课件全套ppt教学教程最全整套电子教案电子讲义(最新) (2).ppt》由会员分享,可在线阅读,更多相关《软件工程PPT统一完整版课件全套ppt教学教程最全整套电子教案电子讲义(最新) (2).ppt(634页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、,第一篇 软件工程学概述,第1章 概述,本章的主要目标是介绍软件工程这门 学科,读完你将了解以下基本内容:,1,2,软件从业人员的道德和职业问 题对软件工程产业的影响。,1,软件工程的相关基本概念:软件、软件危机、软件工程、软件生命周期、软件过程等,具体见下述部分介绍。,1,2,2,2,软件工程的相关基本概念:软件、软件危机、软件工程、软件生命周期、软件过程等,具体见下述部分介绍。,1,当今世界的信息化进程,愈来愈趋向复杂化、人性化和扁平化。 软件工程作为一门工程学科,它的主要目标就是驱使软件系统向高性价比发展。 具有实时动态性 ,抽象、不可触摸 ,它的面向对象目标不受物理因素限制。 软件工程
2、同时又是一门比较年轻的学科。“软件工程”这一概念是在1968年NATO会议上针对“软件危机”的议题提出。,1.1 基本概念,构建这些软件系统的早期经验是:个人英雄主义、作坊式非正规的软件开发并不奏效。投资很大,做得很差。 制作既满足用户要求、又能按期完成并且不超出项目预算的复杂软件仍然存在很多困难。 软件工程自1968年以来已得到了长足的发展。 面向对象、构件、WEB服务及云计算等的扩充和提高已成为现实。,1.1.1 软件,1.1.1.1 软件及组成,计算机软件是与计算机系统操作有关的程序(Program)、规程、规则及任何与之有关的文档和数据。,1. 程序,程序是用程序设计语言描述的、适合于
3、计算机处理的语句序列,软件开发人员根据需求开发出来满足用户。 目前的程序设计语言有三种类型:机器语言和汇编语言、独立于机器的面向过程的语言以及独立于机器的面向问题的语言,后两种类型为高级语言。 用于科学计算的FORTRAN,用于事务处理的COBOL,支持结构化程序设计的PASCAL,支持现代软件开发的C、ADA,支持面向对象设计方法的C+、JAVA等。,面向问题的语言是第四代语言(4GL),也称 为非过程式语言。 数据库查询语言(Structure Query Language, SQL)、报表语言、机床控制专用语言和电路设计 专用语言等都是面向问题的语言。,2. 文档,文档(Document
4、)是一种数据媒体和其上所记录的数据。 最新的计算机软件文档编制规范是GB/T 8567-2006。,1.系统软件,1.1.1.3 软件的分类,1.系统软件,此类软件以数值算法为基础,对数值量进行处理和计算。,4.科学与工程 计算软件,此类软件以数值算法为基础,对数值量进行处理和计算。,4.科学与工程 计算软件,4.科学与工程 计算软件,个人计算机上使用的软件包括系统软件和应用软件两类。,7.个人计算机 软件,个人计算机上使用的软件包括系统软件和应用软件两类。,7.个人计算机 软件,1.1.1.4 软件的发展阶段,第一阶段 (20世纪50年代初至20世纪60年代初)是计算机系统开发的初期阶段。这
5、时的通用计算机由于价格昂贵、体积大、功耗高、机器不稳定和需要专人维护等原因,只能放在公共的实验室内供大家使用。,第二阶段 (20世纪60年代中期至20世纪70年代末)引进了多用户、多道程序和人机交互等新概念。实时系统可以从多路信号源上采集、处理、分析和转换数据,在相当短的时间输出计算结果。,第三阶段 (20世纪70年代中期至20世纪80年代末)分布式系统、计算机网络、嵌入式计算机系统有了很大发展。微处理器、个人计算机、高性能的桌面工作站具有相当高的性价比,广泛走进了人们工作、生活的各个方面。,第四阶段 (自20世纪80年代末期开始至现在)在很多应用领域,人们开始采用面向对象的技术,专家系统、人
6、工智能软件、构件开发、服务化软件、云计算等开始走向实际应用。 20世纪90年代末,Internet技术。 21世纪,电子商务、电子政务,服务化软件、云计算新型软件模式的出现。,1.1.2 软件危机,1.1.2.1 软件危机的表现,20世纪60年代末至20世纪70年代初,“软件危机”直到1968年在原西德加米施(Garmish)召开的国际软件工程会议上才被世人所注目。 计算机生物圈的计算机硬件,却有一个可怕的摩尔定律。 人月神话(The Mythical Man-Month)。 没有银弹(No Silver Bullet)。 软件危机概括地包含下述两方面的问题:如何开发软件、如何维护数量不断膨胀
7、的已有软件。,软件危机主要有以下一些典型表现:,对软件开发成本和进度的估计常常很不准确。 用户对“已完成”的系统不满意很普遍。 软件产品的质量往往靠不住。 软件常常不可维护。 缺失适当的文档资料。 软件成本在计算机系统总成本中的比例逐年上升。 软件开发生产率的速度,远远跟不上计算机的普及 和深入趋势。,1.1.2.2 软件危机的表现,用户对软件需求的描述不精确,存在遗留、二义性、错误的情况经常发生 。 软件开发人员对用户需求的理解与用户的本来愿望有差异 。 大型软件项目需要组织一定的人力共同参与完成 。 软件项目开发人员不能有效、独立自主地处理大型软件的全部关系和各个分支 。 缺乏有力的方法学
8、和工具的支持 。 软件产品的特殊性和人类智力的局限性导致人们无力处理很多复杂问题 。,1.1.2.3 软件危机的克服途径,用现代工程的概念、原理、技术和方法进行软件的开发、管理、维护和更新。计算机科学技术诞生了一个新的研究领域 软件工程,1.1.3 软件工程,1968年,北大西洋公约组织(NATO)召开计算机科学会议,弗里兹.鲍尔(Fritz Bauer)首次提出了“软件工程”的概念 。,1.1.3.1 软件工程的定义,1993年,IEEE对软件工程的定义为:“将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程及有关上述方法的研究”。软件工程包括三个基本要素:方法、工具和过
9、程 。,1.1.3.2 软件工程的基本原理,著名的软件工程专家B. W. Boehm综合这些学者们的意见并总结了TRW公司多年开发软件的经验,1983年在一篇论文中提出了软件工程的7条基本原理。,1. 用分阶段的生命周期计划严格管理,2. 阶段评审,3. 严格的产品控制,尽可能重用。,限定每一层的副作用,减少耦合度。,尽可能重用。,4. 现代的程序设计技术,7. 软件工程实践需不断改进,6. 开发人员应少而精,5. 结果应能清楚地审查,1.1.3.3 软件工程的目标,可修改性(Modifiability) 有效性(Efficiency) 可靠性(Reliability) 可理解性(Unders
10、tandability) 可维护性(Maintainability),可重用性(Reusability) 可适应性(Adaptability) 可移植性(Portability) 可追踪性(Traceability) 可互操作性(Interoperability),1.1.3.4 软件工程的原则,抽象(Abstraction) 信息隐藏(Information Hiding) 模块化(Modularity) 局部化(Localization) 一致性(Consistency) 完整性(Completeness) 可验证性(Verifiability),1.1.4 软件生命周期,软件产品从形成概
11、念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期(Software Life Cycle)。,软件生命周期由软件定义、软件开发和软件使用维护退役3个时期 。,1. 问题定义 要解决的问题是什么?,2. 可行性研究 问题定义所确定的问题有行得通的解决 方法吗?此问 题值不值得去解决?,4. 总体设计 概括地说,应该怎样实现目标系统?,3. 需求分析 为了解决这个问题,目标系统必须要做什么?,5. 详细设计 以比较抽象的方式提出解决问题的方法。,6. 编码和单元测试 写出容易理解和容易维护的正确程序模块。,7. 综合测试 通过各种类型的测试使软件达到预定的要求。,9. 软件的维护
12、 维护是对软件产品进行修改或对需求变化做出响应的过程。,8. 软件的使用 软件的使用是软件发挥社会和经济效益的重要 实施阶段。,10. 软件的退役 终止对软件产品的支持,软件停止使用。,1.1.5.1 瀑布模型,瀑布模型(Waterfall Model)也称之为软件生存周期模型,由W.Royce于1970年提出。 此模型根据软件生存周期各个阶段的任务,逐步进行阶段性变换,直至得到用户确认的产品为止。,以充分有效的软件需求有效为前提,具有顺序性、依赖性、推迟时间以及质量保证的特点。它也不是“万能药”,主要体现在:,快速开发原型的本质是“快速”,实现的途径有三种:,1.1.5.2 原型模型,建造原
13、型的过程如图1.5所示。 原型不能称之为软件,UNIX Shell和超文本都是广泛的快速原型语言,近年来,广泛地使用第四代语言(4GL)构建快速原型。,1.1.5.3 增量模型,增量模型(Incremental Model)也称为渐进模型,它把软件产品作为一系列的增量构件来设计、编码、集成和测试。,增量模型的优点体现在:,增量模型分批逐步地向用户提交产品,整个软件产品被分解成许多增量构件,开发人员一个构件接一个构件地向用户提交产品。 增量模型逐步增加产品功能,可以使用户有较充裕的时间学习和适应新产品功能性能,从而减少一个全新的软件可能给客户带来的不适应。,增量模型的实施也存在一些难度:,在把每
14、个新的增量构件集成到现有软件体系结构时,必须不破坏原来已开发出的产品。 在设计软件体系结构时,必须使之利于扩充,向现有产品中加入新构件的过程也要简单、方便,即体系结构必须是开放的。,图1.6描绘了一种高风险的增量模型。,1.1.5.4 螺旋模型,螺旋模型(Spiral Model)是TRW(汤普森-拉美-伍尔德里奇公司,简称为TRW)的B. Boehm于1988年提出的。它基于软件生存周期模型与原型模型的结合 。,螺旋模型主要由四部分组成:需求定义、风险分析、工程实现和评审。,螺旋模型在支持大型软件开发方面具有广泛的应用前景,适用于面向规格说明、面向过程和面向对象的软件开发模型。,1.1.5.
15、5 喷泉模型,喷泉模型(Fountain Model)是一种典型的面向对象软件开发模型,迭代是它的主旨思想。 “喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性,如图1.8。,1.1.5.6 基于四代技术的模型,第四代语言(4GL)是R. Ross于1981年提出,采用四代技术开发软件的模型,如图1.9,1.1.5.7 变换模型,变换模型(Transformational Model)是基于形式化规格说明语言及程序变换的软件开发模型。 软件需求分析确定后,用某种形式化的需求规格说明语言(如VDM的META-IV、CSP和Z)描述,生成形式化的规格说明。,形式化规格说明语言及其变换描述的研
16、究方兴未艾,人们采用的技术手段主要有: 基于模型的规格说明及其变换技术; 基于代数结构的规格说明及其变换技术; 基于时序逻辑的规格说明及验证技术; 基于可视形式化技术的规格说明等等。,1.1.5.8 组合模型,组合的方式有两种: 第一种方式是以一种模型为主,嵌入另外一种或几种模型。 第二种方式是建立软件开发的组合模型。,1269111314的路径规划软件开发,就是生存周期模型 带有原型的生存周期模型,开发路径为13269111314 1327111314是原型模型 1581291314是螺旋模型 14111314是基于四代技术的模型,1.1.6 软件工程面临的挑战,软件工程在21世纪面临以下三
17、大挑战: 遗留系统的挑战 多样性的挑战 交付上的挑战,1.2 软件工程从业人员的职业和道德素养,软件工程人员必须坚持诚实正直的行为准则包括: 机密; 工作能力; 知识产权; 计算机滥用;,在这一方面,职业协会和机构肩负重任。ACM(美国计算机协会)、IEEE(电气和电子工程师协会)和英国计算机协会等组织颁布了职业行为准则或职业道德准则,凡是加入这些组织的成员必须严格遵守。,软件工程人应当遵守以下八条原则:,公众感 ; 客户和雇主 ; 产品 ; 判断力 ; 管理 ; 职业感 ; 同事 ; 自己 ;,在我们的职业生涯中,每个人都会面临这些困惑,幸运的是,在多数情况下,这些困惑要么不严重,要么不难解
18、决。 当雇主的行为不合乎道德时,职业工程人员的处境尤为艰难。安全不是绝对的。 另一个道德问题是军事项目和核项目的参与。雇主和所有雇员事先相互沟通各自的观点非常重要。 软件工程从业人员的道德问题研究最好要联系软件工程的实际,而不是将其作为一个孤立的问题来研究,且不能仅仅归为一个单纯的哲学问题来看待。,习题1,假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并向你举例:如果一个故障是编码错误造成的,那么一个人怎么能在设计阶段清除它呢?应该怎么驳斥他? 职业工程人员是否应该
19、像医生或律师一样要颁发资格证书?分组讨论一下。,THANKS,第1篇 软件工程学概述,第2章 计算机系统工程,大多数软件项目都是为了满足某种需求的软件产品而建立起的一个系统化工程过程,这些软件必须在计算机系统的支持下才能工作。,计算机系统工程是指构造基于计算机系统有关的过程、 方法和技术,这是一种问题求解的活动序列。,大多数软件项目都是为了满足某种需求的软件产品而建立起的一个系统化工程过程,这些软件必须在计算机系统的支持下才能工作。,2.1 系统与系统工程,1. 功能特性 2. 非功能特性 系统的复杂性很大程度体现在可靠性上,系统总体的可靠性涉及到三方面: 硬件可靠性; 软件可靠性; 系统操作
20、员可靠性。,2.1.1 系统总体特性,2.1.1 系统总体特性,系统工程师根据系统需求为硬件系统指派任务,产生硬件需求。硬件工程式分为3个阶段 :,第一阶段: 制定开发计划,经评审确定项目成本预算和工程进度; 展开详细需求分析,经评审确定硬件规格说明。,第二阶段: 设计分析,以图的形式展现设计结果; 必要时建造原型,并不断完善测试原型; 制造分析,画出硬件生产图。,第三阶段: 按照质量保证计划和要求生产硬件产品。,2.1.3 软件和软件工程,软件与硬件、软件工程与硬件工程分别是基于计算机系统和基于计算机的系统工程的重要组成部分。 目前,大多数基于计算机系统的软部件,都是软件工程师自行开发的。软
21、部件由源程序、数据和文档三部分组成。 系统软件和应用软件的接口由系统软件决定。无论基于计算机的系统功能和性能如何,它们的结构都可以用IPO(Input Process Output)模型表示。,借助软件工程的过程、方法和工具,软件工程师开发基于计算机的系统。无论是哪种软件工程过程模型,它们都是涵盖软件项目的定义、开发、验证、提交和维护阶段 。,软件定义阶段的任务:,制定项目规划 ; 需求分析与定义 ; 确定软件性能和资源约束; 定义软件要素验收标准 ; 软件开发阶段的任务是完成软件总体结构及 数据设计、过程设计和编码三部分;,软件工程过程的最后阶段是软件验证、提交和维护。验证的任务 :,总体结
22、构设计和数据设计的任务 : 设计模块结构; 定义界面并建立数据结构 ;,软件过程设计的任务 : 详细描述软件规格说明中的每一个模块; 对模块进行评审。通过评审模块的详细描述将构 成详细设计规格说明 ;,软件编码的任务 : 用恰当的编程语言对详细描述模块进行编码,生 成 程序 ;,评审通过后,进行软件提交,主要任务包括 : 对已生成的记录和内部文档进行整理、分类和存档; 开发用户手册、建立适当的配置控制机制 ; 将软件提交给用户,必要时还应负责把软件安装到 用户环境中 ;,2.1.4 人机交互工程,现在,“友好的人机交互”已成为计算机系统的一项重要技术衡量指标,人机工程也已成为基于计算机系统开发
23、的一项重要内容。,人机工程一般包括以下几个步骤: 活动分析 ; 动作定义与设计 ; 人机交互的对话设计 ; 用户环境设计 ; 设计原型 ;,2.1.5 数据库工程,一个基于计算机的系统工程,至少包括三个部分:硬件工程、软件工程和人机交互过程。 开发一个数据库系统是一项复杂而庞大的软件工程项目,一般情况下称之为数据库工程,它主要完成以下任务:,调查用户的信息需求和对信息处理的要求;进行可行性论证;提出成本预算和工作计划等 ; 论证、选择和购置支持数据库系统的硬件和软件 ; 设计与实现 ; 数据库中的数据是按照系统确定的范围和用户的需求收集、整理、储存 ; 数据库管理人员(比如DBA)是数据库工程
24、的重要组成部分 ;,2.2 系统模型与建模活动,输入-处理-输出(IPO)结构是系统建模的基础, 它将基于计算机的系统换算成一个信息变换模型。 同时,Hatley和Pirbhai补充了用户界面、维护及自 测试方面的处理内容。,2.2.1 系统模型,1. 结构图 系统工程师用结构模板开发系统模型。 图2.5是某某传送线在线货物分类系统的总体关系图。,系统工程师借助ACD可以定义各子系统的结构 流图(AFD)。,2. 系统结构规格说明,结构图规格说明(ADS)描述了子系统信息以及子系统之间的控制流和信息流。每个子系统的结构图规格说明都应包括系统模板说明书、系统结构数据字典和系统结构互连图。,2.2
25、.2 系统建模及模拟,为了减少在真实环境中试验的风险和代价,在系统分析和设计阶段普遍采用系统建模和模拟技术。 从时间维角度,可以把系统模型定位为静态模型和动态模型,静态模型不关乎时间参数,动态模型则不同。从计算机系统参数的随机性来看,模型有确定和随机之分。,系统模拟是用一个系统表示某个实际系统或抽象系统中选定行为的特征 。,主要步骤是: 分析问题、确定模拟的目标 ; 建立模型 ; 运行模型并分析模拟结果 ; 若需要,修改模型 ; 撰写模拟文档 ;,2.3 系统规格与评审说明,表2.1系统规格说明目录,2.3.1 系统规格,2.3.2 评审说明,系统规格说明评审过程分管理评审和技术评审两个阶段。
26、,管理评审需回答: 系统是否有一个稳定的商业需求,系统开发是否有意义? 系统开发是否有市场价值或社会效益? 系统开发是否还有其他选择方案? 系统各个部分的开发风险怎样? 系统开发所需资源是否已具备? 成本和进度计划是否恰当?等等。,技术评审需回答: 系统功能复杂性是否与开发风险、成本和进度评估保持一致? 系统采用的术语、系统与子系统功能定义是否足够详细? 系统与环境的接口以及各子系统间的接口定义是否详细?系统各个部分的开发风险怎样? 系统规格说明是否指明系统性能、可靠性和可维护性方面的问题? 系统规格说明是否为后续的硬件工程、软件工程打下坚实的基础?,系统规格说明评审完成后,系统开发可以按照硬
27、件工程、软件工程、数据库工程、人机交互等并行展开。从第三章起,主要任务介绍软件工程。,习题2,讨论并描述系统分析员应该具备的主要知识结构和基本素质。软件开发人员和用户分别担任系统分析员有哪些优势和缺陷。 找出并改正程序逻辑中的错误。,THANKS,第2篇 软件定义,第3章 可行性研究,本章的主要目标是介绍软件可行性研究阶段的相 关工作。读完本章,你将了解以下基本内容:,1,软件可行性论证需考虑的几个因素、任务和执行过程。,1,软件可行性论证需考虑的几个因素、任务和执行过程。,1,可行性研究中相关的系统流程元素及模型表达。,2,2,只要资源和时间不加以限制,所有的项目都是可行的。 软件可行性研究
28、的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。,可行性研究的主旨不是解决问题,而是确定问题是否值得去解 首先需要进一步分析和澄清问题定义 其次,在澄清了问题定义后,分析人员应该导出系统的逻辑模型。,3.1 可行性研究的任务,可行性,一般来讲,主要集中在以下几个方面:,技术可行性。 经济可行性。 操作可行性。 法律可行性。 抉择。,可行性研究需要的时间长短取决于工程的规模, 通常情况下,可行性研究的成本只是预期工程 总成本的5%10%。,3.2 可行性研究过程,典型的可行性研究过程需要下述一些步骤: 复查系统规模和目标 研究目前正在使用的系统 导出新系统的高层逻辑模型 再次定义
29、问题 导出和评价供选择的解法 推荐行动方针 草拟开发计划 书写文档并提交审查,3.3 系统流程元素及模型表达,需要在可行性研究阶段大体设计未来物理系统的概貌,这里需要系统流程图。 系统流程图是概括描绘物理系统的传统工具。基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。,3.3.1 元素符号,表3.1 基本符号,表3.2 系统符号,3.3.2 举例,该装配厂使用一台小型计算机处理更新库存清单主文件和产生定货报告的任务。零件库存量的每一次变化称为一个事务,由放在仓库中的CRT终端输入到计算机中;系统中的库存清单程序对事务进行处理,更新存储在磁盘上的库存清单
30、主文件,并且把必要的定货信息写在磁盘上。最后,每天由报告生成程序读一次磁盘,且打印出定货报告。,某装配厂有一存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。当仓库中零件数量有变化时,应及时修改库存清单主文件,如果哪种零件的库存量少于它的库存量临界值,则应报告给采购部门以便定货,规定每天向采购部门送一次定货报告。,该装配厂使用一台小型计算机处理更新库存清单主文件和产生定货报告的任务。零件库存量的每一次变化称为一个事务,由放在仓库中的CRT终端输入到计算机中;系统中的库存清单程序对事务进行处理,更新存储在磁盘上的库存清单主文件,并且把必要的定货信息
31、写在磁盘上。最后,每天由报告生成程序读一次磁盘,且打印出定货报告。,某装配厂有一存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。当仓库中零件数量有变化时,应及时修改库存清单主文件,如果哪种零件的库存量少于它的库存量临界值,则应报告给采购部门以便定货,规定每天向采购部门送一次定货报告。,3.4 成本/效益分析,开发一个软件也是投资,期望将来获得更大的经济效益。经济效益通常表现为减少运行费用或(和)增加收入。,3.4.1 成本估计,代码行技术 任务分解技术 自动估计成本技术,表3.3 典型环境下各个开发阶段需要使用的人力的百分比,3.4.2 成本/
32、效益分析方法,成本/效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。 为了保险起见,以后在进行成本/效益分析时一般假设生命周期为5年。,通常用利率的形式表示货币的时间价值。,通常用投资回收期衡量一项开发工程的价值。所谓投资回 收期就是使累计的经济效益等于最初投资所需要的时间。,衡量工程价值的另一项经济指标是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。这相当于比较投资开发一个软件系统和把钱存在银行(或贷给其他企业)这两种方案的优劣。,4.投资回收率,3.纯收入,设想把数量等于投资额的资金存入银行,每年年底从银行 取回的钱等于系统每年预期可
33、以获得的效益。,1.货币的时间价值,2.投资回收期,3.5 技术分析,用于技术分析的方法,有数学模型和优化技术、概率和统计、排队论、控制论等。,图3.2说明在模型化的 过程中信息的整个流程:,BlanChard和Fabrychy为系统的技术分析定义了一套使用模型的准则。 模型应表现出待评估系统构成的动态特性,其操作应当尽量接近真实的结果; 模型应包括所有的相关元素,并且保证其可靠性; 模型应突出表现与现实问题最相关的因素,对次要的因素,要谨慎地回避它们; 模型设计应尽量简单,并应很快解决问题。 模型设计应制定要求,以便修改或者扩充,并在需要时进行评估。,3.6 方案的分配与权衡,一旦解决了与分
34、析任务相关的问题,就应开始考虑候选的解决方案 对候选系统配置方案的整个评估过程如图3.3和图3.4所示,习题3,1.问题描述:为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。 对这段问题描述进行分析,画出相关的系统业务流程。 2.问题描述:为方便旅客,某航空公司拟开发一个机票预订系统。旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞
35、机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。 对这段问题描述进行分析,画出相关的系统业务流程。,3.问题描述:住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,可能会延误救治时机。某医院打算开发一个以计算机为中心的患者监护系统,医院对患者监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统印出某个指定病人的病情报告。 对这段问题描述进行分析,画出相关的系统业务流程。,THAN
36、KS,第2篇 软件定义,第4章 结构化需求分析,本章的主要目标是介绍软件需求分析的相关工作。 读完本章,你将了解以下基本内容:,4.1 需求分析基础,软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。最终形成需求规格说明。 需求分析阶段是介于系统分析和软件设计阶段间的重要桥梁。,需求分析可分为问题分析、需求描述及需求评审3个阶段。,4.1.1 需求分析的任务与原则,在问题分析阶段,分析人员通过对问题及其环境的理解、分析和综合,清除用户需求的模糊性、歧义性和不一致性,并在用户的帮助下对相互冲突的要求进行折衷。,需求描述阶段的主要任务是以需求模型为基础,考虑到问题的软件可解性
37、,生成需求规格说明和初步的用户手册。,在需求评审阶段,分析人员需在用户和软件设计人员的配合下对自己生成的需求规格说明和初步的用户手册进行复核,以确保软件需求的全面性、精确性和一致性,并使用户和设计人员对需求规格说明及用户手册的理解达成一致。,4.1.2 需求初步获取技术,4.1.2.4 需求实例,最后,初步分析活动应形成结论性文档,该文档将作为后续分析活动的基础。经过初步分析后,“家庭保安系统”的部分需求文档(不包括约束条件和测试标准)如下: “家庭保安系统”的软件允许用户在安装时进行系统配置,实施对传感器的监控并通过控制面板与用户进行信息交互。 配置操作包括: (1)指定每一传感器的种类和编
38、号; (2)设置开、关机密码; (3)指定报警电话号码; (4)指定报警延迟和电话重拨延迟时间(以秒为单位)。 当软件系统接收到传感器发出的数据后,判断是否出现异常事件。若是,则在指定的延迟时间内拨报警电话,拨号操作将按照重拨延迟反复进行,直至电话接通。然后软件系统负责报告时间、地点和异常事件的性质。 开机后,软件系统负责显示当前工作状态,接收并处理用户指令。,4.1.3 需求建模,软件目标系统可通过模型刻画所涉及的信息、处理功能及实际运行时的外部行为。 建立软件模型是分析活动的焦点。,4.1.4 问题抽象、问题分解与多视点分析,抽象方法要求分析人员在分析过程中善于捕捉用户描述或问题本身所固有
39、的一般特殊关系,首先关注一般问题的解决途径,进而指导特殊问题的求解。,问题分解也是普遍适用于分析各阶段的一般性方法。,与问题分解相对应,还有一种“视角分解”方法广泛应 用于需求分析活动, 这就是所谓的“多视点分析”。,4.1.5 支持需求分析的快速原型技术,一旦确定采用快速原型技术后,分析人员不妨遵循以下步骤: 利用各种分析技术和方法,生成一个简化的需求规格说明; 对前述需求规格说明进行检查、修订后,生成设计规格说明。一般情况,为了快速生成原型,软件的设计只关心软件的总体结构、用户界面和数据设计,不注重过程内部的控制流程设计。 在现有工具或环境的帮助下快速生成可运行的软件原型并进行测试、完善和
40、改进。可用的主要工具有可重用的软部件库、用户界面 自动生成器等快速原型支持工具; 将原型提交给用户评估并征询改进意见; 上述过程将反复迭代进行,直到用户完全认可为止。,4.1.6 需求规格说明与评审,它必须服务于以下目标: 便于用户、分析人员和软件设计人员进行理解和交流。 支持目标软件系统的确认。 控制系统进化过程。 需求规格说明书的主体内容包括功能与行为需求描述以及非行为需求描述两部分。 需求规格说明书基本构架和内容见计算机软件文档编制规范(GB/T8567-2006)。,4.1.6.1 需求规格说明书的目标和内容,4.1.6.2 需求评审,衡量需求规格说明书质量的标准按重要性次序排列为正确
41、性、无歧义性、完全性、可验证性、一致性、可理解性、可修改性和可追踪性。,正确性。需求规格说明书中的功能、行为、性能描述必须与用户对目标软件产品的期望相吻合。 无歧义性。对于用户、分析人员、设计人员和测试人员而言,需求规格说明书中的任何语法单位只能有唯一的语义解释。 完全性。需求规格说明书不能遗漏任何用户需求。,可验证性。对于规格说明书中的任何需求,均应该对技术和经济上的可行性手段进行验证和确认。 一致性。需求规格说明书的各部分内容之间不能相互矛盾。 可理解性。追求上述目标不应妨碍需求规格说明书对于用户、设计人员和测试人员的易理解性。 可修改性。需求规格说明书的格式和组织方式应保证能够比较容易地
42、接纳后续的增删改,并使修改后的说明书能够较好地保持其他各项属性。 可追踪性。需求规格说明书分析后获得的每项需求必须与用户的原始需求项清晰地联系起来,并为后续开发和其他文档引用这些需求项提供便利。,4.2 面向数据流的结构化需求分析方法,结构化分析方法的雏形出现于20世纪60年代后期。但是,直到1979年才由DeMarco将其作为一种需求分析方法正式提出。20世纪80年代中后期,Ward 二是可以使系统具有更好的健壮性,以及更好的可维护性。,7.1.3 模块化设计,人们不断创新的目的在于更加高效。从软件开发的角度来看,人们希望开发维护同样一个系统所使用的时间最短,所耗费的成本最低。软件系统模块化
43、就是出于这样的目的 。 在结构化分析方法中,模块的规模可大可小,是一个功能单位。模块可以是软件系统中的一个子系统,也可以是子系统内一个功能程序块(由边界元素限定的数据说明、可执行的语句等的序列,而且有一个总体标识符来代表它。,模块化可以简化软件问题。 一个系统模块越多,模块与模块之间的通信或接口就越多,希望依靠模块化将系统不断被分解而使软件成本不断降低的愿望可能是不切实际的。随着系统的分解,系统中模块数目将会增加,模块接口也会增加,软件构造会由此变得复杂起来,模块连接的难度也会由此加大。,那么如何确定一个软件系统的模块数目? 分别从模块可分解性、可组装性、可理解性、连续性和保护性五个方面来理解
44、。 如果一种设计方法提供了把问题分解为子问题的系统化机制,它就能降低整个问题的复杂性,从而可以实现一种有效的模块化解决方案。 如果一种设计方法能把现有的(可重用的)设计构件组装成新系统,它就能提供一种并非一切从头开始的模块化解决方案。 如果可以把一个模块作为一种独立单元(无段参考其他模块)来理解,那么,这样的模块是易于构造和易于修改的。 如果对系统需求的微小修改只会针对个别模块,而不是对整个系统的修改,则修改所引起的副作用将最小。 如果在一个模块内出现异常情况时,它的影响仅局限在该模块内部,则由错误引起的副作用最小。,7.1.4 模块独立,模块独立是模块化、抽象、信息隐蔽的直接结果,是指系统中
45、的模块尽可能地只涉及自己特定的子功能,并且模块接口简单,与其他模块没有过多的通信。如果系统中每个模块都具有很好的独立性,系统实现起来就更加容易。因此,模块独立性是衡量软件中模块质量最重要的指标。 一般来说,采用耦合和内聚这两个定性的技术指标来对这一模块的独立性进行衡量。内聚性可以衡量各模块内部功能的结合强度,模块内部各元素之间结合得越紧密,则它的内聚性就越高;耦合性显示了模块与模块之间相互的依赖关系,模块与模块之间联系越紧密,耦合性就越高。,7.1.5 耦合,耦合度量了各模块之间相互关联的程度,各个模块之间接口的复杂程度、接口数据对模块内部运算的影响程度、使用模块的方式都决定了耦合的强弱。以下
46、是耦合的几种主要形式: 非直接耦合。两个模块之间的联系,仅限于被共同模块控制和调用,它们之间没有直接的联系,那么这种耦合就成为非直接耦合,因为模块和模块之间没有数据通信,所以它的耦合形式是最弱的。 数据耦合。模块与模块之间发生联系,彼此之间通过接口参数实现通信,传递的接口参数是用于计算的,它们不会影响内部程序执行的路径。我们提倡用数据耦合,它是一种较弱的耦合方式。,控制耦合。如果在数据耦合的基础上,模块间接口参数不仅传递数据,同时还传递标志、名字、开关等控制信息,从而影响模块的内部程序执行路径。显而易见,控制耦合比数据耦合的耦合性要强一些,它属于中等程度的耦合。如果需要通过接口传递模块内多项功
47、能的选择时,就需要用到控制耦合。 公共耦合。在软件系统中,可能有独立于模块而存在的数据文件、公共变量和公共数据环境。模块之间通过访问公共数据环境从而实现通信。 内容耦合。内容耦合是一种耦合性很强的耦合,这种耦合严重影响了模块的独立性。它的表现形式主要有以下几种:i. 模块直接访问另一模块的内部数据;ii. 模块不通过正常的入口转到另一模块内部;iii. 模块之间存在一部分代码重叠;iv. 某个模块有多个入口。内容耦合致使模块的变动变得非常困难,程序维护和升级也极其困难,这要求在设计软件结构时,不允许出现内容耦合。,7.1.6 内聚,内聚性是信息隐蔽概念的自然扩展,它度量了模块内部各个元素彼此结
48、合的紧密程度,元素之间联系越紧密,其内聚性越强。 功能内聚、信息内聚、通信内聚、过程内聚、时间内聚、逻辑内聚和偶然内聚 。 偶然内聚。偶然内聚即模块内部各元素之间的联系很少或者没有。 逻辑内聚。逻辑内聚将几种相关的功能组合在一起形成一个模块。 时间内聚。时间内聚是指模块内部各功能之间的执行与时间相关。,过程内聚。如果模块内各元素的执行是按照一定次序来进行的,即各个元素的处理是相关的,则称其为过程内聚。 通信内聚。一个模块内部可以有几个功能部分,如果这些功能部分都使用相同的数据输入,或者产生相同的数据输出,这不是通信内聚。 顺序内聚。如果模块内某一功能元素的输出作为另一个功能元素的输入,模块内各
49、功能元素顺序联结,它们之间关系紧密,那么称这个模块为顺序内聚模块。 功能内聚。如果为了实现模块的具体功能,模块内各个元素都是必需的,这些元素要协同工作,它们无法单独执行,称这样的模块为功能内聚模块。功能内聚模块的内聚程度很高,在进行软件设计时,应尽可能地实现功能内聚。,7. 2 软件结构的描绘工具,7. 2.1 层次图和HIPO图,层次图是用来描绘软件的层次结构。,层次图很适合在自顶向下设计软件的过程中使用。 HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。为了能使HIPO图具有可追踪性,在H图(层次图)里除了最底层的方框之外,每个方框都加了编号。编号规则与数据流图的级联编号方式相同,图7.2加了编号后演变为图7.3。,7.2.2 结构图,Yourdon提出的结构图是进行软件结构设计的另一个有利工具。结构图和层次图类似,也是描绘软件结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示