




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程,目的是使学生了解软件项目开发和维护的一般过程,掌握软件开发的传统方法和面向对象方法,从工程化角度培养学生从事大型软件特别是面向对象式系统开发、软件测试与管理的能力,为更深入地学习打下良好的基础。,.,软件工程,普通高等教育“十二五”规划教材高等学校计算机科学与技术系列教材,钟珞袁景凌编著,参考书:面向对象与传统软件工程(中文版.4thEdition)机械工业出版社StephenR.Schach著韩松邓迎春李萍等译,2003,.,第一章软件工程学概论,.,1.1软件危机1.2软件工程1.3软件生命周期1.4软件过程,.,1.1软件危机,软件Software=Program+Data+Document软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操纵信息的数据结构,文档是与程序开发,维护和使用有关的图文材料,.,软件的发展,1946-1956年从计算机问世到实用的高级程序语言出现前存储容量比较小,运算速度比较慢采用个体工作方式,用低级语言编写程序应用领域主要是以数值数据处理为主的科学计算,其特点是输入、输出量较小衡量程序质量的标准主要是功效,即运行时间省、占用内存小主要研究内容是科学计算程序、服务性程序和程序库,研究对象是顺序程序,.,1956-1968年从实用的高级程序语言出现到软件工程出现前存储器容量大,外围设备得到迅速发展,出现了高级程序设计语言应用领域包括数据处理(非数值数据),其特点是计算量不大,但输入、输出量却较大高速主机与低速外围设备的矛盾突出,出现了操作系统、并发程序、数据库及其管理系统20世纪60年代初提出了软件一词,开始认识到文档的重要性研究高级程序设计语言、编译程序、操作系统、支持编程的工具及各种应用软件工作方式逐步从个体方式转向合作方式出现软件危机,.,1968年-至今从软件工程出现到现在硬件向巨型机和微型机二个方向发展,出现了计算机网络,软件方面提出了软件工程,出现了“计算机辅助软件工程”(CASE)计算机的应用领域渗透到各个业务领域,出现了嵌入式应用,其特点是受制于它所嵌入的宿主系统开发方式逐步由个体合作方式转向工程方式软件工程方面的研究主要包括软件开发模型、软件开发方法及技术、软件工具与环境、软件过程、软件自动化系统等软件方面研究以智能化、自动化、集成化、并行化、以及自然化为标志的软件开发新技术,.,软件危机,软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.,.,软件危机主要有以下表现:,对软件开发成本和进度的估计常常不准确。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。用户对“已完成”系统不满意的现象经常发生。软件产品的质量往往靠不住。Bug一大堆,Patch一个接一个。软件的可维护程度非常之低。软件通常没有适当的文档资料。软件的成本不断提高。软件开发生产率的提高赶不上硬件的发展和人们需求的增长。,.,软件危机的原因,一方面是与软件本身的特点有关另一方面是由软件开发和维护的方法不正确有关,.,软件特征,软件是一种逻辑实体,具有抽象性软件没有明显的制造过程软件在使用过程中,没有磨损、老化的问题软件对硬件和环境有着不同程度的依赖性软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低软件是复杂的,而且以后会更加复杂软件的成本相当昂贵大多数软件是自定的,而不是通过已有的构件组装而来的,实际问题的复杂性程序逻辑结构的复杂性,.,3、消除软件危机的途径,对计算机软件有一个正确的认识(软件程序)必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。推广使用在实践中总结出来的开发软件的成功技术和方法。开发和使用更好的软件工具。加强软件管理,.,软件的分类,按功能分:系统软件:属于计算机系统中最靠近硬件的一层,其它软件一般都通过系统软件发挥作用,它与具体的应用领域无关。如操作系统、编译程序等。支持软件:支持软件的开发和维护的软件。如数据库管理系统、网络软件、软件开发环境等。应用软件:特定应用领域专用的软件。如实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件等。,.,按软件工作方式划分:实时处理软件分时软件交互式软件批处理软件按软件服务对象的范围划分:项目软件产品软件,.,按使用的频度进行划分:一次使用频繁使用按软件失效的影响进行划分:高可靠性软件一般可靠性软件,.,1.2软件工程,工程,工程是对技术(或社会)实体的分析、设计、建造、验证和管理。,水利工程,建筑工程,机械工程,软件工程,传统工程,新兴工程,气象工程,生物工程,.,软件工程定义,1968年NATO(北大西洋公约组织)会议上首次提出Theestablishmentanduseofsoundengineeringprinciples(methods)inordertoobtaineconomicallysoftwarethatisreliableandworksonrealmachines.(1968-FritzBauer)Softwareengineering,(1)Theapplicationofasystematic,disciplined,quantifiableapproachtothedevelopment,operation,andmaintenanceofsoftware;thatis,theapplicationofengineeringtosoftware.(2)Thestudyofapproachesasin(1).(IEEEStd610-1990.),软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则,软件工程是(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;(2)对(1)中所述方法的研究,.,总之:软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。,.,软件工程是一门交叉学科,软件工程的主要研究内容软件开发技术:软件开发方法学软件开发过程软件工具和软件工程环境软件工程管理:软件管理学软件经济学软件心理学,.,2004软件工程知识体系指南,.,软件工程知识体系指南(2004版)GuidetotheSoftwareEngineeringBodyofKnowledge2004VersionIEEE计算机学会(IEEEComputerSociety),SWEBOK的10个知识域(KnowledgeAreas,KA),软件需求SoftwareRequirements软件设计SoftwareDesign软件构造SoftwareConstruction软件测试SoftwareTesting软件维护SoftwareMaintenance软件配置管理SoftwareConfigurationManagement软件工程管理SoftwareEngineeringManagement软件工程过程SoftwareEngineeringProcess软件工程工具和方法SoftwareEngineeringToolsandMethods软件质量SoftwareQuality,.,.,.,软件工程本质特征,软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品,.,软件工程的基本原理,用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性,.,“软件工程”课程与其它软件专业课的区别,(1)立足于系统的整体。(2)讲授系统分析、系统设计、测试及维护的理论和方法。(3)构筑一个软件系统,实践软件开发全过程。,.,3、软件工程方法学,把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。(MethodologyorParadigm)软件工程方法学包含3个要素:方法、工具和过程方法完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具为运用方法而提供的自动的或半自动的软件工程支撑环境;过程为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,.,软件工程方法学分类:,传统方法学面向对象的方法学,.,传统方法学(生命周期方法学),仍然是使用十分广泛的软件工程方法学。采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。从上而下,顺序地完成软件开发的各阶段任务。,.,面向对象的方法学,出发点和基本原则是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识实践解决问题的方法与过程,从而使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。,.,1.3软件生命周期(softwarelifecycle),软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期软件生存周期大体可分为如下几个活动:问题定义、可行性研究、需求分析、设计、编码、测试、运行和维护,.,1.3软件生命周期,问题定义软件定义可行性研究需求分析总体设计详细设计软件生命周期软件开发编码测试运行维护持续满足用户需求,.,1.4软件过程,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。,.,软件开发模型,软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型也常称为:软件过程模型软件生存周期模型软件工程范型,.,软件过程模型,典型的软件过程模型有:瀑布模型(waterfallmodel)演化模型(evolutionarymodel)增量模型(incrementalmodel)原型模型(prototypingmodel)螺旋模型(spiralmodel)喷泉模型(waterfountainmodel)基于构件的开发模型(component-baseddevelopmentmodel)形式方法模型(formalmethodsmodel),.,1.瀑布模型(WaterfallModel),1970年W.Royce提出瀑布模型特征接受上一阶段的结果作为本阶段的输入利用这一输入实施本阶段应完成的活动对本阶段的工作进行评审将本阶段的结果作为输出,传递给下一阶段,.,传统的瀑布模型,需求分析,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,定义时期,开发时期,维护时期,.,传统的瀑布模型过于理想化。事实上,人在工作过程中不可能不犯错误。在设计阶段可能发现规格说明文档中的错误。而设计上的缺陷或错误可能在实现过程中显现出来。在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。,.,实际的瀑布模型,.,瀑布模型的优缺点,瀑布模型有许多优点:可强迫开发人员采用规范的方法(例如,结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成;开发者常常被不必要地耽搁。,.,许多软件项目在开发早期对软件需求的认识是模糊的、不确定的,因此软件很难一次开发成功。可以在获取了一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,称之为原型(prototype),然后根据用户在试用原型的过程中提出的意见和建议、或者增加新的需求,对原型进行改造,获得原型的新版本,重复这一过程,最终得到令客户满意的软件产品。演化模型的开发过程就是从构造初始的原型出发,逐步将其演化成最终软件产品的过程。演化模型适用于对软件需求缺乏准确认识的情况。典型的演化模型有:增量模型、原型模型、螺旋模型。,演化模型(EvolutionaryModel),.,原型(prototype)是预期系统的一个可执行版本,它反映了系统性质(如功能、计算结果等)的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。原型方法从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。然后快速制订原型开发的计划,确定原型的目标和范围,采用快速设计的方式对其建模,并构建原型。被开发的原型应交付给客户试用,并收集客户的反馈意见,这些反馈意见可在下一轮迭代中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发。,原型模型(PrototypeModel),.,原型的类型:探索型(exploratoryprototyping)其目的是要弄清目标系统的要求,确定所希望的特性,并探讨多种方案的可行性实验型(experimentalprototyping)其目的是验证方案或算法的合理性,它是在大规模开发和实现前,用于考核方案是否合适,规格说明是否可靠。演化型(evolutionaryprototyping)其目的是将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统。,.,原型的使用策略:废弃(throwaway)策略主要用于探索型和实验型原型的开发。这些原型关注于目标系统的某些特性,而不是全部特性,开发这些原型时通常不考虑与探索或实验目的无关的功能、质量、结构等因素,这种原型通常被废丢,然后根据探索或实验的结果用良好的结构和设计思想重新设计目标系统。追加(addon)策略主要用于演化型原型的开发。这种原型通常是实现了目标系统中已明确定义的特性的一个子集,通过对它的不断修改和扩充,逐步追加新的要求,最后使其演化成最终的目标系统。原型可作为单独的过程模型使用,它也常被作为一种方法或实现技术应用于其它的过程模型中。,.,快速原型模型工作过程,原型模型从需求收集开始。开发者和用户在一起定义软件的总体目标,标识出已知的需求,并规划出进一步定义的区域。然后是“快速设计”,快速设计集中于软件那些对用户可见部分的表示。“快速设计”导致原型的建造。原型由用户评估,并进一步精化待开发软件的需求,逐步调整原型使其满足客户的要求。同时开发者对将要做的事情有更好的理解,这个过程是迭代的。按线性模型构建软件系统,.,.,快速原型,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,变化的需求,验证,维护过程,开发过程,.,不带反馈环的,基本上是顺序的。因为-原型系统已通过与用户交互而得到验证。-开发人员建立原型时已得到很多知识。本质:快速,第一个系统常常抛弃(理想)理想上,原型可以作为标示软件需求的一种机制。如果建立了可运行原型,开发者就可以在此基础上试图利用已有的程序片断或使用工具来进快生成工作程序。但当原型已经完成了上述目的之后,我们将如何处理它们?,原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。开发人员通过建立原型系统已经学到了许多东西(至少知道了“系统不应该做什么,以及怎样不去做不该做的事情”),因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。,.,Brook给出了一个答案:“在大多数项目中,建造的第一个系统很少是可用的。它可能太慢,太大,难以使用或三者皆有。没有其它选择,只能重新开始,虽然痛苦,但会得到更好的结果。建造一个经过重新设计的版本,解决了上述的问题。当使用了新的系统概念或新技术时,你应该建造一个抛弃型的系统,因为即使是最好的计划也不可能是无所不知的,第一次就能完全正确。因此,管理上的问题不是你是否要建造一个指导系统,然后抛弃它,你必须这么做。唯一的问题是:是否需要事先计划好建造一个抛弃型系统,或是承诺要将抛弃型系统交付给用户。”,.,原型模型适用情况,用户定义了一组一般性目标,但不能标识出详细的输入、处理及输出需求;开发者可能不能确定算法的有效性、操作系统的适应性或人机交互的形式;原型模型可能是最好的选择,.,3.增量模型(渐增模型)(IncrementalModel)先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。,.,增量模型,需求分析,验证,规格说明,验证,设计,验证,维护,针对每个构件完成详细设计、编码和集成,经测试后交付给用户,.,增量模型,.,分析,分析,分析,分析,设计,设计,设计,设计,编码,编码,编码,编码,测试,测试,测试,测试,增量1,增量2,增量3,增量4,交付,交付,交付,交付,.,增量模型将软件的开发过程分成若干个日程时间交错的线性序列,每个线性序列产生软件的一个可发布的“增量”版本,后一个版本是对前一版本的修改和补充,重复增量发布的过程,直至产生最终的完善产品。增量模型融合了瀑布模型的基本成分(重复地应用)和演化模型的迭代特征增量模型强调每一个增量都发布一个可运行的产品,.,增量模型特别适用于:需求经常变化的软件开发市场急需而开发人员和资金不能在设定的市场期限之前实现一个完善的产品的软件开发增量模型能有计划地管理技术风险,如早期增量版本中避免采用尚未成熟的技术,.,增量模型的优点,在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。,.,使用增量模型的困难,在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。多个构件并行开发,具有无法集成的风险。,.,4.螺旋模型(SpiralModel),.,B.Boehm于1988年提出是瀑布模型和演化模型的结合,并增加了风险分析螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件风险分析:评价所选的方案,识别风险,消除风险工程实施:实施软件开发,验证工作产品客户评估:评价开发工作,提出修正建议,螺旋模型,.,螺旋模型的基本思想,使用原型及其他方法来尽量降低风险。,.,产品交付给用户后用户可能不满意;到了预定的交付日期软件可能还未开发出来;实际的开发成本可能超过预算;产品完成前一些关键的开发人员“跳槽”了;产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件等。,软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。例如:,.,快速原型,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,变化的需求,验证,风险分析,风险分析,风险分析,风险分析,风险分析,风险分析,可看作在每个阶段之前都增加了风险分析过程的快速原型模型。,简化的螺旋模型,.,.,螺旋模型出现了一些变种,它可以有3到6个任务区域。螺旋模型指引的软件项目开发沿着螺线自内向外旋转,每旋转一圈,表示开发出一个更为完善的新软件版本。如果发现风险太大,开发者和客户无法承受,则项目就可能因此而终止。多数情况下沿着螺线的活动会继续下去,自内向外,逐步延伸,最终得到所期望的系统。,.,螺旋模型,优点对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足;维护和开发之间并没有本质区别。特点风险驱动主要适用于内部开发的大规模软件项目要有具有丰富风险评估专门知识的开发人员,否则风险更大。,.,5.面向对象模型,喷泉模型(FountainModel)可重用部件组装模型(构件集成模型)(ComponentIntegrationModel),.,喷泉模型,分析,设计,实现,测试,集成,演化,.,喷泉模型是一种支持面向对象开发的模型体现迭代和无间隙特征迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统无间隙:开发活动之间不存在明显的边界,.,可重用部件组装模型(构件集成模型),使用重用技术的软件工程模型构件(components):可重用的软件成份可复用性(Reusability)集成化软件开发环境(ISEE),.,领域工程的目的是构建领域模型、领域基准体系结构和可复用构件库。领域分析分析该领域中各种应用系统的公共部分或相似部分,构建领域模型和领域基准体系结构(referencearchitecture),标识领域的候选构件。对候选构件进行可变性分析,以适应多个应用系统的需要。构建可复用构件,经严格测试和包装后存入可复用构件库(称为构件工程)。,.,应用系统工程的目的是使用可复用构件组装应用系统。分析待开发的应用系统,设计应用系统的体系结构,标识应用系统所需的构件。在可复用构件库
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医院信息化建设新趋势:电子病历系统医疗信息化技术创新报告001
- 2025年医院电子病历系统优化与医疗信息化产业生态协同创新模式实践报告001
- 2025年医药企业研发外包(CRO)模式下的合同管理与合规性报告
- 2025年工业互联网平台量子通信技术在智能物流领域的应用研究报告
- 风格美学培训课件
- 2025年工业互联网平台区块链智能合约安全防护技术与风险评估报告
- 2025年财富管理行业客户需求研究与服务升级策略报告
- 2025年储能电池热管理系统在智慧农业领域的应用前景报告
- 会计培训试讲课件
- 证监局法制培训课件下载
- 2025年下半年吉林省白城洮北区面向应征入伍高校毕业生招聘事业单位人员18人历年高频重点提升(共500题)附带答案详解
- 《课件铁路发展史》课件
- 消渴中医护理查房
- 儿童护照办理委托书
- 《中药调剂技术》课件-中药调剂的概念、起源与发展
- 《数据中心节能方法》课件
- 仓储式物流产业园建设项目可行性研究报告
- 2024年变电设备检修工(高级)技能鉴定理论考试题库-上(选择题)
- 中医诊所负责人合作协议书范文
- 循环系统疾病智慧树知到答案2024年哈尔滨医科大学附属第一医院
- 2024-2030年中国激光水平仪行业市场发展趋势与前景展望战略分析报告
评论
0/150
提交评论