软件工程-概述课件_第1页
软件工程-概述课件_第2页
软件工程-概述课件_第3页
软件工程-概述课件_第4页
软件工程-概述课件_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,软件工程,西南财经大学天府学院,2,成绩考核,考勤-20期末考试-30项目成绩-50项目成绩:本课程采用项目教学法,项目成绩包括需求、设计文档、UML建模图。,3,内容-理论,软件工程概论软件过程介绍结构化分析、设计、实现面向对象方法学导论面向对象分析、设计、实现统一建模语言项目展示,4,内容-实验上机,用案图对象图类图状态图活动图协作图序列图,5,如何学习软件工程,耐心先学习课本理论、多看开阔视野网络是最好的老师希赛UML软件工程组织CSDN实践是最好的学习手段,6,参考书籍推荐,平衡敏捷和规范作者:(美)BarryBoehm(美)RichardTurner软件架构实践作者:(美)LenBass(美)PickKazman产生式编程方法、工具与应用作者:GenerativeProgrammingMethods,Tools,andApplications,7,八十年代初科学家的预言,Osborne1979将迎来”新的工业革命”Toffler1980微电子的发展是人类历史上的”第三次浪潮”80年代初美国商业周刊杂志在头版刊登大标题:“软件:新的驱动力”!,8,Naisbitt1982人类社会将“从工业社会向信息社会转变”Feigenbaum1983计算机控制的信息和知识将成为20世纪表现能力的焦点Stoll1989网络和软件产生的“电子社会”是实现全球知识交流的关键。,9,二十年后的现实,计算机的发展与普及计算机软件的发展与普及计算机网络的发展与普及因为普及了计算机、软件和网络迎来了信息化社会和知识经济。,10,软件工程的重要性,历史角度软件产业发展的必然软件危机,11,社会角度-个人英雄主义时代的终结史玉柱(巨人汉卡)鲍岳桥(UCDOS)求伯君(WPS)刘旭(瑞星)王江民(KV)王文京(用友)张小龙(Foxmail)丁磊(163邮局)洪以容(netants),12,这些英雄如今不是销声匿迹,就是组成了自己的团队。我们需要英雄,但是,如果只有英雄,那么就只有软件、而没有软件业了。能够支撑起民族软件业的只能是靠工程化思想武装起来的团队、还要有几只超级规模的团队!,13,我国的软件开发水平,单从编码来看,我们拥有众多的高水平程序员,绝不逊色于任何国家,但软件开发管理水平与发达国家有很大差距,这也就是我们不能开发出像Office、操作系统之类软件的原因。我们从单个程序员来说,能够编写出一流的代码,漂亮的界面。但是却不能协调众多程序员去开发一个项目(工程)软件。在这一方面说我们中国程序员一个人是一条龙,十个人是一条虫并不为过。,14,例:首都机场。印度人写的一个模块200多行,我们程序员只用不到50行,但人家的模块同样正确、而且坚固、文档清晰易懂。=技术技巧固然重要,但软件开发中最大的问题已不是技术问题,而是管理问题!,15,个人角度-专业人员必备的个人素质1)基础理论:训练分析解决问题的能力,深层研究的工具。数学分析训练严密的逻辑思维。普通物理和西方哲学史等教会你很多思维方式,比如:假说大胆假设、认真求证。2)专业理论:数据库理论、网络基础、编译原理等。3)专业技术:程序设计语言等。4)工程技术:软件工程,本、研教育中唯一涉及工程规范与管理的课程,它象粘合剂,技术经过它的粘合才能形成软件产品!5)外语。多门语言多条路。6)表达与交流能力:团队内部、与客户通讯的基本素质。7)法律常识与职业道德:知识产权保护、行业特点的职业道德。,16,课程学习的目标,掌握基础理论树立工程化思想培养国际标准的意识锻炼团队合作精神加强交流与动手能力,17,两个上升,转变对软件的认识上升程序系统转变思维定式上升程序员系统工程师(系统分析员),18,软件危机,软件的发展史什么是软件软件的特点软件危机,19,1946年到60年代初程序设计时期主要采用批处理技术,没有任何其它形式的文档资料保留下来,开发出的程序根本无法维护。20世纪60年代初到70年代初程序系统时期程序的规模已经很大,需要多人分工协作,软件的开发方式由“个体生产”发展到了“软件作坊”。可是“软件作坊”基本上沿用了软件发展早期所形成的个体化的开发方式,软件的开发与维护费用以惊人的速度增加。许多软件产品根本不能维护,最终导致出现了严重的“软件危机”,20,20世纪70年代中期至80年代中期软件工程时期软件的开发以工程化的思想为指导,用工程化的原则、方法和标准来开发和维护软件。20世纪80年代中期至今面向对象时期面向对象软件开发技术在迅速取代传统软件工程开发方法。,21,早期第二阶段第三阶段第四阶段面向批处理多用户分布式系统强大的桌面系统有限的分布实时嵌入“智能”面向对象技术自定义软件数据库低成本硬件专家系统软件产品消费者的影响人工神经网络并行计算网络计算机,1950,1960,1970,1980,1990,2000,22,什么是软件,软件=程序?究竟什么是软件?软件=程序+数据+文档软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,23,程序是按事先设计的功能和性能要求执行的指令序列。-可以在计算上运行数据是使程序能正常操纵信息的数据结构。-运行程序所需要的文档是与程序开发,维护和使用有关的图文材料。-软件开发、维护、使用需要的。,24,SourceCode,Data,Result,Document,程序=算法+数据结构,25,软件的特点:(1)软件是物理产品还是逻辑产品?(2)软件有没有明显的制造过程?(3)软件在运行使用期间,有没有像硬件那样的机械磨损、老化问题。(4)软件的开发和运行受计算机系统的限制吗?,逻辑产品,没有,没有,答案是肯定的,26,(5)软件产品生产的成本主要是脑力劳动还是体力劳动?(6)你认为软件本身是复杂还是简单?,脑力劳动,复杂,27,(7)软件成本昂贵还是廉价?(8)软件的推广应用是否涉及社会因素?,昂贵,当然涉及,28,软件的应用,典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门,企业等。,29,软件技术面临的问题,规模复杂性生产率,30,例1:Windows95有多少行代码?1500wWindows98有多少行代码?1800wWindowsXP有多少行代码?1800wVista有多少行代码?5000W,31,例2:Exchange2000和Windows2000开发人员结构,32,1968年北大西洋公约组织的计算机科学家在德国召开国际会议,把计算机软件的开发和维护过程中出现的一系列严重问题称为“软件危机”。,33,IBMOS/360:共约100万条指令,花费了5000个人年;经费达数亿美圆,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。”,34,软件危机的代表,35,36,Therac-25:一种辐射治疗的机器。由于其软件设计时的瑕疵,致命地超过剂量设定导致在1985年六月到1987年一月之间,六件已知的医疗事故中,患者死亡或严重辐射灼伤。,37,软件危机的主要特征软件开发周期大大超过规定日期;软件开发成本严重超标;软件质量难于保证;,38,39,软件危机产生的原因,软件开发无计划软件需求不充分软件开发过程不规范软件产品无评测手段软件开发周期大大超过预算软件开发成本严重超标软件质量难于保证,软件不能满足社会发展的需求,成为社会、经济发展的制约因素,40,怎么样来解决软件危机?20世纪60年代后期出现了软件危机,北大两洋公约组织在德国提出了“软件工程”的概念,运用其它工程学的基本原理和方法,设计和管理软件生产。诞生了软件工程学,这是目前发现的解决软件危机唯有效的方法。,软件工程的目标:提高软件产品的质量和软件开发效率,减少软件维护的难度,41,什么是软件工程?,1983年IEEE给软件工程的定义:软件工程是开发、运行、维护和修复软件的系统方法。Fairly认为:“软件工程学是为了在成本限额以内按时完成开发和修复软件产品所需要的系统生产和维护技术及管理学科”。,强调“系统方法”,而不是“个人技巧”,强调“成本限额以内”及“技术和管理两个方面”,42,FritzBauer认为:“软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则”。1993年IEEE进一步给出了一个更全面的定义:软件工程是:(1)把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;(2)研究(1)中提到的途径。,强调“经济地开发出高质量的软件,应建立和使用的完善的工程化原则”。,43,什么是软件工程?软件工程就是指导计算机软件开发和维护的工程学科.采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程.,44,软件工程学三要素,工具,方法,过程,质量焦点,软件工程三要素,过程是完成开发软件各项任务的工作步骤。方法是完成软件开发的技术方法;包含了软件生命周期方法学与面向对象方法学工具是开发软件的支撑环境;,45,软件工程知识结构,软件需求软件设计软件构建软件测试软件维护软件配置管理软件工程管理软件工程过程软件工程工具和方法软件质量,IEEE在2004年发布软件工程知识体系结构,46,“软件工程”课程与其它软件专业课的区别(1)立足于系统的整体。(2)讲授系统分析、系统设计、测试及维护的理论和方法。(3)构筑一个软件系统,实践软件开发全过程。,47,软件工程的7条基本原理,用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应能清楚审查;开发小组的人员应该少而精;承认不断改进软件工程实践的必要性;,48,软件工程的主要研究内容,软件开发技术:软件工程方法学软件工程开发过程软件工具和软件工程环境软件工程管理:软件管理学软件经济学软件心理学,49,软件工程方法学,传统方法学面向对象方法学目前流行的方法:(1)重量级:ISO9000,CMM和RUP(2)轻量级:极限编程(ExtremeProgrammingXP)和敏捷流程(AgileProcess),强调以过程为中心,强调以人为中心,50,软件开发过程,软件生存周期软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期。,51,软件生存周期的组成(1)问题定义(2)可行性研究(3)需求分析(4)概要设计(5)详细设计(6)编码(7)测试(8)维护,软件定义,软件开发,运行维护,52,问题定义:在问题定义阶段,软件开发人员应该清楚:“要解决什么问题”。可行性研究:知道了要解决的问题,在这个阶段应该清楚“用什么办法解决这个问题”,保证在技术上、实效上、法律上都是行得通的。需求分析:确定软件的功能和性能。用户要要清楚开发出的软件系统能够做什么;软件开发人员也应该清楚用户的具体要求是什么。,53,概要设计:设计软件的总体结构,将一个大系统按照功能设计成小模块,每个模块完成一个相对独立的小功能。总体设计有时也称概要设计。详细设计:这个阶段还不是编写程序,是对每个模块设计具体的算法和数据结构,可以包括具体细节,类似于工程设计中的施工图纸。详细设计有时也称模块设计。,54,编码及调试:这个阶段的主要任务是根据详细设计的结果,用一种程序设计语言,编写正确的源程序,并且对每段程序进行严格测试。要求源程序容易理解、容易维护。综合测试:通过测试使软件系统达到用户的要求。最基本的测试集成测试和验收测试。集成测试是在把模块联结成系统的过程中,每联结若干个模块都进行必要的测试。验收测试是根据用户使用说明书,在用户的参与下对软件系统进行测试。,55,软件维护:软件投入运行后,通常有四类维护活动:改正性维护、适应性维护、完善性维护、预防性维护。改正性维护是纠正软件中的错误;适应性维护是修改软件让其适应计算机硬件(或操作系统)环境的变化;完善性维护是根据用户的要求改善或扩充功能;预防性维护是为将来的维护做准备。,56,软件工作范围,只考虑编写程序,涉及整个软件生存周期,扩展到,57,58,实际应用,合同阶段,开发阶段,产品维护阶段,产品市场调研,产品立项申请,产品需求规格,产品总体设计,概要/详细设计,编码及文档,单元测试,集成测试,用户测试,产品化,产品发行,产品结项,产品维护,产品个性化修改,产品市场部,工程部开发组,工程部服务组,用户测试人员,软件开发生存周期,流程,59,销售打单,需求分析,系统设计,系统开发,系统测试,系统实施,售后服务,1,2,3,4,5,6,7,60,销售打单,需求分析,系统设计,系统开发,系统测试,系统实施,售后服务,1,2,3,4,5,6,7,销售、售前工程师,系统分析师,系统架构师,软件开发工程师,软件测试工程师,系统实施工程师,售后服务工程师,流程,团队,61,售前工程师,做什么?(1)是项目开发人员与业务销售人员的桥梁(2)在业务销售人员眼中,售前人员扮演的是技术人员或技术专家的角色(3)在项目实施中的开发人员眼中,售前人员是专注技术的销售人员(4)在用户眼中,售前人员,是代表公司技术水平的技术专家,62,生活写照上午写方案,下午做演讲,晚上陪吃饭,63,岗位职责(1)负责组织制定系统集成项目的技术方案编写、标书的准备、讲解及用户答疑等工作;(2)配合客户经理完成与用户的技术交流、技术方案宣讲、应用系统演示等工作;(3)配合业务部其它部门做好用户沟通、资料共享、技术协调等工作;(4)配合市场人员完成应用系统演示、产品宣传资料撰写等工作;(5)配合做好与合作伙伴厂商的技术交流。,64,专业技能(1)网络(2)服务器(3)存储(4)安全(5)系统软件,65,需要具备的素质(1)熟悉自己的产品。(2)具有比较全面技术专业知识。熟悉当前IT的技术发展方向。(3)对本公司的开发能力、技术优势、劣势有比较清楚的认识。(4)作为行业软件的销售,必须熟悉本行业的业务,对本行业的信息化的现状和发展方向有一定的认识,了解行业中的其它专业软件的基本情况。(5)熟悉本行业的技术和产品动向,了解同类产品及其竞争对手的情况和特点。(6)能力熟练使用文本和图形编辑器进行方案、标书的编写。(7)熟悉项目招投标的一般程序。(8)善于交流,有良好的沟通能力和技巧。,66,系统分析师,系统分析师就是解决做什么的问题,就是要全面地理解用户的各项要求,并准确地表达所接受的用户需求,67,需要具备的素质,业务知识善于交流,有良好的沟通能力和技巧过硬的计算机软件开发技术,68,系统架构师,架构分为两种,(1)第一种是基础架构的设计规划,例如:OS,硬件,网络,各种应用服务器等等。(2)第二种是软件开发设计的架构师,他们负责规划程序的运行模式,层次结构,调用关系,规划具体的实现技术类型,甚至配合整个团队做好软件开发中的项目管理。,69,岗位职责(1)理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架);(2)对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、运行中出现的各种问题,70,软件开发工程师,应用软件开发,如:企业ERP系统软件开发,如:驱动程序,防火墙,操作系统,杀毒软件等网站开发,如:新浪,淘宝类似网站的开发移动开发,如:iPhone,Andriod等。,71,软件开发工程师,具备的素质(1)专业素质:至少熟悉一门编程语言,一种开发平台,一种数据库,良好的程序设计思想。(2)综合素质:为人讲诚信、踏实、认真,有钻研精神,工作效率高,精力充沛,良好的沟通能力和团队协作精神;,72,软件测试工程师,软件测试的目的A:证明软件是有问题的B:证明软件是没有问题的,73,沟通能力,移情能力,技术能力,自信心,外交能力,幽默感,很强的记忆力,耐心,怀疑精神,洞察力,4,5,2,3,6,7,10,8,9,1,11,自我督促,74,软件实施工程师,软件实施工程师的工作是软件产品服务主线的一个决定性环节,软件的成功离不开实施。那什么才是成功的实施呢?要让用户真正使用起来,让用户满意,用户的成功也就是软件的成功。软件的实施,其实并不是一件看起来很容易的事,也许可算是一项挑战,有时还需要工程师们一种“明知山有虎,偏向虎山行”的信心和勇气。,75,工作内容负责工程实施:包括常用操作系统、应用软件及公司所开发的软件安装、调试、定制开发及维护,还有少部分硬件、网络的工作;负责现场培训:现场软件应用培训;协助项目验收;负责需求的初步确认;负责项目维护。,76,WindowsLinuxUnixSolarisAIX,服务器IBMHP,网络Cisco华为,OracleSQLServerDB2,WebSphereWebLogicJBossIIS,应用软件,77,售后服务工程师,在软件或硬件方向从事售后技术维护、应用培训、升级管理、解决投诉,提升客户满意度,扩大用户群体对自有品牌的良好口碑。成为一名专业的技术支持工程师在企业里工作至少要3年以上,这样对企业的产品线,用户群体就会有一个全面的了解。,78,软件开发模型,软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型也常称为:软件过程模型软件生存周期模型软件工程范型,79,软件开发模型分类,瀑布模型原型模型增量模型螺旋模型喷泉模型,80,瀑布模型(WaterfallModel),可行性研究与计划,需求分析,设计,编码,运行维护,测试,定义阶段,开发阶段,维护阶段,81,瀑布模型软件开发的特点,阶段间具有顺序性和依赖性推迟实现的观点。每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。,82,瀑布模型的优点,软件生命周期模型,使软件开发过程可以在分析、设计、编码、测试和维护的框架下进行;软件开发过程具有系统性、可控性,克服了软件开发的随意性。,83,瀑布模型的缺点,项目开始阶段用户很难精确的提出产品需求,由于技术进步,用户对系统深入的理解,修改需求十分普遍。项目开发晚期才能得到程序的运行版本,这时修改软件需求和开发中的错误代价很大。采用线性模型组织项目开发经常发生开发小组人员“堵塞状态”,特别是项目的开始和结束。,84,实际的瀑布模型,需求分析,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,需求分析,验证,反馈线,开发过程,维护过程,实线箭头表示开发过程;虚线箭头表示维护过程。,85,瀑布模型的应用需求清晰,且小型的团队开发,整个开发团队没有明确的分工。每个成员都参与从需求、设计、编码、测试的过程。,86,快速原型模型,软件开发人员与用户一起进行需求分析,进行快速设计,建造原型,原型由用户评估,进步修改原型,再次进行设计。迭代这个过程,逐步使原型满足用户需要。,87,原型开发,用户测试运行原型,建造/修改原型,听取用户意见,88,89,优点(1)原型模型支持软件需求开发,帮助用户和开发人员理解需求,是软件需求工程的关键。(2)它产生的正式需求文挡,是软件开发的基础。(3)如果开发的原型是可运行的,它的若干高质量的程序片段和开发工具可用于工作程序的开发。(4)原型的开发和评审是系统分析员和用户/客户共同参予的迭代过程,每个迭代循环都是线性过程。,90,缺点:(1)对于大型软件项目,原型模型需要足够的人力资源以建立足够的原型组。(2)原型模型要求开发者和客户在一段时间内共同完成原型系统的开发,如果任何一方没有实现承诺,会导致原型开发的失败。(3)如果系统难以模块化,建造原型所需构件就有问题;如果高性能是一个指标,原型模型也可能不奏效。(4)原型模型不适合采用很多新技术的项目,91,快速原型模型的应用(1)用户对自己的需求也不是很明确。(2)项目只能是中小型。(3)开发方和用户的关系一定要密切。,92,增量模型,增量模型即渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。第1个增量构件实现软件的基本需求,提供最核心的功能。第2个增量构件提供更完善的编辑和文档生成功能;第3个增量构件实现拼写和语法检查功能;第4个增量构件完成高级的页面排版功能。,93,需求分析,验证,规格说明,验证,概要设计,验证,针对每个构件,完成详细设计、编码和集成,经测试后交付给用户,维护,增量模型,94,把软件产品分解成增量构件时,应该使构件的规模适中。分解时必须遵守的约束条件是:当把新构件集成到现有软件中时,所形成的产品必须是可测试的。瀑布模型或快速原型模型的目标是一次就把一个满足需求的产品提交给用户。增量模型分批地向用户提交产品,开发人员逐个构件地向用户提交产品。,95,增量模型的另一个优点是,逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品。使用增量模型的困难是系统的软件结构必须是开放式的。从长远观点看,具有开放结构的软件拥有真正的优势,这样的软件的可维护性明显好于封闭结构的软件。,96,尽管采用增量模型比采用瀑布模型和快速原型模型需要更精心的设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论