收藏 分销(赏)

软件工程1.ppt

上传人:精*** 文档编号:12293180 上传时间:2025-10-07 格式:PPT 页数:58 大小:352KB 下载积分:14 金币
下载 相关 举报
软件工程1.ppt_第1页
第1页 / 共58页
软件工程1.ppt_第2页
第2页 / 共58页


点击查看更多>>
资源描述
单击以编辑母版标题样式,单击以编辑母版文本样式,第二级,第三级,第四级,第五级,*,软件工程1,软件是与计算机系统操作有关的程序、规程、规则及与之有关的文档及数据。,软件的分类,系统软件、实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件、个人计算机软件、CASE工具软件,第一章 软件工程学概述,软件发展 四个阶段:,50年代初-60年代初 初期阶段 个人的技艺,60年中期-70年代末 多用户、多道程序和人机交互,软件维护问题的矛盾加剧,70年中期-80年代末 分布式系统、计算机网络等,80年代末 面向对象技术、专家系统、人工智能软件、并行软件、Internet环境下软件、布式计算环境等,1.软件危机,(Software Crisis),软件应用范围扩大需求增加软件规模增长复杂度增加费用巨大可靠性低、质量差软件危机,1.软件危机,例:,美国,IBM,公司在,1963,年至,1966,年开发的,IBM360,机的操作系统。这一项目花了,5000,人一年的工作量,最多时有,1000,人投入开发工作,写出了近,100,万行源程序。.据统计,这个操作系统每次发行的新版本都是从前一版本中找出,1000,个程序错误而修正的结果。.,一、软件危机简介,1.软件危机,这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,Software Crisis,!,(1)对软件开发成本和进度的估计常常很不准确。,(2)用户对“已完成的”软件系统不满意的现象经常发生。,(3)软件产品的质量往往靠不住。,(4)软件常常是不可维护的。,(5)软件通常没有适当的文档资料,(6)软件成本占计算机系统总成本中所的比例逐年上升。,(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。,1.软件危机,软件危机主要有以下一些典型表现,1.软件危机,项目没有被很好地理解;计划不周,最终导致进度拖延。,问题出在哪里?,二、软件危机的原因,1.软件危机,没有充分的文档资料(,documentation,),人与人的,交流,比写程序困难得多。,Managers 管理和评价工程的进展,Programmers 交流信息,Maintainers,至关重要,文档的作用,(,1)作为开发人员在一定阶段内的工作成果和结束标志,(2)向管理人员提供软件开发过程中的进展和情况,把软件开发过程中的一些“不可见的”事物转换成“可见的”文字资料。以便管理人员在各个阶段检查开发计划的实施进展,使之能够判断原定目标是否达到,还将继续耗用资源的种类和数量。,(3)记录开发过程中的技术信息,以便协调以后的软件开发,使用和修改。,(4)提供对软件的有关运行、维护和培训的信息,便于协调管理人员、开发人员、操作人员和用户之间相互了解彼此的工作。,(5)向潜在用户报道软件的功能和性能,使他们能判定软件能否服务于自己的需要。,补充:,1.软件危机,软件可靠性(,reliability,),缺少度量的标准,质量无法保证。,如何保证软件产品的质量,是非常复杂困难的问题。,引入同一变动付出的代价随时间变化的趋势,早 中 晚,高 中 低,改正同一个问题 需要付出的代价,概要设计,详细设计,编码,系统测试,需求分析,1.软件危机,(4)修改软件所付出的代价会变大,1.软件危机,(5)软件难以维护(maintainability),不易升级(evolvability),程序写完了并不是工作就完成了,应该彻底消除“软件就是程序”的错误观念。软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;,数据是使程序能够适当地处理信息的数据结构;,文档是开发、使用和维护程序所需要的图文资料。,1.软件危机,三、消除软件危机,认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。,“软件”编程,它有自己的,生命周期,(,life cycle,)。大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的。,更好的语言和工具,统一的编码规范,1.软件危机,软件工程是指导计算机软件开发和维护的一门工程学科。,1968年在第一届NATO会议上曾经给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”,1993年IEEE(美国电气电子工程师学会)全面更具体的定义:“软件工程是:,把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;,研究中提到的途径。”,2.软件工程,(Software Engineering),一、人们普遍认为软件工程具有下述的本质特性,1.软件工程关注于大型程序的构造,2.软件工程的中心课题是控制复杂性,3.软件经常变化,4.开发软件的效率非常重要,5.和谐地合作是开发软件的关键,6.软件必须有效地支持它的用户,7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品,2.软件工程,二、软件工程的基本原理,(Principles):,用分阶段的生命周期计划严格管理,项目概要计划,里程碑计划,项目控制计划,产品控制计划,验证计划,运行维护计划,坚持进行阶段评审,实行严格的产品控制基准配置管理,(Baseline configuration management),开发小组的成员应该少而精,采用现代程序设计技术,结果应能清楚地审查,承认不断改进软件工程实践的必要性,2.软件工程,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。,管理:就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。,方法学:在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。,三、软件工程方法学,2.软件工程,软件工程方法学包含3个要素:方法、工具和过程。,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;,工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;,过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。,2.软件工程,1.传统方法学,传统方法学也称为生命周期方法学或结构化范型。,它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。,2.软件工程,这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。,前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的实现细节。,在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,2.软件工程,传统方法学仍然是人们在开发软件时使用得十分广泛的软件工程方法学。在相当长一段时期内这种方法学还会有生命力。,2.软件工程,2.面向对象方法学,当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。,2.软件工程,数据和对数据的处理原本是密切相关的,把数据和操作人为地分离成两个独立的部分,自然会增加软件开发与维护的难度。,与传统方法相反,面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。,2.软件工程,概括地说,面向对象方法学具有下述4个要点。,把对象,(object),作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成。,(2),把所有对象都划分成类,(class),。,每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。,2.软件工程,(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。,(4)对象彼此间仅能通过发送消息互相联系。,也就是说,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。,2.软件工程,面向对象方法学的出发点和基本原则:,尽量模拟人类习惯的思维方式,,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。,传统方法学强调自顶向下顺序地完成软件开发的各阶段任务,。,2.软件工程,用,面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。,面向对象方法普遍进行的对象分类过程:,支持从特殊到一般的归纳思维过程;,通过建立类等级而获得的继承性,支持从一般到特殊的演绎思维过程,。,2.软件工程,对象是相对独立的实体,容易在以后的软件产品中重复使用,面向对象范型的另一个重要优点是促进了软件重用,面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性,2.软件工程,1.问题定义,“要解决的问题是什么?”,在实践中它却可能是最容易被忽视的一个步骤。,通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。,3.软件生命周期,(Software Life Cycle),2.可行性研究,“对于上一个阶段所确定的问题有行得通的解决办法吗?”,系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。,研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。,3.软件生命周期,3.需求分析,这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。,3.软件生命周期,系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。,用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。,(提示:它经常被作为软件验收的技术协议),3.软件生命周期,4.总体设计,这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”,总体设计又称为概要设计。,应该设计出实现目标系统的几种可能的方案。并在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。,3.软件生命周期,5.详细设计,详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”,不是编写程序,而是设计出程序的详细规格说明。,详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。,3.软件生命周期,6.编码和单元测试,这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。,程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序,,并且仔细测试编写出的每一个模块。,3.软件生命周期,7.综合测试,这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。,最基本的测试是集成测试和验收测试。,所谓集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。,所谓验收测试则是按照规格说明书的规定,由用户对目标系统进行验收。,3.软件生命周期,8.软件维护,维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。,通常有4类维护活动:,改正性维护,也就是诊断和改正在使用过程中发现的软件错误;,适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;,预防性维护,即修改软件为将来的维护活动预先做准备。,3.软件生命周期,4.软件过程,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,ISO 9000把过程定义为“使用资源将输入转化为输出的活动所构成的系统。”此处,“系统”的含义是广义的:“系统是相互关联或相互作用的一组要素。”,过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。,科学、有效的软件过程应该定义一组适合于所承担的项目特点的任务集合。通常,一个任务集合包括一组软件工程任务、里程碑和应该交付的产品。,通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。,4.软件过程,一、瀑布模型(Waterfall Model):,维 护,开,发,定,义,定义,可行性研究,需求分析,详细设计,编码和测试,集成和系统测试,提交和维护,概要设计,通常使用生命周期模型简洁地描述软件过程。,把生命周期划分成哪些阶段及各个阶段的执行顺序,也称为过程模型。,顺序性、依赖性,前一阶段的输出文档是后一阶段的输入文档,瀑布模型特点,用户要求,系统测试,需求分析,概要设计,单元测试,综合测试,确认测试,编 码,程序清单,需求规格说明,软件结构图,模块说明,详细设计图,4.软件过程,推迟程序的物理实现,软件开发人员不能急于求成,它们总想早点编写程序。,对于大、中型的软件编码开始得越早,完成所需时间反而越长,过早地考虑程序的实现,常常导致大量返工,甚至灾难性后果(彻底推翻),4.软件过程,质量保证的观点 阶段文档与评审的要求,利于尽早发现错误。,每一阶段都要完成规定的文档,每一阶段都要对完成的文档进行复审,以便尽早发现问题,消除隐患,复审要及时,暴露出问题愈晚,排除故障付出代价也愈高。,4.软件过程,优点:规范化开发;,每个阶段提交文档,每个阶段 验证,缺点:过于理想化,(不能适应需求的变化,初期用户对产品的“样式”不了解),4.软件过程,实际的瀑布模型,快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。,快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。,4.软件过程,二、快速原型模型,通常,用户试用,提出修改意见,开发人员修改原型系统,然后用户再次试用一旦用户认可,开发人员书写规格说明文档,软件可以满足用户的真实需求。,4.软件过程,快速原型模型,三、增量模型,增量模型,4.软件过程,增量模型也称为渐增模型。,使用增量模型开发软件时,把软件产品作为一系列增量构件来设计、编码、集成和测试,每个构件由多个相互作用的模块构成,并且能完成特定的功能。,使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。,例:开发字处理软件,第一个增量构件:基本的文件管理、编辑、和文档生成功能,第二个增量构件:更完善的编辑和文档生成功能;,第三个增量构件:实现拼写和语法检查功能;,第四个增量构件:完成高级的页面排版功能,构件2,构件3,构件1,构件2,构件1,能在较短时间内向用户提交可完成部分工作的产品,是增量模型的一个优点。,逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。,优点,4.软件过程,增量模型本身是自相矛盾的。,它一方面要求开发人员把软件看作一个整体,另一方面又要求开发人员把软件看作构件序列,每个构件本质上都独立于另一个构件。,除非开发人员有足够的技术能力协调好这一明显的矛盾,否则用增量模型开发出的产品可能并不令人满意。,4.软件过程,风险更大的增量模型,冒构件无法集成到一起的风险,4.软件过程,四、螺旋模型,4.软件过程,简化的螺旋模型,螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。,完整的螺旋模型,4.软件过程,螺旋模型有许多优点:,对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;,减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;,更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。,螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。,4.软件过程,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服