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