您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程1-2-史济民.
湘潭大学软件工程教材:软件工程——原理、方法与应用(第三版)著作者:史济民顾春华郑红授课人:张陵山第1章绪论•某些新科技的发明创造会给其他一些看似无关的技术领域、商业企业、公众甚至整个社会文化带来深远而出人意料的影响和作用。这就是所谓的“意外效应法则”。•计算机软件已经成为世界舞台上最为重要的科技领域,并且是“意外效应法则”的一个最好的体现。•现在的软件技术具有产品和产品生产载体的双重作用。•作为一个产品,软件显示了由计算机硬件体现的计算能力。•作为产品生产的载体,软件提供了计算机控制(操作系统)、信息通信(网络)以及应用开发和控制(软件工具和环境)的基础平台。•软件传递了我们这个时代最重要的产品——信息。•现在,庞大的软件产业已经成为工业经济中的主导因素。早期的独立程序员也已经被多个专业的软件开发团队所代替。•同过去的独立程序员一样,开发现代计算机系统时,软件开发人员依然面临同样的问题:•为什么软件需要如此长的开发时间?•为什么开发成本居高不下?•为什么在将软件交付顾客使用时,我们无法找到所有的错误?•为什么维护已有的程序要花费高昂的时间和人力代价?•为什么软件开发和维护的过程难以度量?1.1软件和软件危机软件的定义软件是能够完成预定功能和性能的可执行的计算机程序,包括使程序正常执行所需的数据,以及有关描述程序操作和使用的文档(R.S.Pressman)软件=程序(包括数据)+文档程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。数据是使程序能正常操纵信息的数据结构。文档是与程序开发,维护和使用有关的图文材料。--软件的特征软件与硬件的不同软件开发不同于硬件设计;软件生产与硬件制造不同;软件维护不同于硬件维修。软件是逻辑的,而不是物理的软件开发与人关系密切;软件开发成本大;软件生产是简单的拷贝;软件不会磨损和老化;软件受环境影响大;软件维护易产生新的问题。--软件危机•软件危机的表现对软件开发成本和进度的估算很不准确;用户很不满意;质量很不可靠;没有适当的文档;软件成本比重上升;供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势。--软件危机•硬件/软件成本变化趋势硬件软件100%0%195519701985--软件危机•软件技术进步落后于需求增长--软件危机•软件危机的原因•客观:软件本身特点----逻辑部件----规模庞大、复杂度高•主观:不正确的开发方法----忽视需求分析----个人化方式:软件开发=程序编写----轻视软件维护--软件危机•解决途径•组织管理----工程项目管理方法•技术措施----软件开发技术与方法----软件工具•促使了软件工程的诞生•按工程化的原理和方法组织软件开发是解决软件开发中的问题一个主要出路。1.2软件工程学的研究范畴•软件工程学的研究范畴•“软件工程”一词是在1968年北大西洋公约组织在联邦德国召开的一次会议上提出。有多种定义,中心思想是把软件当做一件工业产品。软件开发技术软件工程管理软件工程学软件方法软件工具软件工程环境软件管理学软件经济学软件度量学软件工程学的研究范畴•软件开发方法•为软件开发提供了“如何做”的技术•个性化方法-〉结构化方法-〉面向对象方法-〉软件复用•软件工具•为软件开发提供了自动的或半自动的软件支撑环境•单个工具-〉工具箱、集成工具-〉环境•软件工程管理•目的:为了按进度及预算完成软件计划•内容:成本估算、进度安排、人员组织、质量保证等.1.3软件工程的发展三种编程范型过程式编程范型程序由一组被动数据和一组能动过程组成程序=数据结构+算法着眼于程序的过程和基本控制结构,粒度最小面向对象编程范型数据及其操作被封装在对象中程序=对象+消息着眼于程序中的对象,粒度比较大基于构件技术的编程范型构件是通用的、可复用的标准化对象类程序=构件+架构着眼于适合整个领域的类对象,粒度更大•过程式和面向对象的编程范型存款取款利息结算帐户余额帐户余额利息结算存款取款银行储蓄处理业务三代软件工程•传统软件工程•开发过程经历的阶段:结构化分析→结构化设计→面向过程的编码→软件测试•面向对象软件工程•开发过程经历的阶段:OO分析与对象抽取→对象详细设计→面向对象的编码和测试•基于构件的软件工程•开发过程经历的阶段:领域分析和测试计划定制→领域设计→建立可复用构件库→查找并集成构件1.4软件工程的应用•软件工程指导中小型软件•软件工程指导大型软件•软件工程的成就•解决软件开发中的部分问题(非本质)•软件生产率稳步增长•软件工程发展的展望•开发伴随软件复用,开发为了软件复用•软件就是服务小结•软件工程自1968年提出以来,在过去30余年中,已发展成为用于指导软件生产工程化,覆盖软件开发方法学、软件工程管理、软件工具与环境等内容的一门新学科。•随着程序设计从结构化程序设计发展到面向对象程序设计,软件工程也由传统的软件工程演变为面向对象的软件工程,现正向更新一代的基于构件的软件工程迈进。•长期的实践,软件工程积累了许多行之有效的原理与方法,已经为产业界广泛接受与应用。上篇:传统软件工程第2章软件生存周期与软件过程第3章结构化分析与设计第2章软件生存周期与软件过程软件生存周期传统的软件过程软件演化模型形式化方法模型统一过程和敏捷过程软件可行性研究2.1软件生存周期•软件生存周期(SoftwareLifeCycle):一个软件从问题提出立项开始,直到软件产品最终退役(废弃不用)为止。•软件生存周期分为三个时期:计划、开发和维护。•整个软件生存周期划分为多个相对独立的较小阶段,给每个阶段赋予确定而有限的任务,从而降低了整个软件工程的难度,提高了软件开发生产率。典型的软件生存周期需求分析软件分析软件设计编码(测试)交付测试使用维护典型的软件生存周期的主要活动软件生存周期的主要活动1.需求分析•明确需要解决的问题(从用户的视角)。•建立需求模型:描述软件的功能、性能、约束、接口等。2.软件分析•在需求模型基础上从开发人员的视角对软件进行分析。•建立与需求模型一致的分析模型:描述软件的逻辑模型。3.软件设计•将分析模型转变为设计模型。软件设计分为总体设计和详细设计两个阶段。•总体设计:确定软件的总体结构和全局性设计原则。•详细设计:确定各部件的数据结构和操作。•建立软件设计模型:考虑实现技术和平台。软件生存周期的主要活动4.编码•用程序设计语言将设计文档翻译成源程序。•建立软件实现模型:包含现有软件构件包。5.软件测试•发现程序中的错误、提高软件质量•单元测试、集成测试、确认测试、系统测试6.运行维护软件过程与软件生存周期的关系•软件过程•围绕软件开发所进行的一系列活动。•软件过程模型•把软件生存周期中软件开发活动的有序流程用一个合理的框架来规范描述。•软件过程模型是一种软件过程的抽象表示法,它从一个特定的角度表现一个开发过程。•软件生存周期中的阶段和软件过程中的活动是基本一致的。2.2传统的软件过程•传统的过程模型•瀑布模型•waterfallmodel•基于软件生存周期的线性开发模型•快速原型模型•rapidprototypemodel•基于原型的迭代化开发模型瀑布模型W.Royce于1970年提出线性开发模型强调软件文档每一个阶段必须完成规定的文档每一个阶段都要复审完成的文档图2.2瀑布模型的阶段与文档需求分析需求规格说明软件分析与总体设计软件结构图模块说明系统测试确认测试综合测试程序清单详细设计编码用户要求单元测试瀑布模型的阶段与文档瀑布模型•特点1.阶段的顺序性和依赖性2.推迟实现的观点3.质量保证的观点•存在问题•不适合需求模糊的系统•开发初始阶段很难彻底弄清软件需求快速原型模型需求原型开发最终系统设计原型评价最终系统实现用户反馈快速原型法的过程模型快速原型模型•特点•“逼真”的原型可以使用户迅速作出反馈。•循环回溯和迭代:非线性模型。•使用快速开发工具。•种类•渐进型:对原型补充和修改获得最终系统。•抛弃型:原型废弃不用。•应防止的偏向•舍不得抛弃,从而影响软件质量。2.3软件演化模型•演化开发模型:使所开发的软件在迭代中逐步完善,是渐进式的开发模型,也称为迭代化开发模型。•增量模型(incrementalmodel)•螺旋模型(spiralmodel)•构件集成模型(componentintegrationmodel)增量模型•增量模型是瀑布模型的顺序特征与原型法的迭代特征相结合的产物,把软件看作一系列相互联系的增量,每次迭代完成一个增量。•增量•小而可用的软件。•第一个增量通常是软件的核心。•特点•在前面增量的基础上开发后面的增量。•每个增量的开发可用瀑布或快速原型模型。•每个增量开发的顺序性和总体的迭代性相结合。增量模型构件1:需求设计实现和集成交付客户构件2:需求设计实现和集成交付客户构件3:需求设计实现和集成交付客户构件n:需求设计实现和集成交付客户增量模型规格说明组设计组实现和集成组螺旋模型•特点•瀑布模型(顺序性、边开发边复审)+快速原型(迭代性)•风险分析-〉发现、控制风险•一个螺旋式周期•计划:确定目标,选择方案,选定完成目标的策略•风险分析:从风险角度分析该策略•开发:启动一个开发活动•评审:评价前一步的结果,计划下一轮的工作螺旋模型构件集成模型•构件集成模型主要适用于面向对象的软件开发。•面向对象的基本概念•对象Object•类Class•继承Inheritance•消息Message•面向对象•对象+类+继承+消息通信构件集成模型•构件•在某个领域内具有通用性,可以复用的软件部件•将可以复用的构件存储起来,形成构件库•特点•面向对象•基于构件库•融合螺旋模型特征•支持软件开发的迭代方法•软件复用构件集成模型2.4形式化方法模型•形式化方法模型:基于程序变换和验证技术的软件开发•转换模型(transformationalmodel)•净室模型(cleanroommodel)转换模型•开发过程•第一步:确定形式化需求规格说明书(使用形式化语言)•第二部步:进行自动的程序变换(由变换系统完成,产生形式化开发记录)•第三步:针对形式化开发记录进行测试•特点•形式化软件开发方法•基于模型的,基于代数结构的,基于时序逻辑的•形式化需求规格说明•变换技术•程序自动生成技术•确保正确转换模型形式化规格说明与需求比较后修正变换2变换1变换n测试形式化开发记录系统需求目标系统转换模型净室模型•净室思想•在分析和设计阶段消除错误。•在“洁净”状态下实现软件制作。•增量模型•把软件看成一系列的增量。每个增量是一个用形式化方式表示的“盒”。•形式化•盒结构表示分析和设计。•正确性验证。净室模型需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证增量1增量2增量n净室模型软件过程模型的特点汇总开发模型特点适用场合瀑布模型线性模型,每一阶段必须完成规定的文档需求明确的中、小型软件开发快速原型模型用户介入早,通过迭代完善用户需求,原型废弃不用需求模糊的小型软件开发增量模型每次迭代完成一个增量,可用于OO开发容易分块的大型软件开发螺旋模型典型迭代模型,重视风险分析,可用于OO开发具有不确定性大型软件开发构件集成模型软件开发与构件开发平行进行领域工程、行业的中型软件开发转换模型形式化的规格说明,自动的程序变换系统理想化模型,尚无成熟工具支持净室模型形式化的增量开发模型,在洁净状态下实现软件制作开发团队熟悉形式化方法,中小型软件开发2.5统一过程和敏捷过程•统一过程•RationalUnifiedProcess(RUP)描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动。•敏捷过程•AgileDevelopment是一种以人为核心、迭代、循序渐进的开发方
本文标题:软件工程1-2-史济民.
链接地址:https://www.777doc.com/doc-1990786 .html