




已阅读5页,还剩327页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程培训资料第一章软件工程概述一、复习要求1了解软件概念、特点及分类方法。2了解软件发展及软件危机的起因。3了解软件工程过程及软件生存期的概念。4了解软件工程的概念及其要素。5了解软件工程的基本目标和原则。二、内容提要1软件的概念、特点软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图文材料。软件的特点是1软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性。2软件的生产与硬件不同,它没有明显的制造过程。对软件的质量控制,必须着重在软件开发方面下功夫。3在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。任何机械、电子设备在运行和使用中,其失效率大都遵循如图11A所示的型曲线(即浴盆曲线)。而软件的情况与此不同,因为它不存在磨损和老化问题。然而它存在退化问题,必须要多次修改(维护)软件,如图11B所示。图11失效率曲线4软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。5软件的开发至今尚未完全摆脱手工艺的开发方式。6软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。7软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。8相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到人的观念和人们的心理。它直接影响到项目的成败。2软件的分类1按软件的功能进行划分系统软件能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。例如,操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。支撑软件是协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发的进程的工具。应用软件是在特定领域内开发,为特定目的服务的一类软件。2按软件规模进行划分按开发软件所需的人力、时间以及完成的源程序行数,可确定六种不同规模的软件。表11软件规模的分类类别参加人员数研制期限产品规模(源程序行数)微型114周05K小型116月1K2K中型2512年5K50K大型52023年50K100K甚大型100100045年1M1000K极大型20005000510年1M10M规模大、时间长、很多人参加的软件项目,其开发工作必须要有软件工程的知识做指导。而规模小、时间短、参加人员少的软件项目也得有软件工程概念,遵循一定的开发规范。其基本原则是一样的,只是对软件工程技术依赖的程度不同而已。3按软件工作方式划分实时处理软件指在事件或数据产生时,立即予以处理,并及时反馈信号,控制需要监测和控制的过程的软件。主要包括数据采集,分析,输出三部分。分时软件允许多个联机用户同时使用计算机。交互式软件能实现人机通信的软件。批处理软件把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理完的软件。4按软件服务对象的范围划分项目软件也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。例如军用防空指挥系统、卫星控制系统。产品软件是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。例如,文字处理软件、文本处理软件、财务处理软件、人事管理软件等。5按使用的频度进行划分有的软件开发出来仅供一次使用。例如用于人口普查、工业普查的软件。另外有些软件具有较高的使用频度,如天气预报软件。6按软件失效的影响进行划分有的软件在工作中出现了故障,造成软件失效,可能给软件整个系统带来的影响不大。有的软件一旦失效。可能酿成灾难性后果。例如财务金融、交通通信、航空航天等软件。我们称这类软件为关键软件。3软件的发展和软件危机自20世纪40年代中出现了世界上第一台计算机以后,就有了程序的概念。其后经历了几十年的发展,计算机软件经历了三个发展阶段程序设计阶段,约为50至60年代程序系统阶段,约为60至70年代软件工程阶段,约为70年代以后几十年来最根本的变化体现在1人们改变了对软件的看法。50年代到60年代时,程序设计曾经被看做是一种任人发挥创造才能的技术领域。当时人们认为,写出的程序只要能在计算机上得出正确的结果,程序的写法可以不受任何约束。随着计算机的广泛使用,人们要求这些程序容易看懂、容易使用,并且容易修改和扩充。于是,程序便从个人按自己意图创造的“艺术品”转变为能被广大用户接受的工程化产品。2软件的需求是软件发展的动力。早期的程序开发者只是为了满足自己的需要,这种自给自足的生产方式仍然是其低级阶段的表现。进入软件工程阶段以后,软件开发的成果具有社会属性,它要在市场中流通以满足广大用户的需要。3软件工作的范围从只考虑程序的编写扩展到涉及整个软件生存周期。在软件技术发展的第二阶段,随着计算机硬件技术的进步,要求软件能与之相适应。然而软件技术的进步一直未能满足形势发展提出的要求。致使问题积累起来,形成了日益尖锐的矛盾。这就导致了软件危机。问题归结起来有1缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。致使经费预算常常突破,进度计划无法遵循,开发完成的期限一拖再拖。2软件需求,在开发的初期阶段提得不够明确,或是未能得到确切的表达。开发工作开始后,软件人员和用户又未能及时交换意见,造成开发后期矛盾的集中暴露。3开发过程没有统一的、公认的方法论和规范指导,参加的人员各行其事。加之设计和实现过程的资料很不完整;或忽视了每个人工作与其他人的接口,使得软件很难维护。4未能在测试阶段充分做好检测工作,提交用户的软件质量差,在运行中暴露出大量的问题。如果这些障碍不能突破,进而摆脱困境,软件的发展是没有出路的。4软件工程过程和软件生存周期许多计算机和软件科学家尝试,把其它工程领域中行之有效的工程学知识运用到软件开发工作中来。经过不断实践和总结,最后得出一个结论按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。1软件工程过程SOFTWAREENGINEERINGPROCESS软件工程过程是为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。软件工程过程通常包含四种基本的过程活动PPLAN软件规格说明。规定软件的功能及其运行的限制;DDO软件开发。产生满足规格说明的软件;CCHECK软件确认。确认软件能够完成客户提出的要求;AACTION软件演进。为满足客户的变更要求,软件必须在使用的过程中演进。事实上,软件工程过程是一个软件开发机构针对某一类软件产品为自己规定的工作步骤,它应当是科学的、合理的,否则必将影响到软件产品的质量。2软件生存周期LIFECYCLE正如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。我们称其为计算机软件的生存周期。根据这一思想,把上述基本的过程活动进一步展开,可以得到软件生存周期的六个步骤。制定计划确定要开发软件系统的总目标,给出它的功能、性能、可靠性以及接口等方面的要求;研究完成该项软件任务的可行性,探讨解决问题的可能方案;制定完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查。需求分析对待开发软件提出的需求进行分析并给出详细的定义。编写出软件需求说明书及初步的用户手册,提交管理机构评审。软件设计把已确定了的各项需求转换成一个相应的体系结构。进而对每个模块要完成的工作进行具体的描述。编写设计说明书,提交评审。程序编写把软件设计转换成计算机可以接受的程序代码。软件测试在设计测试用例的基础上检验软件的各个组成部分。运行维护已交付的软件投入正式使用,并在运行过程中进行适当的维护。3软件生存周期模型软件生存周期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。A瀑布模型瀑布模型规定了各项软件工程活动,包括制定开发计划,进行需求分析和说明,软件设计,程序编码。测试及运行维护,参看图12。并且规定了它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。图12软件生存周期的瀑布模型然而软件开发的实践表明,上述各项活动之间并非完全是自上而下,呈线性图式。实际情况是,每项开发活动均处于一个质量环(输入处理输出评审)中。只有当其工作得到确认,才能继续进行下一项活动,在图12中用向下的箭头表示;否则返工,在图12中由向上的箭头表示。B演化模型由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。因此,可以先做试验开发,其目标只是在于探索可行性,弄清软件需求;然后在此基础上获得较为满意的软件产品。通常把第一次得到的试验性产品称为“原型”。C螺旋模型对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型沿着螺线旋转,如图13所示,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即制定计划确定软件目标,选定实施方案,弄清项目开发的限制条件;风险分析分析所选方案,考虑如何识别和消除风险;实施工程实施软件开发客户评估评价开发工作,提出修正建议。沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。图13螺旋模型D喷泉模型喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。“喷泉”一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界。如图14所示。图14喷泉模型E智能模型智能模型是基于知识的软件开发模型,它综合了上述若干模型,并把专家系统结合在一起。该模型应用基于规则的系统,采用归约和推理机制,帮助软件人员完成开发工作,并使维护在系统规格说明一级进行。5软件工程的目标和原则1软件工程的定义FRITZBAUER曾经为软件工程下了定义“软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。”1983年IEEE给出的定义为“软件工程是开发、运行、维护和修复软件的系统方法”,其中,“软件”的定义为计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必需的数据。后来尽管又有一些人提出了许多更为完善的定义,但主要思想都是强调在软件开发过程中需要应用工程化原则的重要性。软件工程包括三个要素方法、工具和过程。软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经推出了许多软件工具,这些软件工具集成起来,建立起称之为计算机辅助软件工程CASE的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑。2软件工程项目的基本目标组织实施软件工程项目,最终希望得到项目的成功。所谓成功指的是达到以下几个主要的目标付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发工作,及时交付使用。在具体项目的实际开发中,企图让以上几个目标都达到理想的程度往往是非常困难的。图15软件工程目标之间的关系图15表明了软件工程目标之间存在的相互关系。其中有些目标之间是互补关系,例如,易于维护和高可靠性之间,低开发成本与按时交付之间。还有一些目标是彼此互斥的,例如,低开发成本与软件可靠性之间,提高软件性能与软件可移植性之间,就存在冲突。3软件工程的原则以上的软件工程基本目标适合于所有的软件工程项目。为达到这些目标,在软件开发过程中必须遵循下列软件工程原则。抽象抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。信息隐蔽将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。使用者只能通过模块接口访问模块中封装的数据。模块化模块是程序中逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义。如C语言程序中的函数过程,C语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。局部化要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于控制解的复杂性。确定性软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间在交流时不会产生误解、遗漏,保证整个开发工作协调一致。一致性整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。完备性软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。可验证性开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。使用一致性、完备性和可验证性的原则可以帮助人们实现一个正确的系统。三、例题分析【例1】软件是计算机系统中与硬件相互依存的另一部分,它是包括A、B及C的完整集合。其中,A是按事先设计的功能和性能要求执行的指令序列。B是使程序能够正确操纵信息的数据结构。C是与程序开发、维护和使用有关的图文材料。供选择的答案AC软件程序代码硬件文档外设数据图表答案A,B,C分析软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列。数据是使程序能够正确操纵信息的数据结构。文档是与程序开发、维护和使用有关的图文材料。需要注意的是,程序与算法在含义上有不同算法的每一条指令必须是最基本的、必须通过有限步做完,而程序没有这个要求。【例2】开发软件时对提高软件开发人员工作效率至关重要的是A。软件工程中描述生存周期的瀑布模型一般包括计划、B、设计、编码、测试、维护等几个阶段,其中设计阶段在管理上又可以依次分成C和D两步。供选择的答案A程序开发环境操作系统的资源管理功能程序人员数量计算机的并行处理能力B需求分析需求调查可行性分析问题定义C、D方案设计代码设计概要设计数据设计运行设计详细设计故障处理设计软件体系结构设计答案A,B,C,D分析有合适的程序开发环境可以提供有用的工具,大大提高开发人员的工作效率。软件工程中描述软件生存周期的瀑布模型一般包括计划、需求分析、设计、编码、测试和运行维护等六个阶段。需求分析完成对软件产品在功能、性能、用户接口、运行环境、可靠性、安全性、开发资源、开发进度、开发成本等方面的需求定义。问题定义、可行性分析、需求调查都可能是需求分析中要做的一部分工作。软件设计在管理上划分为概要设计与详细设计两个步骤。概要设计的目标是建立软件的体系结构,完成全局数据结构设计,同时进行处理方式设计、运行配置设计、出错处理设计、故障恢复设计等。详细设计是对每一个模块的操作的控制流程和局部数据结构进行设计。【例3】从供选择的答案中选出适当字句填入下列关于软件发展过程的叙述中的内。有人将软件的发展过程划分为4个阶段第一阶段(19501950年代末)称为“程序设计的原始时期”,这时既没有A,也没有B,程序员只能用机器指令编写程序。第二阶段(1950年代末1960年代末)称为“基本软件期”。出现了A,并逐渐普及。随着B的发展,编译技术也有较大的发展。第三阶段(1960年代末1970年代中期)称为“程序设计方法时代”。这一时期,与硬件费用下降相反,软件开发费急剧上升。人们提出了C和D等程序设计方法,设法降低软件的开发费用。第四阶段(1970年代中期现在)称为“软件工程时期”。软件开发技术不再仅仅是程序设计技术,而是包括了与软件开发的各个阶段,如E、F、编码、单元测试、综合测试、G及其整体有关的各种管理技术。供选择的答案AD汇编语言操作系统虚拟存储器概念高级语言结构式程序设计数据库概念固件模块化程序设计EG使用和维护兼容性的确认完整性的确认设计需求定义图象处理答案A,B,C,D,E,F,G。注意,C与D的答案顺序可互换。分析在软件发展的早期,汇编语言和高级语言尚未出现,人们只能用机器指令来编写程序。为了好读,有的指令系统可以用八进制代码书写。其后,由于汇编语言的出现,人们摆脱了繁重的地址分配等工作,可以用符号编程。随着高级语言的出现和普及,人们用近似于自然语言的语句编写程序,大大减轻了程序员的负担。高级语言的处理,从解释执行到编译执行,处理效率和存储利用率不断提高。结构化程序设计和模块化程序设计是科学家为解决软件危机,借用其它领域的技术改进程序设计方法而提出来的。由于这些技术的使用,提高了程序的可读性、局部性、抽象性、清晰性、简单性、确定性、一致性等,降低了程序开发的费用。后来发展到软件工程阶段,明确地划分了软件开发阶段,规范了软件开发过程,明确了各个阶段的任务以及应交付的成果和里程碑,使得软件开发逐步达到工程化和标准化。四、习题【11】软件工程过程有哪几个基本过程活动试说明之。【12】试说明“软件生存周期”的概念。【13】试论述瀑布模型软件开发方法的基本过程。【14】软件工程是开发、运行、维护和修复软件的系统化方法,它包含哪些要素试说明之。【15】软件工程学的基本原则有哪些试说明之。【16】有人说软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。对否请解释你的回答。五、习题解答【11】软件工程过程的基本过程活动有4步PPLAN软件规格说明。规定软件的功能及其运行的限制;DDO软件开发。产生满足规格说明的软件;CCHECK软件确认。确认软件能够完成客户提出的要求;AACTION软件演进。为满足客户的变更要求,软件必须在使用的过程中演进。【12】软件与任何一个事物一样,有它的孕育、诞生、成长、成熟、衰亡的生存过程。这就是软件的生存周期。它主要分为6个阶段软件项目计划、软件需求分析和定义、软件设计、程序编码、软件测试,以及运行维护。1软件项目计划在这一步要确定软件工作范围,进行软件风险分析,预计软件开发所需要的资源,建立成本与进度的估算。根据有关成本与进度的限制分析项目的可行性。2软件需求分析和定义在这一步详细定义分配给软件的系统元素。可以用以下两种方式中的一种对需求进行分析和定义。一种是正式的信息域分析,可用于建立信息流和信息结构的模型,然后逐渐扩充这些模型成为软件的规格说明。另一种是软件原型化方法,即建立软件原型,并由用户进行评价,从而确定软件需求。3软件设计软件的设计过程分两步走。第一步进行概要设计,以结构设计和数据设计开始,建立程序的模块结构,定义接口并建立数据结构。此外,要使用一些设计准则来判断软件的质量。第二步做详细设计,考虑设计每一个模块部件的过程描述。经过评审后,把每一个加细的过程性描述加到设计规格说明中去。4程序编码在设计完成之后,用一种适当的程序设计语言或CASE工具生成源程序。应当就风格及清晰性对代码进行评审,而且反过来应能直接追溯到详细设计描述。5软件测试单元测试检查每一单独的模块部件的功能和性能。组装测试提供了构造软件模块结构的手段,同时测试其功能和接口。确认测试检查所有的需求是否都得到满足。在每一个测试步骤之后,要进行调试,以诊断和纠正软件的故障。6软件维护为改正错误,适应环境变化及功能增强而进行的一系列修改活动。与软件维护相关联的那些任务依赖于所要实施的维护的类型。【13】瀑布模型规定了各项软件工程活动,包括制定软件项目计划,进行需求分析和定义,软件设计,程序编码,测试及运行维护。并且规定了它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。然而软件开发的实践表明,上述各项活动之间并非完全是自上而下,呈线性图式。实际情况是,每项开发活动均应具有以下特征1从上一项活动接受本项活动的工作对象,做为输入;2利用这一输入实施本项活动应完成的内容;3给出本项活动的工作成果,做为输出传给下一项活动;4对本项活动实施的工作进行评审。若其工作得到确认,则继续进行下一项活动,否则返回前项,甚至更前项的活动进行返工。【14】软件工程包括三个要素方法、工具和过程。软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。软件工程方法常采用某一种特殊的语言或图形的表达方法及一套质量保证标准。软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经推出了许多软件工具,已经能够支持上述的软件工程方法。特别地,已经有人把诸多的软件工具集成起来,使得一种工具产生的信息可以为其它的工具所使用,这样建立起一种被称之为计算机辅助软件工程CASE的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑。【15】在软件开发过程中必须遵循下列软件工程原则。抽象采用分层次抽象,自顶向下、逐层细化的办法进行功能分解和过程分解,可以由抽象到具体、由复杂到简单,逐步得到问题的解。信息隐蔽遵循信息封装,使用与实现分离的原则,将模块设计成“黑箱”,可以将实现的细节隐藏在模块内部,使用者只能通过模块接口访问模块中封装的数据。模块化按模块划分系统的体系结构,使得各模块间有良好的接口。这样有助于信息隐蔽和抽象,有助于表示复杂的系统。局部化按抽象数据类型思想及问题域中的概念来建立模块,确保模块之间低耦合,模块内部高内聚。这有助于控制解的复杂性。确定性软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间的沟通,保证整个开发工作协调一致。一致性强调软件开发过程的标准化、统一化。包括文档格式的一致,工作流程的一致,内、外部接口的一致,系统规格说明与系统行为的一致等。完备性软件系统不丢失任何重要成分,可以完全实现系统所要求功能。可验证性开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。【16】软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。这个说法是对的。在1970年代,GTE、TRW和IBM等三家公司对此问题做了独立研究,最后它们得到相似的结论阶段需求分析软件设计程序编码单元测试验收测试维护相对修复代价01020512520从表中可以看出,在需求分析阶段检查和修复一个错误所需的代价只有编码阶段所需代价的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。第二章软件需求分析一、复习要求1了解软件需求的目标和任务。2了解软件软件需求的获取方法。3了解可行性研究的方法和可行性研究报告的主要内容。4掌握结构化分析方法。5了解支持需求分析的原型化方法。6了解需求规格说明和需求评审的主要内容。二、内容提要1软件需求分析的目标和任务软件需求分析的目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其它系统元素的接口细节,定义软件的其它有效性需求。需求分析阶段研究的对象是软件项目的用户要求。一方面,必须全面理解用户的各项要求,但又不能全盘接受所有的要求,另一方面,要准确地表达被接受的用户要求。只有经过确切描述的软件需求才能成为软件设计的基础。通常软件开发项目是要实现目标系统的物理模型。作为目标系统的参考,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。其实现步骤如图21所示。图21参考当前系统建立目标系统模型2需求分析的过程需求分析阶段的工作,可以分成以下四个方面1问题识别首先系统分析人员要确定对目标系统的综合要求,即软件的需求。并提出这些需求实现条件,以及需求应达到的标准。这些需求包括功能需求、性能需求、环境需求、可靠性需求、安全保密要求、用户界面需求、资源使用需求、软件成本消耗与开发进度需求,并预先估计以后系统可能达到的目标。此外,还需要注意其它非功能性的需求。如针对采用某种开发模式,确定质量控制标准、里程碑和评审、验收标准、各种质量要求的优先级等,以及可维护性方面的需求。此外,要建立分析所需要的通信途径,以保证能顺利地对问题进行分析。分析所需的通信途径如图22所示。图22软件需求分析的通信途径2分析与综合问题分析和方案的综合是需求分析的第二方面的工作。分析员必须从信息流和信息结构出发,逐步细化所有的软件功能,找出系统各元素之间的联系、接口特性和设计上的限制,判断是否存在因片面性或短期行为而导致的不合理的用户要求,是否有用户尚未提出的真正有价值的潜在要求。剔除其不合理的部分,增加其需要部分。最终综合成系统的解决方案,给出目标系统的详细逻辑模型。3编制需求分析阶段的文档已经确定下来的需求应当得到清晰准确的描述。通常我们把描述需求的文档叫做软件需求说明书。同时,为了确切表达用户对软件的输入输出要求,还需要制定数据要求说明书及编写初步的用户手册。4需求分析评审作为需求分析阶段工作的复查手段,应该对功能的正确性、文档的一致性、完备性、准确性和清晰性,以及其它需求给予评价。为保证软件需求定义的质量,评审应以专门指定的人员负责,并按规程严格进行。评审结束应有评审负责人的结论意见及签字。除分析员之外,用户需求者,开发部门的管理者,软件设计、实现、测试的人员都应当参加评审工作。3需求获取技术需求获取技术包括两方面的工作建立获取用户需求的方法的框架;支持和监控需求获取的过程的机制。获取用户需求的主要方法是调查研究。1了解系统的需求。软件开发常常是系统开发的一部分。仔细分析研究系统的需求规格说明,对软件的需求获取是很有必要的。2市场调查。了解市场对待开发软件有什么样的要求;了解市场上有无与待开发软件类似的系统。如果有,在功能上、性能上、价格上情况如何。3访问用户和用户领域的专家。把从用户那里得到的信息作为重要的原始资料进行分析;访问用户领域的专家所得到的信息将有助于对用户需求的理解。4考察现场。了解用户实际的操作环境、操作过程和操作要求。对照用户提交的问题陈述,对用户需求可以有更全面、更细致的认识。在做调查研究时,可以采取如下的调查方式制定调查提纲,向不同层次的用户发调查表。按用户的不同层次,分别召开调查会,了解用户对待开发系统的想法和建议。向用户领域的专家或在关键岗位上工作的人个别咨询。实地考察,跟踪现场业务流程。查阅与待开发系统有关的资料。使用各种调查工具,如数据流图、任务分解图、网络图等。为了能够有效地获取和理清用户需求,应当打破用户(需方)和开发者(供方)的界限,共同组成一个联合小组,发挥各自的长处,协同工作。4可行性研究和可行性研究报告1可行性研究这是在软件项目计划阶段应该做的事情,包括四个方面的研究经济可行性进行成本效益分析。从经济角度判断系统开发是否“合算”。技术可行性进行技术风险评价。从开发者的技术实力、以往工作基础、问题的复杂性等出发,判断系统开发在时间、费用等限制条件下成功的可能性。法律可行性确定系统开发可能导致的任何侵权、妨碍和责任。方案的选择评价系统或产品开发的几个可能的候选方案。最后给出结论意见。2经济可行性分析员需要进行成本效益分析。所谓成本,包括购置并安装软、硬件及有关设备的费用;系统开发费用;系统安装、运行及维护的费用;人员培训费用。而效益是指系统为用户增加的收入或为用户节省的开支,这是有形的效益;给潜在用户心理上造成的影响,这是无形的效益。它可以转化为有形的效益。3技术可行性分析员需要根据系统的功能、性能需求,建立系统模型。然后对此模型进行一系列的试验、评审和修改。最后由项目管理人员作出是否进行系统开发的决定。如果开发技术风险很大,或者模型演示表明当前采用的技术和方法不能实现系统预期的功能和性能,或者系统的实现不支持各子系统的集成,则项目管理人员可以作出停止系统开发的决定。4方案的选择分析员考虑问题解决的方案。一般采用将一个大而复杂的系统分解为若干个子系统的办法来降低解的复杂性。如何进行系统分解、如何定义各子系统的功能、性能和界面,实现方案不唯一。可以采用折衷的方法,反复比较各个方案的成本效益,选择可行的方案。5可行性研究报告可行性报告的形式可以有多种,但最重要的内容应当有项目背景问题描述实现环境限制条件管理概要和建议重要的研究结果说明建议影响候选方案候选系统的配置最终方案的选择标准系统描述系统工作范围的简要说明被分配系统元素的可行性经济可行性(成本效益分析)经费概算预期的经济效益技术可行性(技术风险评价)技术实力已有工作基础设备条件法律可行性系统开发可能导致的侵权,违法和责任用户使用可行性用户单位的行政管理,工作制度使用人员的素质其它与项目有关的问题其它方案介绍未来可能的变化可行性研究报告首先由项目负责人审查(审查内容是否可靠),再上报给上级主管审阅(估价项目的地位)。从可行性研究应当得出“行或不行”的决断。当然,在以后的开发阶段,还要其它“行还是不行”的决定。5结构化分析方法结构化分析方法最初由DOUGLASROSS提出,由DEMARCO推广,由WARD和MELLOR以及后来的HATLEY和PIRBHAI扩充,形成了今天的结构化分析方法的框架。结构化分析方法是一种建模技术。它建立的分析模型如图23所示。图23分析模型的结构在模型的核心是数据词典,它描述了所有的在目标系统中使用的和生成的数据对象。围绕着这个核心的有三种图实体关系图ERD描述数据对象及数据对象之间的关系;数据流图DFD描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换的功能(子功能);状态迁移图STD描述系统对外部事件如何响应,如何动作。因此,ERD用于数据建模,DFD用于功能建模,STD用于行为建模。数据建模数据模型包括三种互相关联的信息数据对象,描述对象的属性,描述对象间相互连接的关系。数据对象是需被目标系统所理解的复合信息的表示。所谓复合信息是具有若干不同特征或属性的信息。数据对象可以是外部实体(如显示器),事物(如报表或显示),角色(如教师或学生),行为(如一个电话呼叫)或事件(如单击鼠标左键),组织单位(如研究生院),地点(如注册室)或结构(如文件)。数据对象只封装了数据,没有包含作用于这些数据上的操作。这与面向对象范型中的类和对象不同。具有相同特征的数据对象组成的集合仍然称为数据对象,其中的某一个对象叫做该数据对象的一个实例。属性定义了数据对象的特征。它可用来为数据对象的实例命名;描述这个实例;建立对另一个数据对象的另一个实例的引用。如学生数据对象的属性可以有学号、姓名、性别、出生年月、籍贯等。为了唯一地标识数据对象的某一个实例,定义数据对象中的一个属性或几个属性为关键码KEY,书写为_ID,例如在“学生”数据对象中用“学号”做关键码,它可唯一地标识一个“学生”数据对象中的实例。关系各个数据对象的实例之间有关联。如一个学生“张鹏”选修两门课程“软件工程”与“计算机网络”,学生与课程的实例通过“选修”关联起来。实例的关联有三种一对一11;一对多1M;多对多NM。这种实例的关联称为“基数”。基数表明了“重复性”。如1位教师带学生班的30位同学,就是1M的关系。但也有1位教师带0位同学的情形。所以实例关联有是“可选”还是“必须”之分。用“”表示关系是可选的,用“”表示关系必须出现1次。如图24所示。这表明了关系的“参与性”。基数1位教师基数多位学生参与性必须的参与性可选的图24基数与参与性实体关系图数据对象及其关系可用ERD表示。图25给出学生选修课程的ERD及描述学生属性的实体对象表。数据对象表学号姓名性别出生年月籍贯图25简单的ERD和数据对象表2功能建模和数据流最初,结构化分析方法仅讨论数据流建模。目标系统被表示成如图26所示的数据变换流程图。系统的功能体现在核心的数据变换中。图26数据流图(DFD)功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。根据DEMARCO的论述,功能模型使用了数据流图来表达系统内数据的运动情况,而数据流的变换则用结构化英语、判定表与判定树来描述。数据流图图27是描述储户携带存折去银行办理取款手续的数据流图。从图中可以看到,数据流图的基本图形元素有四种,如图28所示。图27办理取款手续的数据流图图28DFD的基本图形符号在数据流图中,如果有两个以上数据流指向一个加工,或是从一个加工中引出两个以上的数据流,这些数据流之间往往存在一定的关系。为表达这些关系,在这些数据流的加工可以标上不同的标记符号。所用符号及其含意在图29中给出。图29表明多个数据流与加工之间关系的符号分层数据流图为了表达数据处理过程的数据加工情况,用一个数据流图是不够的。稍为复杂的实际问题,在数据流图上常常出现十几个甚至几十个加工。这样的数据流图看起来很不清楚。层次结构的数据流图能很好地解决这一问题。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统。图210给出分层数据流图的示例。数据处理S包括三个子系统1、2、3。顶层下面的第一层数据流图为DFDL1。第二层数据流图DFDL21、DFDL22及DFDL23分别是子系统1、2和3的细化。对任何一层数据流图来说,我们称它的上层图为父图,在它下一层的图则称为子图。图210分层数据流图画数据流图的基本步骤概括地说,就是自外向内,自顶向下,逐层细化,完善求精。检查和修改的原则为数据流图上所有图形符号只限于前述四种基本图形元素。顶层数据流图必须包括前述四种基本元素,缺一不可。顶层数据流图上的数据流必须封闭在外部实体之间。每个加工至少有一个输入数据流和一个输出数据流。在数据流图中,需按层给加工框编号。编号表明该加工处在哪一层,以及上下层的父图与子图的对应关系。规定任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。此即父图与子图的平衡。可以在数据流图中加入物质流,帮助用户理解数据流图。图上每个元素都必须有名字。数据流和数据文件的名字应当是“名词”或“名词性短语”,表明流动的数据是什么。加工的名字应当是“名词宾语”,表明做什么事情。数据流图中不可夹带控制流。初画时可以忽略琐碎的细节,以集中精力于主要数据流。加工规格说明加工规格说明用来说明DFD中的数据加工的加工细节。加工规格说明描述了数据加工的输入,实现加工的算法以及产生的输出。另外,加工规格说明指明了加工(功能)的约束和限制,与加工相关的性能要求,以及影响加工的实现方式的设计约束。必须注意,写加工规格说明的主要目的是要表达“做什么”,而不是“怎样做”。因此它应描述数据加工实现加工的策略而不是实现加工的细节。目前用于写加工规格说明的工具有结构化英语、判定表和判定树。针对实时系统的WARDMELLOR扩展这种扩展可以适应实时系统提出的以下要求在时间连续的基础上接收或产生数据流;贯穿系统的控制信息和相关的控制处理;在多任务的情况下可能会遇到同一个加工的多个实例;系统状态以及导致系统状态迁移的机制。图211给出的扩展的图形符号可以让分析员在描述数据流和加工的同时,描述控制流和控制加工。这些符号可以与原来的数据流图的图形符号混用。图211WARDMELLOR开发的针对实时系统的扩展的结构化分析符号例如,图212给出一个基于计算机的水温控制系统的处理。水温测量仪连续传送水温数据给温度监控加工模块,该加工将水温与允许波动范围进行比较,输出校正数据给温度调节装置。图212时间连续的数据流与普通数据流图213给出一个制造车间的数据和控制流的顶层流图。事件可以作为普通数据加工的输入数据流,控制也可以接收普通的输入数据流。图213使用WARDMELLOR符号的数据流和控制流HATLEY和PIRBHAI对结构化分析技术的扩展WARDPIRBHAI方法主要关注面向控制的规格说明,而不是扩充数据流图的图形符号。他们建立控制流图CFD以区别于数据流图DFD。在控制流图中的加工与数据流图中相同,但传递的是控制流而不是数据流。在控制流图中引入实短线“|”表示对控制规格说明的引用。图214给出他们建立的实时系统模型。用数据流图表示对数据和操作数据的加工;用控制流图表示事件在加工之间如何流动,说明导致各个加工激活的外部事件。图214数据与控制之间的关系3行为建模行为建模给出需求分析方法的所有操作原则,但只有结构化分析方法的扩充版本才提供这种建模的符号。状态迁移图利用如图215所示的状态迁移图STD或状态迁移表来描述系统或对象的状态,以及导致系统或对象的状态改变的事件,从而描述系统的行为。图215状态迁移图与其等价的状态迁移表例每一个状态代表系统或对象的一种行为模式。状态迁移图指明系统的状态如何相应外部的信号(事件)进行推移。在状态迁移图中,用圆圈“”表示可得到的系统状态,用箭头“”表示从一种状态向另一种状态的迁移。在箭头上要写上导致迁移的信号或事件的名字。如图215A所示,系统中可取得的状态S1,S2,S3,事件T1,T2,T3,T4。事件T1将引起系统状态S1向状态S3迁移,事件T2将引起系统状态S3向状态S2迁移,等等。图215B就是与图215A等价的状态迁移表。另外,状态迁移图指明了作为特定事件的结果(状态)。在状态中包含可能执行的行为(活动或加工)。如果系统比较复杂,可以把状态迁移图分层表示。例如,在确定了如图216所示那样的大状态S1,S2,S3之后,接下来就可把状态S1,S2,S3细化。在该图中对状态S1进行了细化。此外,在状态迁移图中,由一个状态和一个事件所决定的下一状态可能会有多个。实际会迁移到哪一个是由更详细的内部状态和更详细的事件信息来决定的。此时,可采用状态迁移图的一种变形,如图217那样,使用加进判断框和处理框的记法。图216状态迁移图的网图217状态迁移图的变形PETRI网PETRI网,简称PNGPETRINETGRAPH。它适用于描述相互独立、协同操作的处理系统,即并发执行的处理系统。在软件需求分析与设计阶段都可以使用。PETRI网是一种有向图,它有两种结点“”表示系统的状态。“”或“”表示系统中的事件。图中的有向边表示对事件的输入,或从事件输出“”表示对事件的输入;“”表示事件的结果,即从事件的输出。图218用PETRI网描述了在一个多任务系统中的两个进程PR1和PR2使用一个公共资源R时,利用原语LOCK(对资源加锁)和UNLOCK(对资源解锁)控制R的使用,保证进程间的同步的例子。图218进程同步机制的PNG图中每个进程是一个数据对象,它有三个状态等待资源(P1或P4),占用资源执行的处理(P2或P5),不占用资源执行的处理(P3或P6),另外系统有一个状态资源空闲(P7)。在有的状态中有一个黑点“”,称为标记或令牌,表明系统或对象当前正处于此状态。当作为一个事件的输入的所有状态都得到或保有令牌时,才能引起该事件“激发”。使得系统和对象的状态向前推移,完成系统和对象的某些行为。控制规格说明控制规格说明从两个方面给出系统的行为。其一是状态迁移图STD,它是行为的“顺序规格说明”。其二是加工激活表PAT,它是行为的“组合规格说明”,表明当事件激发时,数据流图中的哪些加工要被激活。控制规格说明仅描述了系统的行为,不提供被激活的加工的内部工作的细节。4数据词典分析模型中包含了对数据对象、功能和控制的表示。在每一种表示中,数据对象和控制项都扮演一定的角色。为表示每个数据对象和控制项的特性,建立了数据词典。数据词典精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。词条描述在数据词典的每一个词条中应包含以下信息名称数据对象或控制项、数据存储或外部实体的名字。别名或编号。分类数据对象加工数据流数据文件外部实体控制项(事件状态)描述描述内容或数据结构等。何处使用使用该词条(数据或控制项)的加工。内容描述在数据词典的编制中,分析员最常用的描述内容或数据结构的符号如表21所示。表21数据词典定义式中的符号符号含义解释,|MN“”被定义为与或或重复重复可选基本数据元素连结符例如,XAB,表示X由A和B组成。例如,XA,B,XA|B,表示X由A或由B组成。例如,XA,表示X由0个或多个A组成。例如,X3A8,表示X中至少出现3次A,至多出现8次A。例如,XA,表示A可在X中出现,也可不出现。例如,X“A”,表示X为取值为A的数据元素。例如,X19,表示X可取1到9之中的任一值。图219存折格式在图27表示的取款数据流图中,数据文件“存折”的格式如图219所示,它在数据词典中的定义格式为存折户名所号帐号开户日性质(印密)1存取行50户名2字母24所号“001”“999”注储蓄所编码,规定三位数字帐号“00000001”“99999999”注帐号规定由八位数字组成开户日年月日性质“1”“6”注“1”表示普通户,“5”表示工资户等印密“0”注印密在存折上不显示存取行日期(摘要)支出存入余额操作复核日期年月日字母“A”“Z”|“A”“Z”数据词典明确地定义了各种信息项。随着系统规模的增大,数据词典的规模和复杂性将迅速增加。6用于支持需求分析的快速原型化方法通常,原型是指模拟某种产品的原始模型。在软件开发中,原型是软件的一个早期可运行的版本,它反映最终系统的部分重要特性。如果在获得一组基本需求说明后,通过快速分析构造出一个小型的软件系统,满足用户的基本要求。使得用户可在试用原型系统的过程中得到亲身感受和受到启发,做出反应和评价。然后开发者根据用户的意见对原型加以改进。随着不断试验、纠错、使用、评价和修改,获得新的原型版本,如此周而复始,逐步减少分析和通信中的误解,弥补不足之处,进一步确定各种需求细节,适应需求的变更,从而提高了最终产品的质量。1原型的分类由于运用原型的目的和方式不同,原型可分为以下两种不同的类型废弃型先构造一个功能简单而且质量要求不高的模型系统,针对这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东房屋租赁合同范本官方版
- 第12课 健康文明地上网教学设计-2025-2026学年小学信息技术(信息科技)第2册鲁教版
- 鲁科版高中化学必修1第一章认识化学科学第2节 研究物质性质的方法和程序第2课时 教学设计1
- 二、保存网页中的图片说课稿-2025-2026学年小学信息技术粤教版四年级上册-粤教版
- 关于证券公司工作总结
- 地板施工与节能环保合同
- 独立担保合同在艺术品交易中的风险预防与合同保障
- 地砖施工与竣工验收合同范本
- 2025办公室租赁合同调整计划
- 民航企业代缴社保及航空安全协议
- 小学体育家长会课件
- 教育的人口功能
- 抗凝剂皮下注射技术临床实践指南2024版
- 中小学教辅材料征订管理制度
- 2025年芳香保健师(初级)职业技能鉴定理论考试真题解析试卷
- 2025年陕西省中考数学试题(原卷版)
- 腰椎管狭窄症病例讨论
- 二衬混凝土浇筑施工技术
- 2025至2030全球及中国护理教育行业项目调研及市场前景预测评估报告
- 培训课件的字体版权
- 注塑加工项目可行性研究报告
评论
0/150
提交评论