您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 软件设计师-软件工程01
软件工程2021/6/32第1章软件工程学概述•1.1软件危机•1.2软件工程•1.3软件生命周期•1.4软件过程•1.5小结2021/6/33软件及软件工程•为什么要讲软件和软件工程–只有对软件和软件的开发过程有充分的认识,才能更好的开发出过程受控、质量受控的软件产品。–对于软件和软件开发过程的认识是困难的,存在很多困惑,需要对此有深刻的认识。2021/6/34一些对软件的偏见或误解•软件就是程序,软件开发就是编写程序。编完了程序,就一切OK了。•掌握了最新的语言和工具,就能写程序了。•软件是灵活的,软件的修改很容易。•只要会编程,就能写软件,就是程序员;一个公司,只要召些程序员,就能开发好的软件产品。•只要有几个有经验的程序员,再找些兼职的大学生,就能组成一个软件公司。2021/6/35软件无处不在•软件不仅仅是在计算机运行的程序,任何预先定义好的程序步骤的地方,都有软件的身影•软件的应用领域–系统软件–实时软件–商业软件–工程和科学计算软件–嵌入式软件–个人计算机软件–基于Web的软件(网站)–人工智能软件2021/6/36什么是软件•软件的定义—软件由三部分组成:–程序:在运行时,能提供所希望的功能和性能的指令集–数据:使程序能够正确运行的数据–文档:描述程序研制过程、方法及使用的文档•软件处理的是信息和逻辑–软件的开发,绝不仅仅是编写程序–软件围绕着逻辑进行–软件就是一个信息交换器–产生、管理、获取、修改、显示或传送信息2021/6/37软件的特征•软件是逻辑的而不是有形的系统元件,具有与硬件完全不同的特征1.软件是被开发或设计的,而不是传统意义上被制造的–软件成本集中于开发上,软件项目不能像制造项目那样管理。2.软件不会磨损,不过它会退化–对未发现的BUG的修复,会引起较高的故障率。–不能像硬件维修中直接更换磨损的零件,软件维护要复杂得多。2021/6/38软件的特征3.大多数软件开发,仍是手工作坊式的开发模式–在硬件世界和现代工业的发展中,被大量使用的标准设计的构建是一条非常成功的路子。–标准化也是软件设计的一个方向,软件产业正在向基于构件的组装进前进。4.软件是一种逻辑实体,具有抽象性。–人们可以使用软件,但是无法看到软件本身的形态。必须通过观察、分析、思考、判断,才能了解其功能、性能等特性。–设计中,软件的质量、可维护性、可测试性更加重要。–当前软件设计的趋势,是设计高度封装,定义良好的应用接口。5.软件是复杂的,而且以后会更加复杂–软件是人类有史以来生产的复杂度最高的工业产品。–软件的复杂,不是因为软件本身复杂,而是人的思想复杂。2021/6/39•软件危机的介绍1.1软件危机•硬件和软件发展的不平衡,硬件性能的发展极其迅速,给软件提出了更高的要求•软件开发和维护成本越来越大,令人吃惊地高•失败的软件开发项目屡见不鲜•什么是软件危机–软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件成本在系统中的比例10%18%60%72%80%85%0%10%20%30%40%50%60%70%80%90%100%50年代初1955年1970年1975年1980年1985年2021/6/310软件危机•软件危机的表现–软件成本日益增长–开发进度难以控制–软件质量差–软件维护困难–软件开发速度跟不上计算机发展速度•软件危机的原因–技术原因•软件规模越来越大•软件复杂度越来越高–管理原因•软件开发缺乏正确的理论指导,过分依靠个人技巧和创造性•对用户需求没有完整准确的认识,就匆忙着手编写程序•如何克服软件危机:软件工程2021/6/3112021/6/312引入同一变动付出的代价随时间变化的趋势问题在哪里?•软件开发链条的“放大”作用。(规范每个环节)•只有早期发现问题,才会尽量减少损失。(失之毫厘,谬以千里)•但客观规律:用户的牙膏不会一下子挤完。(静态开发方法“天生”会延迟问题的发现)2021/6/313•消除软件危机的途径–对计算机软件正确认识。(软件不仅仅是程序)–推广使用开发软件成功的技术和方法,研究探索更好更有效的技术和方法,消除错误概念和做法。–开发和使用更好的软件工具。–需要组织管理措施。•软件工程正是从技术和管理两方面研究如何更好地开发和维护计算机软件的一门新兴学科。无章法(个人英雄主义)工程项目管理模式(团队合作开发)2021/6/3141.2软件工程•软件工程(IEEE)–1968年秋,提出软件工程1)将系统化、规范化、可量化的工程原则和方法,应用于软件的开发、运行和维护。2)对1)中方法的理论研究。软件开发方法学软件工具软件工程环境软件工程软件项目管理软件度量项目估算进度控制人员组织配置管理项目计划软件开发技术•软件工程–认为:按照工程化的原则和方法组织软件开发工作,是摆脱软件危机的一个主要出路。–主要目标:高效开发高质量软件。•软件工程规范–工业界:参照修改其它工程项目的管理模式如ISO,PMI,SixSigma–学术界:CMM2021/6/315•软件工程基本原理(开发与维护的指导)1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性2021/6/316•软件的生命周期•软件开发过程–瀑布模型–快速原型、螺旋模型–喷泉模型等•软件开发新过程–敏捷软件开发(极限编程—XP)–快速软件开发–统一软件开发过程软件开发的规律•软件开发方法–结构化方法–面向对象方法–Jackson系统开发方法–模块化方法–软件复用2021/6/317•软件工程方法学–把在软件生命周期全过程中使用的一整套技术的集合称为方法学(methodology),也称范型(paradigm)。–软件工程方法学三个要素:方法、工具和过程。•方法是完成软件开发各项任务的技术,回答“如何做”;•工具是为方法的运用提供自动或半自动软件支撑环境,回答“用什么做”;•过程是为获得高质量的软件要完成的一系列任务的框架,规定完成各项任务步骤,回答“如何控制、协调、保证质量”。管理方法2021/6/318•目前使用得最广泛的软件工程方法学。•传统方法学也称为生命周期方法学或结构化范型。–当软件规模较大,或对软件的需求是模糊的或随时间变化的时候,使用结构化范型开发软件往往不成功;–此外,使用传统方法学开发出的软件,维护起来通常都很困难。•结构化-静态分析,面向对象-动态分析世界万物是变化的传统方法学与面向对象方法学2021/6/319传统方法的特点•生命周期模型•软件过程划分为若干个阶段•每个阶段有各自的任务•阶段之间有某种顺序性2021/6/320•面向对象方法:1.对象作为融合数据及在数据之上的操作行为的统一的软件构件。2.把所有对象都划分成类(Class)。每个类都定义了一组数据和一组操作。3.按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,称为继承。4.对象彼此间仅能通过发送消息互相联系-封装性。数据:静态操作:动态EverythingisObject.2021/6/321OO特点•面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式。•用面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。•概念和表示方法上的一致性,阶段间平滑(无缝)过渡。•特殊到一般的归纳思维过程;一般到特殊的演绎思维过程。(继承的思想)2021/6/322OO特点(2)•最终产品中的对象与现实世界中的实体相对应,降低了复杂性,提高了可理解性,简化了软件的开发和维护工作。•对象是相对独立的实体,容易在软件产品中重复使用,促进了软件重用。•面用对象方法特有的继承性,也进一步提高了面向对象软件的可重用性。2021/6/323品尝服务点菜服务烹饪服务上菜服务+品尝+点菜+上菜+备料+烧菜-品尝点菜菜单备料烧菜上菜点菜清单•当需求变化时:–要求服务员礼貌待客!-问候•模拟人类思维•迭代开发•设计简单、容易理解2021/6/324面向对象分析类图的例子2021/6/3251.3软件生命周期•软件生命周期由软件定义、软件开发和运行维护三个时期组成,每个时期又可进一步划分成若干个阶段,每个阶段有各自的任务。1软件定义2软件开发3运行维护2021/6/3261.问题定义(领域分析1)–必须回答的关键问题是:“要解决的问题是什么”。2.可行性研究(领域分析2,问题背景)–回答的关键问题是:“上一个阶段所确定的问题是否有行得通的解决办法”。3.需求分析–仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”。–此外,要用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明(specification)。2021/6/3271.3软件生命周期了解问题,不能准确表达,不知道怎样利用计算机实现了解软件实现,不清楚用户要求与用户配合,充分交流,得出系统需求2021/6/3284.概要设计–概括地回答“怎样实现目标系统?”这个问题。概要设计又称为初步设计、逻辑设计、高层设计或总体设计。–可以给出实现目标系统的几种可能的方案。–另一项主要任务是设计程序的体系结构,即确定程序由哪些模块组成以及模块间的关系。5.详细设计–任务是把解法具体化,回答“应该怎样具体地实现这个系统”这个关键问题。–还不是编写程序,而是设计出程序的详细规格说明。–又称为模块设计、物理设计或低层设计。2021/6/3296.编码和单元测试–关键任务是写出正确的容易理解、容易维护的程序模块,并测试。7.综合测试–关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。–集成测试、验收测试、系统测试–分析系统的可靠性–记录测试计划、详细测试方案及实际测试结果,作为软件配置的一部分。2021/6/3308.软件维护–维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。–通常有四类维护活动•改正性维护,也就是诊断和改正在使用过程中发现的软件错误;•适应性维护,即修改软件以适应环境的变化;•完善性维护,即根据用户的要求改进或扩充软件使它更完善;•预防性维护,即修改软件为将来的维护活动预先做准备。2021/6/3311.4软件过程•在实际软件开发时,软件规模、种类、开发环境及开发时使用的技术方法等因素,影响阶段的划分。软件开发软件维护软件定义•生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。2021/6/332瀑布模型•在20世纪80年代之前,唯一被广泛采用的生命周期模型•现在仍然是软件工程中应用得最广泛的过程模型。2021/6/333瀑布模型•传统的瀑布模型开发软件特点:1.阶段间具有顺序性和依赖性•前一阶段完成后开始后一阶段•前一阶段输出作为后一阶段输入2021/6/334瀑布模型•传统的瀑布模型开发软件特点:2.•不可急于求成•清楚地区分逻辑设计与物理实现•尽可能推迟程序的物理实现2021/6/335瀑布模型•传统的瀑布模型开发软件特点:3.质量保证•每个阶段都必须完成规定的文档•每个阶段结束前都要对所完成的文档进行评审2021/6/336瀑布模型•不希望有“变化”•变化来的越晚,付出的代价越高。•设计阶段过多的假设,导致理想化、一厢情愿的东西过多。2021/6/337瀑布模型传统的瀑布模型实际的瀑布模型2021/6/338瀑布模型•带“反馈环”(实线箭头表示开发过程,虚线箭头表示维护过程)•发现错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再继续完成后面阶段的任务。2021/6/339瀑布模型•优点:一定程度解决“变化”的问题。•缺点:文档驱动,完全依赖书面文字。2021/6/340快速原型模型•快速建立起可以在计算机上运行的程序,其功能往往是最终产品功能的子集。•模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户试用
本文标题:软件设计师-软件工程01
链接地址:https://www.777doc.com/doc-8541746 .html