1软件工程第一章软件工程概念授课老师:清华大学计算机系殷人昆yinrk432@sina.compasswordqhdxjsjx2提示:设计与建模要点1.结构化分析建模:数据流图、实体关系图、状态迁移图、数据字典2.结构化设计建模:数据流图转换为系统结构图3.结构化程序设计:程序流程图、N-S图、PAD4.程序环路复杂性计算5.测试用例设计:逻辑覆盖、循环测试、基本路径覆盖、因果图6.可靠性分析:估算测试前程序中潜在错误7.OMT建模:对象模型、动态模型(状态图、事件追踪图)8.UML建模:用例图、类图、顺序图、活动图3软件的概念软件的定义软件由计算机程序、数据及文档组成。软件与硬件、数据库、人、过程等共同构成计算机系统。软件按功能分类:应用软件、系统软件、支撑软件。软件的发展经历了三个阶段:程序设计阶段、程序系统阶段、软件工程阶段。软件工程概念的出现源自软件危机。软件危机的主要特征软件开发周期大大超过规定日期;软件开发成本严重超标;软件质量难于保证;失败的根本原因在于:开发人员写出的东西达不到用户要求(人的问题、技术问题)51968年德国人Bauer在北大西洋公约组织会议上的定义:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。1983年IEEE的软件工程定义:软件工程是开发,运行,维护和修复软件的系统方法。1993年IEEE的一个更加综合的定义:将系统化的,规范的,可度量的方法应用于软件的开发,运行和维护的过程,即将工程化应用于软件中。软件工程定义6软件工程框架可用性性性确正合算选取适宜的开发模型采用合适的设计方法提供高质量的工程支持重视软件工程的管理基本过程支持过程组织过程目标原则7软件工程框架给出了软件工程三个主要方面。1)软件工程目标—包括可用性、正确性和合算性,规定了软件工程实践的结果(即软件)应具有的基本性质;2)软件工程过程—包含的基本活动有需求、分析与设计、实现、确认与测试、维护与支持;3)软件工程的四条原则--采用适宜的开发模型,使用恰当的开发方法,提供高质量的工程支持,实施有效的工程管理,从四个方面指导每一项工程的活动,以实现软件工程目标。8软件工程的知识结构2001年5月ISO/IECJTC1发布了《SWEBOK指南V0.95(试用版)》,即GuidetotheSoftwareEngineeringBodyofKnowledge。SWEBOK把软件工程学科的主体知识分为10个知识领域这10个领域包括:软件需求,软件设计,软件构造,软件测试,软件维护,软件配置管理,软件工程管理,软件工程过程,软件工程工具和方法,软件质量。9ISO9000定义:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。从软件开发的观点看,它就是使用适当的资源(包括人员、硬软件工具、时间等),为开发软件进行的一组开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。软件工程过程与软件生存周期10软件工程过程定义了:方法使用的顺序、要求交付的文档资料、为保证质量和适应变化所需要的管理、软件开发各个阶段完成的里程碑。软件工程过程包含四种基本的过程活动:plan:软件规格说明do:软件开发check:软件确认action:软件演进11软件生存周期包含三个阶段:软件定义、软件开发及软件运行维护。软件生存周期模型是软件工程思想的具体化,是跨越软件生存周期的系统开发、运行、维护所实施的全部活动和任务的过程框架。常用的软件生存周期模型有瀑布模型,演化模型,螺旋模型,增量模型,喷泉模型,快速应用开发(RAD)模型。12瀑布模型1.各项活动按自上而下,相互衔接的固定次序,如同瀑布逐级下落,每项活动均处于一个质量环(输入-处理-输出-评审)中。2.阶段间具有顺序性和依赖性。3.推迟实现的观点。4.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查。13需求定义系统与软件设计集成与系统测试实现与单元测试运行与维护14演化模型演化模型是迭代的,软件必须经过不断演化才能完善。演化模型先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。业务和产品需求在变化中,采用线性开发方式是不实际的。快速实现和提交一个有限的版本,可以应付市场竞争的压力。15需求的采集与细化客户评价原型快速设计建造原型加工原型产生样品停止开始16螺旋模型螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本。制定计划风险分析实施工程客户评估17决定目标、方案和限制评价方案识别风险弱化风险开发、验证、下一级产品计划下一阶段集成测试18增量模型增量模型是迭代和演进的过程。增量模型把软件产品分解成一系列的增量构件,在增量开发迭代中逐步加入。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。早先完成的增量可以为后期的增量提供服务。增量开发方法的新演进版本叫做极限程序设计(eXtremeProgramming)。19定义基本需求将需求对应到各增量设计系统架构开发其中一个增量检验和确认该增量将增量集成到系统中确认集成后的系统20日历时间分析增量1增量1交付设计编码测试分析增量2增量2交付设计编码测试分析增量3增量3交付设计编码测试分析增量4增量4交付设计编码测试系统和信息工程21喷泉模型体现了迭代和无间隙的特性。系统某个部分常常重复工作多次,相关对象在每次迭代中随之加入演进的软件成分。无间隙是指在各项开发活动,即分析、设计和编码之间不存在明显的边界。喷泉模型是对象驱动的过程。22需求阶段分析阶段设计阶段编程阶段集成与测试阶段维护与演进阶段23变换模型变换模型是一种基于形式化规格说明语言及程序变换的软件开发模型。它采用形式化的软件开发方法,对形式化的软件规格说明进行一系列自动的或半自动的程序变换,最终映射成为计算机系统能够接受的程序系统。多步程序变换过程的重要性质是:每一步程序变换的正确性仅与该步变换所依据的规范Mi以及对变换后的假设Mi+1有关。24软件需求形式化说明(M0)软件设计形式化说明(M1)(M2)(Mn)……模型检查程序变换程序变换程序变换在此意义上,变换步骤独立于其他变换步骤。这称为变换的独立性。该模型只适合于软件的形式化开发方法;需要严格的数学理论和形式化技术支持;需要一整套开发环境(如程序变换工具、定理证明工具等)的支持。25基于第四代技术的模型第四代语言(4GL)是在大型数据库管理系统的基础上发展起来的,是一种面向结果的非过程性语言。它独立于具体的处理机,有丰富的软件工具支持,能统一利用和管理各种数据资源并能适应不同水平用户的需要。以4GL为核心的软件开发技术成为第四代技术(4GT),采用4GT的软件开发模型如图。软件开发人员在定义软件需求,给出需求规格说明之后,4GT工具可将该需求规格说明自动26转换为程序代码。这大大减少了分析、设计、编码和测试的时间。以4GL为核心的软件开发技术成为第四代技术(4GT),采用4GT的软件开发模型如图。收集需求“设计”策略用“4GL”实现测试27快速应用开发(RAD)模型快速应用开发模型是一种增量开发模型,该模型开发软件大量使用了可复用的构件。每一个增量的开发经历五个阶段:业务建模对业务功能的信息流建模。数据建模对业务的数据对象和关系建模。过程建模描述完成业务功能的数据变换。应用生成应用构件和自动化工具建造。测试与反复对新构件和接口进行测试。28业务建模数据建模过程建模应用生成测试及反复小组1#业务建模数据建模过程建模应用生成测试及反复小组2#业务建模数据建模过程建模应用生成测试及反复小组3#60~90天29软件开发范型(Paradigm)范型又称为风范。通常认为范型就是开发模型(Model)或开发模式(Pattern),实际上它与方法(Methodology)一样,都被视为一种开发技术。范型支配了设计方法、编码语言、测试和检验技术的选择。过程性范型把软件视为处理流,定义成由一系列步骤构成的算法。每一步骤都是带有输入和输出的一个过程,把这些步骤串联在一起可产生贯通于整个程序的控制流。30面向对象范型把标识和模型化问题领域中的实体做为系统开发的起点,面向对象系统中的对象是数据抽象与过程抽象的综合。逻辑性范型是基于规则的,它把有关问题的知识分解成一组具体规则(如prolog语言)。面向进程范型把一个问题分解成独立执行的模块。让不只一个程序同时运行。这些进程互相配合,解决问题。面向存取范型是一种在构造用户界面方面很有用的技术。31函数型范型是基于规则的,它把有关问题的知识分解成一组具体规则,用语言的“if_then”等结构来表示这些规则。说明性范型。每种开发范型都有它的支持者和用户:每种开发范型都特别适合于某种类型的问题或子问题;每种开发范型都用不同的方式考虑问题;每种开发范型都使用不同的方法来分解问题32每种开发范型都导致不同种类的块、过程、产生规则。系统开发时通常把大型问题分解成一组子问题。对于每个子问题采用适当的软件开发范型。33软件工程原则有:抽象与自顶向下、逐层细化信息隐蔽和数据封装模块化局部化确定性一致性和标准化完备性和可验证性软件工程原则34软件工程的基本原理有:按软件生存周期分阶段制定计划并认真实施;坚持进行阶段评审;坚持严格的产品控制;使用现代程序设计技术;明确责任,使得工作结果能够得到清楚的审查;用人少而精;不断改进开发过程。