软件工程经典教程之软件工程概述.ppt
第一章 软件工程概述,2,本章主要内容,1.0 计算机基础1.1 软件的概念1.2 软件危机1.3 软件工程1.4 软件生命周期1.5 软件开发过程模型1.6 软件开发方法简述,3,1.0 计算机基础,计算机组成冯 诺依曼体系结构输入设备输出设备存储器运算器控制器能存储计算步骤(程序)计算机中数的表示二进制八进制十进制数据:数值型,文本型,图形,图象,多媒体数据,计算机之父:冯 诺依曼,4,1.0 计算机基础,计算机语言语言类型:机器语言(二进制指令),汇编语言,高级语言BASIC,C,FORTRAN,COBOL,C+,JAVA,C#语言要素:词汇,语法,控制逻辑控制逻辑:顺序,分支,循环程序为解决某个计算问题,按事先设计的功能和性能要求执行的指令序列。如,计算圆面积:,5,1.0 计算机基础,数据结构:计算机存储、组织数据的方式。变量,数组,记录,文件存储结构(物理结构),逻辑结构算法:求解问题的步骤序列.(1)每个步骤精确描述,无歧义;(2)步骤是有限的;(3)可以用计算机表示。,程序=数据结构+算法,6,1.1 软件的概念,1.1.1 软件技术的发展阶段,1950,1960,1970,1980,1990,2000,程序设计阶段50至60年代初程序系统阶段60至70年代初软件工程阶段70年至90年代第四代技术阶段90年代之后,早期面向批处理有限的分布自定义软件,第二阶段多用户数据库实时软件产品,第三阶段分布式系统嵌入“智能”低成本硬件消费者的影响,第四阶段强大的桌面系统面向对象技术专家系统人工神经网络并行计算网络计算机,7,计算机软件发展的几个时期和特点,8,1.1 软件的概念,1.1.2 软件的定义计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所必需的数据(IEEE,1983)。软件=程序+数据+文档1.1.3 软件的特点,抽象性生产无明显制造过程无磨损性对计算机硬件依赖性软件的手工开发方式,软件本身复杂性高软件的高成本规模大应用范围广,9,1.1 软件的概念,1.1.4 软件的分类,按功能应用软件:Photoshop,Office系统软件:Windows,Linux,驱动程序支撑软件:Visual Studio,Rose,按工作方式分时软件(多任务)实时软件(单任务)交互式软件批处理式软件(*.bat),按服务对象项目软件(科研课题软件)市场软件(ACD See),10,1.1 软件的概念,按规模微型小型中型大型甚大极大,嫦娥一号卫星任务控制软件:98.8万行源代码Windows 95:1500万行 Windows 98:1800万行 Windows XP:3500万行 Windows Vista:5000万行,11,1.2 软件危机,1.2.1 什么是软件危机计算机系统发展的早期时代所形成的错误概念与做法,严重阻碍了计算机软件的开发人们将60年代后期,在软件的开发和维护过程中,遇到的一系列严重问题,统称为软件危机。软件开发费用和进度难以控制开发的软件不能满足用户需求软件可维护性差软件质量差概括起来,一是如何开发软件,以满足社会对软件日益增长的需求;二是如何维护数量不断增长的已有软件产品。,12,1.2 软件危机,1.2.2 软件危机产生的原因与软件本身的特点有关软件是一种逻辑实体,抽象性强,开发质量较难评价,开发过程管理和控制较难。软件生产没有明显的制造过程,生产过程表现为人脑的思维过程,具有不可见性。软件存在退化问题,要根据硬件及环境的需求及变化进行修改。软件对硬件和环境有不同的依赖,造成软件升级和移植问题。软件规模越来越大,复杂性越来越高。软件成本昂贵,要投入大量的、复杂的、高强度的脑力劳动。软件工作涉及许多社会因素。机构、体制、管理等都可能影响软件工作的成败。,13,14,1.2 软件危机,与软件开发的方法和技术有关对软件开发与维护存在诸多错误认识。如软件与程序概念不清、忽视软件开发前期调研和系统分析工作、开发方法没有统一规范的方法论指导、忽视测试阶段工作、轻视软件维护(紫光拼音)等。软件开发与维护方法不正确。软件生产不能摆脱手工方式,效率低;软件涉及各个行业,常涉及其他行业专业知识,应该有比较明确的分工。实际上,往往项目中只有几个程序员,既负责系统分析设计,还负责编码,对软件工程师要求过高,且软件对开发者依赖性非常强。,15,1.2 软件危机,1.2.3 解决软件危机的途径既要有技术措施(方法和工具),又要有必要的组织管理措施。将软件开发看作是一个工程项目正确地应用各种方法和工具有效地使用各种软件工具和环境按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。为了解决软件危机,既要有技术措施,也要有组织管理措施,软件工程正是从技术和管理两方面来研究如何更好地开发和维护计算机软件的。,16,1.3 软件工程(Software Engineering,SE),1.3.1 软件工程的定义:Bauer,1968:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。IEEE83:开发、运行、维护和修复软件的系统方法。IEEE93:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。软件工程:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文档资料。软件工程学:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。,17,1.3 软件工程,1.3.2 软件工程的内容软件工程学的主要内容是软件开发技术和软件工程管理。软件开发技术包含软件工程方法学、软件工具和软件开发环境;软件工程管理学包含软件工程经济学和软件管理学。应用计算机、数学及管理科学等原理,借鉴传统工程的原则方法,创建软件以达到提高质量,降低成本的目的。计算机科学、数学用于构造模型与算法。工程科学用于制定规范设计、评估成本及确定权衡。管理科学用于计划、资源、质量、成本等管理。,18,1.3 软件工程,1.3.3 软件工程的三要素工具:为软件工程方法提供自动或半自动的软件支撑环境。计算机辅助软件工程(CASE)。方法:提供软件开发的各种方法。包括项目计算与估算方法、需求分析和设计方法、编程测试方法、维护方法等。过程:为了获得高质量软件需要完成的一系列任务的框架,规定了完成各项任务的步骤。规定了“什么人在什么时候用什么方法做什么事情”。1.3.4 软件工程层次图,19,1.3 软件工程,1.3.5 软件工程的基本原理Boehm于1983年提出软件工程的7条基本原理,一般认为这是确保软件产品质量和开发效率的最小集合。严格按照软件生命周期各阶段计划进行管理 坚持进行阶段评审实施严格的产品控制采纳现代先进的程序设计技术结果应能清楚地审查开发小组的人员应少而精承认不断改进软件工程实践的必要性成功软件工程的基本要求=1分技术+6分管理,20,1.3 软件工程,1.3.6 软件工程的基本目标软件工程需要解决的问题主要有:软件成本、软件可靠性、软件维护、软件生产率和软件复用。软件工程是一门工程性学科,其目的是采用各种技术和管理上的手段组织实施软件工程项目,成功的创建软件系统。项目成功的几个基本目标:付出较低的开发成本,在规定时限内满足用户功能、性能要求。开发的软件移植性要比较好。易于维护且维护费用较低。软件系统的可靠性高。目标难以同时满足,可在保证项目成功的前提下,作出权衡。为了使整个组织具有最好的战斗力,我们要重用几个人,照顾一些人,在万不得已的情况下委屈一批人。,21,1.3 软件工程,1.3.7 软件工程的开发原则模块化:复杂问题分解为较小的、相对独立的、容易求解的子问题,有助于抽象和表示复杂系统。抽象和信息隐藏:抽象抓住主要问题,忽略无干细节;信息隐藏有助于保证模块的独立性。模块的高内聚低耦合:模块内尽量紧密,模块间尽量松散。确定性:概念表达规范、确定,无二义性。一致性:遵循统一、规范的方法,开发过程标准化。完备性:开发运行过程中严格评审,保证各阶段开发结果的有效性。,22,1.4 软件过程和软件生命周期,1.4.1 软件过程ISO 9000:把输入转化为输出的一组彼此相关的资源和活动。软件过程是为了获得高质量软件产品,在软件工具支持下由软件工程师完成的一些列软件工程活动。软件过程规定了完成各项任务的工作步骤,与软件生存周期、生存期模型、软件开发工具和参与开发的人员等多方面因素有关。软件开发过程是把用户要求转化为软件需求,把软件需求转化为设计,用代码来实现设计、对代码进行测试,完成文档编制并确认软件可以投入运行使用的过程。软件过程定义了运用方法的顺序、应该交付的文档、开发软件的管理措施和各阶段任务完成的标志。,23,1.4 软件过程和软件生命周期,1995年,国际标准化组织公布了新的国际标准ISO/IEC 12207 信息技术软件生存期过程,将软件开发需要完成的活动概括为主要过程、支持过程和组织过程,每一大过程又包括若干具体过程,共17个。,24,1.4 软件过程和软件生命周期,1.4.2 软件生命周期软件生命周期(Software Life Cycle)指软件产品或软件系统孕育、诞生、成长、成熟、衰亡的生存过程,是软件从设计、投入使用到被淘汰的全过程。软件生命周期是跨越软件生存期的系统开发、运行、维护所实施的全部活动和任务的过程框架。软件生命周期模型是软件工程思想的具体化,包含三个主要阶段:软件定义、软件开发及软件运行维护。,25,1.4 软件过程和软件生命周期,1.4.3 软件生命周期的八个阶段(1)问题定义:系统分析员就问题性质、工程目标和规模等,提出书面报告。(2)可行性研究与计划:确定问题是否有行得通的解决方法。是在较高抽象层次上,进行的分析和设计过程。目的是更准确地确定工程的规模和目标,更准确地分析成本/效益,最终决定是否实施项目。(3)需求分析:确定目标系统必须具备哪些功能。(4)总体设计:描述每种可能的实现方案,估计每种方案的成本和效益;设计软件的体系结构。(5)详细设计:设计出软件的详细规格说明,为编码工作提供“蓝图”。,26,1.4 软件过程和软件生命周期,(6)编码和单元测试(7)综合测试集成测试:将结构单元集成起来,进行测试。验收确认测试:按需求规格说明书,用户进行测试。(8)使用和维护:使软件系统持久地满足用户不断变化的需求。通常有四类活动:改正性维护:修改已发现的错误。适应性维护:为适应变化了的环境,而修改软件。完善性维护:根据用户的要求,改进和扩充软件,使之完善。预防性维护:为将来的维护活动作准备,而修改软件。如为提高软件的可维护性,而进行的修改。,27,1.5 软件开发过程模型,软件开发过程模型也称生命周期模型,是软件生命周期中系统开发、运行、维护等实施活动的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。软件开发模型也常称为软件过程模型、软件生命周期模型、软件工程范型。,28,1.5 软件开发过程模型,1.5.1 瀑布模型(Waterfall Model),定义阶段,开发阶段,维护阶段,29,1.5 软件开发过程模型,瀑布模型的特点(1)阶段之间具有顺序性和依赖性前一阶段的工作完成后,才能开始下一阶段工作。前一阶段的输出文档就是后一阶段工作的基础。某一阶段发现错误要追溯到前面阶段,代价较大。(2)尽可能地推迟实现程序代码只是软件的一部分,而不是全部。清楚地区分分析、设计与实现,尽可能推迟软件实现。(3)确保质量每阶段都必须完成规定的文档。每阶段结束前,都要对所完成的文档进行评审,及早改正错误,评审通过才能进入下一阶段。,30,1.5 软件开发过程模型,瀑布模型的局限性项目开始阶段,开发人员和用户对项目的描述往往是不全面的,可能影响到后面各个阶段。瀑布模型是以文档形式驱动的,系统修改维护难度较大。开发过程中,事先选择的技术或需求迅速发生变化,需要返回到前面某阶段进行修改。,总之,瀑布模型是一种理想的线性开发模式,但缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。开发过程中,用户看不到软件是什么样子,开发完成后,如果用户发现有不满意的地方,为时已晚。随着软件开发项目的规模日益扩大,瀑布模型缺乏灵活性的缺点引发的问题更为严重。,31,1.5 软件开发过程模型,1.5.2 原型模型原型法首先构造一个功能简单的原型系统,然后通过对原型系统逐步求精,不断扩充完善得到最终的软件系统。这个模型可在运行中被检查、测试、修改,直到它的性能达到用户需求为止。因而这个工作模型很快就能转换成原样的目标系统。,32,1.5 软件开发过程模型,原型法优点用户支持,在系统生存期的各阶段起到积极的作用能够处理用户的模糊需求有利于维护,提高用户满意度用户在开发过程中学习了解软件开发费用降低,时间缩短,减少系统开发的风险应用原型法要规避以下误区将次要需求当作主要需求建模用户不断提出要求,因修改错误忽略主要部分的开发修改原型模型时忽略文档更新不断修改原型满足用户需求,忽略用户的实际应用环境是否适合。,33,1.5 软件开发过程模型,1.5.3 螺旋模型(Spiral Model),34,1.5 软件开发过程模型,螺旋模型将瀑布模型和快速原型模型结合起来,强调了其他模型忽视的风险分析,适合大型复杂系统。螺旋模型由风险驱动,强调可选方案和约束条件,从而支持软件的重用,将软件质量作为特殊目标融入产品开发之中。螺旋模型每旋转一圈便开发出更完善的一个新版本软件开发又前进一个层次系统又生成一个新版本而软件开发的时间和成本又有了新的投入得到一个客户满意的软件版本,35,1.5 软件开发过程模型,螺旋模型的限制条件强调风险分析,但要求客户接受和相信这种分析,并做出相关反应是不容易的。对开发人员的风险评估经验和专门知识要求较高,否则将会带来更大的风险。如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。,36,1.5 软件开发过程模型,1.5.4 喷泉模型(Fountain Model),需求阶段,分析阶段,设计阶段,编程阶段,集成与测试阶段,维护与演进阶段,37,1.5 软件开发过程模型,喷泉模型特点喷泉模型是对象驱动的过程,用于支持面向对象开发过程。使用面向对象方法开发软件时,主要活动是定义和不断完善对象,软件开发生存期各阶段划分不是很明显。软件开发活动之间没有明显的间隙。无间隙是指各项开发活动,即分析、设计和编码之间不存在明显的边界,随着开发过程的推进,需不断的对前面工作进行细化和完善,各开发步骤经多次反复迭代。喷泉模型具有迭代的特性,自然支持复用。系统某个部分常常重复工作多次,相关对象在每次迭代中随之加入演进的软件成分。喷泉模型较好的体现了面向对象开发方法的模型。,38,1.5 软件开发过程模型,1.5.5 构件组装模型,标识性选购件,进行下一次迭代,在库中查找构件,将新构件存入库中,若存在提取构件,若不存在创建构件,39,1.5 软件开发过程模型,模型以面向对象技术为基础,融合了螺旋模型的特征,利用预先包装好的软件构件来构造软件。构件类似于类或对象,是可重用部件,最大限度提高代码重用率。构件组装模型可实现软件复用,提高了软件的开发效率。且构件具有正确性、稳定性和立即可用性,因此采用构件组装可大大提高效率和软件质量,减少开发成本。有统计数据表明,构建组装可缩短70%的开发周期,降低84%的项目成本。,40,1.5 软件开发过程模型,1.5.6 第四代技术第四代语言(4GT)是一种面向结果的非过程性语言。它独立于具体的处理机,有丰富的软件工具支持。软件工程师在较高层次说明软件的特征,工具将说明自动生成源代码。小型和中型应用软件开发中,4GT使软件生产所需的时间大大减少,分析和设计的时间也减少了。大型软件中使用4GT,需要相同的甚至更多的分析、设计和测试,并且一般情况下自动生成的源代码效率较低,并且其可维护性也是值得怀疑的。,41,1.5 软件开发过程模型,1.5.7 Rational 统一过程Rational Unified Process,RUP是一套软件工程过程,由Rational软件公司推出的一种完整的软件过程模型。RUP是一套软件工程方法的框架,各个组织可根据自身的实际情况,以及项目规模对RUP进行裁剪和修改,以制定出合乎需要的软件工程过程。,42,1.5 软件开发过程模型,1.RUP是最佳软件开发经验的总结迭代式开发(develop software iteratively)给定的时间内,开发一个大型的复杂的软件系统,定义问题并构建解决方案是不可能一蹴而就的。允许每次迭代中的需求变化;每个迭代完成一个版本的程序。管理需求(manage requirements)需求是变化的;RUP实现对需求的动态管理。使用基于构件的体系结构(use component-based architectures)构件就是已存在的模块或子系统(重用);降低复杂度,提高效率,提高软件质量。,43,1.5 软件开发过程模型,可视化软件建模(visually model software)建模就是建立模型,模型是对客观事物的抽象;可视化模型更容易理解;可采用UML建立可视化的模型。验证软件质量(verify model quality)软件质量决定软件的成败;RUP对软件质量的评估贯穿于整个开发过程的始终。控制软件变更(control changes to software)管理软件变更;软件修改可控、可跟踪。,44,1.5 软件开发过程模型,2.RUP生命周期核心工作流,45,RUP的核心工作流,RUP中有9个核心工作流,这些工作流在整个生命周期中一次又一次被访问,在每一次迭代中以不同的重点和强度重复。6个核心过程工作流(Core Process Workflows)业务建模(Business Modeling)如何为新的目标组织开发一个构想,评估目标系统的影响。需求(Requirements)需求工作流的目标是描述系统应该做什么,并使开发人员和用户就这一描述达成共识。要对需要的功能和约束进行提取、组织、文档化,重点理解系统所解决问题的定义和范围。分析和设计(Analysis&Design)需求分析结果转化为分析模型与设计模型。,46,RUP的核心工作流,实现(Implementation)设计模型转化为实现结果(可执行的系统)。以层次化的子系统形式定义代码的组织结构;以组件的形式实现类和对象;将开发出的组件作为单元进行测试以及集成由单个开发者(小组)所产生的结果,使其成为最终系统。测试(Test)验证软件中所有组件的正确集成,检验所有的需求已被正确的实现;识别并确认缺陷在软件部署之前被提出并处理。部署(Deployment)将成功的生成版本并将软件分发给最终用户。将软件移交给最终用户。,47,RUP的核心工作流,3个核心支持工作流(Core Supporting Workflows)配置和变更管理(Configuration&Change Management)跟踪维护软件开发过程中产生的所有制品的完整性和一致性。项目管理(Project Management)软件项目管理平衡各种可能产生冲突的目标、风险,克服各种约束并成功交付使用户满意的产品。其目标包括:为项目的管理提供框架,为计划、人员配备、执行和监控项目提供实用的准则,为管理风险提供框架等。环境(Environment)向软件开发组织提供软件开发环境,包括过程管理和工具支持。,48,1.5 软件开发过程模型,工作阶段为了把握一个项目的时间尺度,RUP把一个项目分为四个不同的阶段:初始阶段建立业务模型,定义最终产品视图,确定项目范围。精化阶段 设计确定系统体系结构,制定项目计划,确定资源需求。构建阶段 开发构件和应用程序,集成为客户需要的产品,并测试。移交阶段 产品移交用户使用。,49,1.5 软件开发过程模型,1.5.8 敏捷过程与极限编程敏捷过程Agile dail software development is a conceptual framework for undertaking software engineering projects that embraces and promotes evolutionary change throughout the entire life-cycle of the project.敏捷软件开发是一个概念意义上的框架,用来取代软件工程项目的概念;它强调在项目的整个生命周期中,拥抱并促进由于软件进化式的发展所带来的变化。敏捷软件开发(Agile Software Development,ASD),涉及到了敏捷项目管理、敏捷需求获取、狭义的“敏捷软件开发”三个主要的领域和过程。,50,1.5 软件开发过程模型,拥抱并促进变化世界上唯一不变的是变化。学会如何识别变化的大势,并在可能的时候,促使变化向好的方向发展,才是面对变化的正确应对之法。软件进化式的发展软件的演化过程是有其自身内在逻辑的,存在一些根本规律和指导方针。,顺势而为,无为无不为 老子,51,1.5 软件开发过程模型,敏捷宣言(Manifesto for Agile Software Development)2001年提出的第一版的敏捷软件开发宣言:We are uncovering better ways of developing software by doing it and helping others do it.Through this work we have come to value 我们正在通过实践和帮助其他人实践,揭示更好的开发软件的方法。我们从实践中得出的价值观是:Individuals and interactions over processes and tools人和交互重于过程和工具Working software over comprehensive documentation 可以工作的软件重于求全责备的文档Customer collaboration over contract negotiation 客户合作重于合同谈判Responding to change over following a plan 随时应对变化重于循规蹈矩That is,while there is value in the items on the right,we value the items on the left more.,52,1.5 软件开发过程模型,在敏捷宣言的背后,有其遵循的12条原则:我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。即使到了开发的后期,也欢迎改变需求,敏捷过程利用变化来为客户创造竞争优势。经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。,53,1.5 软件开发过程模型,在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交流。工作的软件是首要的进度度量标准。敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。不断地关注优秀的技能和好的设计会增强敏捷能力。简单使未完成的工作最大化的艺术是根本的。最好的构架、需求和设计出自于自组织的团队。每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。,54,1.5 软件开发过程模型,极限编程eXtreme Programming,XP是一种软件工程方法学,是敏捷软件开发中最富有成效的几种方法学之一。极限编程和传统方法学的本质不同在于它更强调可适应性而不是可预测性。软件需求的不断变化是自然的、不可避免的、应该接受的;和传统的在项目起始阶段定义好所有需求再费尽心思的控制变化的方法相比,有能力在项目周期的任何阶段去适应变化,将是更加现实更加有效的方法。这些在传统的软件工程中看来是“极端的”实践,将会使开发过程比传统方法更加好的响应用户需求,因此更加敏捷,更好的构建出高质量软件。,55,1.5 软件开发过程模型,极限编程方法的基本特征是:增量和反覆式的开发结对程式设计:两个程序员在一个工作台上共同参与、合作。能增加纪律性,写出更好的代码。在程式设计团队中的使用者交互(在场的客户)软件重构:代码重构指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。集体代码所有权:任何结对的程序员都可以在任何时候改进任何代码。没有程序员对任何一个特定的模块或技术单独负责,每个人都可以参与任何其它方面的开发。编码标准:所有的代码看起来就好像是被单独一人编写的。隐喻:将整个系统联系在一起的全局视图,是系统的未来影像。如果模块的外观与整个隐喻不符,该模块是错误的。可持续的速度:把项目看作是马拉松长跑,而不是全速短跑。,56,1.6 软件开发方法简述,软件开发方法一种使用早已定义好的技术集和符号表示习惯来组织软件生产过程的方法。其方法一般表述成一系列的步骤,每一步骤都与相应的技术和符号表示相关。软件开发的目标规定的投资和时间内,开发出符合用户需求的高质量的软件。为了达到此目的,需要有成熟的开发方法。,自软件工程诞生以来,人们重视软件开发方法的研究,已经提出了多种软件开发方法和技术,对软件工程及软件产业的发展起到了不可估量的作用。,57,1.6 软件开发方法简述,1.6.1 结构化方法结构化方法由结构化分析、结构化设计和结构化程序设计构成。它是一种面向数据流的开发方法。该方法简单实用,应用较广,技术成熟。结构化分析根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,完成需求分析。结构化设计根据模块独立性准则、软件结构准则,将数据流图转换为软件的体系结构,用软件结构图来建立系统的逻辑模型,实现系统的概要设计。结构化程序设计根据结构程序设计原理,将每个模块的功能用相应的标准控制结构表示出来,实现详细设计。,58,1.6 软件开发方法简述,结构化方法总的指导思想是自顶向下、逐步求精。它的基本原则是功能的分解与抽象。它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题。相应的支持工具较多,发展较为成熟。结构化方法对于规模大的项目及特别复杂的项目不太适应,该方法难于解决软件重用问题,难于适应需求变化的问题,难于彻底解决维护问题。结构化方法将软件开发任务按照软件生命周期划分成阶段分段顺序进行,因此这种方法又叫生命周期方法,或叫传统的软件开发方法。,59,1.6 软件开发方法简述,1.6.2 面向数据结构的开发方法基本思想是从目标系统的输入输出数据结构入手,导出程序的基本框架结构,在此基础上,对细节进行设计,得到完整的程序结构图。1974年J.D.Warnier提出的结构化数据系统开发方法(Data Structure Systems Development,DSSD),Warnier方法;1975年M.A.Jackson提出的Jackson系统开发方法(Jackson Systems Development,JSD),Jackson方法。两种方法的区别:使用不同的图形工具描述信息的层次结构使用的伪码不同程序框架时,Warnier方法仅考虑输入数据结构,而Jackson方法还考虑输出数据结构(最主要的区别)。,60,1.6 软件开发方法简述,Jackson方法一般通过以下步骤来完成设计:(1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson结构图来表示这些数据结构。(2)找出输入和输出数据结构中有对应关系的数据单元。(3)按以下的规则由输入、输出的数据结构导出程序结构。为每一对在输入输出数据结构中有对应关系的单元画一个处理框为输入和输出数据结构中剩余的数据单元画一个处理框所有处理框在程序结构图上的位置,应与由它处理的数据单元在数据结构Jackson图上的位置一致必要时,可以对映射导出的程序结构图进行进一步的细化。(4)列出基本操作与条件,并把它们分配到程序结构图的适当位置。(5)用伪码写出程序。,61,1.6 软件开发方法简述,1.6.3 面向对象的方法面向对象开发方法的基本出发点是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。客观世界是由许多具体的事物、事件、概念和规则组成,这些均可看成对象。面向对象方法正是以对象作为最基本的元素,它也是分析问题、解决问题的核心。面向对象方法符合人类的认识规律。计算机实现的对象与真实世界的对象有一一对应的关系,不必做任何转换,这就使面向对象易于为人们所理解、接受和掌握。,62,1.6 软件开发方法简述,面向对象开发方法包括面向对象分析、面向对象设计和面向对象实现。面向对象开发方法有Booch方法:偏重设计,分析能力较弱OMT方法:Object-Oriented Modeling Technique,面向对象建模技术,建立对象模型、动态模型、功能模型实现对整个系统的分析和设计。Coad方法:即OOA、OOD方法,面向对象的分析设计方法。UML方法:为了统一各种面向对象方法的术语、概念和模型,1997年推出了统一建模语言,即UML(Unified Modeling Language)。它是面向对象的标准建模语言,可通过统一的语义和符号表示,使各种方法的建模过程和表示统一起来,将成为面向对象建模的工业标准。,63,1.6 软件开发方法简述,1.6.4 可视化开发方法本质上讲是一种辅助工具,并不是一种新的方法。可视化一般出现在编程阶段,如VB、VC+、Delphi、Power Builder等可视化开发工具。提供图形开发界面,可直接使用的图形界面元素,如命令按钮、窗体、对话框。事件驱动。,可视化开发方法的优点是简化了图形用户界面的设计和编码工作,将开发的注意力集中在程序的执行逻辑和工作流程上,使得软件开发更加简单易学,也使得专业和非专业的人员都能参加软件的开发活动,极大的提高了效率。,64,1.6 软件开发方法简述,1.6.5 软件开发方法的选择不同的软件开发方法适合不同类型的软件,实践表明,针对分析设计的开发方法更为重要。当选择一种软件开发方法时,可考虑如下四个因素:对软件开发方法是否已经具有经验,是否有受过培训的人员;为软件开发提供的软硬件资源及可用的工具的情况;该开发方法在该组织在计划、组织、管理方面的可行性;对开发项目所涉及领域的知识的掌握情况。,65,到底什么是软件工程?,66,小结,重点计算机软件的特点。软件工程的概念及内涵。软件危机产生的原因及表现。软件生命周期的概念及各阶段的任务。软件生命周期模型。软件开发方法的种类。难点软件工程的内涵。软件生命周期模型。,67,思考题,1.分析瀑布模型、原型模型、喷泉模型、螺旋模型、构件组装模型特点,列举至少三个你常使用的软件或系统,说明它们适合于哪种模型,并说明原因。例如四川农业大学校园网主页,原型系统,原因:规模不大,结构相对简单,可将之前开发的类似系统稍作修改作为原型,根据用户反映需求不断完善。2.根据你的理解,简短的说明软件生命周期模型和软件开发方法之间的关系。,