软件工程SoftwareEngineering主讲人:崔欢欢请思考以下问题你的打算:你准备找一个什么样的工作?你能分清机关、事业和企业性质的单位吗?想学到什么知识?想找工作、考研、考公务员?想过四六级?想考哪些专业认证?你了解目前软件行业人才需求的现状吗?你理想中的工作岗位可能需要什么技能?你和别人合作是否会有什么障碍?你估计一下软件工程是门什么样的课?教材《软件工程》,21世纪高等学校计算机系列实用规划教材,东北大学出版社,2010,李惠明等编著教材特点:一本传统的软件工程教材,以软件生命周期阶段为线索讲解软件过程的概念、原理、方法和软件工具。由国人编写,语言易读易懂难度适中,适合初学者作为教材使用4参考文献软件工程(原书第9版)原书名:SoftwareEngineering,NinthEdition,作者:(英)lanSommerville著译者:程成等译,2011年5月软件工程导论,陈明,机械工业出版社,2010年1月软件工程-实践者的研究方法,RS.Pressman,机械工业出版社,2011年5月软件工程导论,张海潘编著,清华大学出版社,2013年8月Internet上的各类学习网站.课程地位计算机专业的重要专业课之一大学英语、离散数学。。。专业基础课数据结构、C/C++、计算机导论基础课软件工程、数据库、网络。。。专业课2019/8/11软件工程是计算机科学与技术专业、软件工程的一门专业核心课程。通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。课程的性质、目的与任务2019/8/11本课程比较全面、系统地介绍软件工程的概念、技术与方法。主要内容包括:软件工程概述、软件生存周期及软件需求分析、软件设计方法、软件测试技术等。通过本课程的学习,使学生能真正的从中了解软件开发的整个过程。为了让学生真正得以实践,结合一些项目案例,让学生从问题定义开始,经过可行性研究、需求分析、概要设计、详细设计、编码、测试,这样一个软件开发过程,从而使学生掌握软件开发的基本技能。课程主要内容2019/8/11学习本课程的基本要求本课程是继程序设计课程之后,对提高学生软件开发能力有重要作用的一门课程。要求学生在学习本课程前应掌握信息管理系统、数据结构、结构化程序设计、面向对象程序设计以及程序设计方法。通过本课程的学习,为学生后期的毕业设计环节奠定了良好的基础。在一些人眼里,今天的软件开发似乎已成为简单的事情,已有了不少很好的开发工具和软件库,软件开发人员训练有素,都强烈渴望去编写很酷的软件,可以在几天的时间里编写出一个相当复杂的软件。但为什么有一些软件能够得到用户的喜欢,而另一些则不能?为什么有些软件能够在市场上成功,而有些则受到冷落?由此可见,开发软件并不一定难,难就难在如何开发有用的软件。微软凌小宁博士我最大的心得是,一个产品一定要找到能够真正适用的场合,不能只是为了技术而从事技术为了研究而进行研究,却不管用户对你所研究的技术和产品有没有需求。否则,无论你的技术是多么优秀,多么先进,恐怕你的产品在市场上都无法获得成功。微软张益肇博士第1章软件工程概述计算机基础软件软件危机软件工程的概念小结计算机基础计算机组成冯.诺依曼体系结构:输入设备输出设备存储器运算器控制器计算机中数的表示二进制(bit)八进制(byte)十进制数据:数值型、文本型、图形、图像、音频数据(多媒体数据)计算机语言语言类型:机器语言(二进制指令),汇编语言,高级语言,BASIC,C,FORTRAN,COBOL,C++,JAVA……语言要素:词汇,语法,控制逻辑控制逻辑:顺序、分支、循环程序为解决某个计算问题,用计算机语言表示的计算步骤。如:inputrifr0message(“半径应大于0”)A=PI*r*routputA程序=数据结构+算法数据结构变量,数组,记录,文件存储结构(物理结构),逻辑结构算法:求解问题的步骤序列。1.每个步骤精确描述,无歧义;2.步骤是有限的;3.可以用计算机表示2019/8/11软件的概念与特点1、软件softwaresoft+ware软制品(软体)软件是计算机系统中与硬件相互依存的另一部分。它包括程序、数据及其相关文档的完整集合。2019/8/112、软件特点.软件是一种逻辑实体,而不是具体的物理实体.软件的生产与硬件不同.在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题磨合调整磨损用坏修改点实际曲线理想曲线硬件失效率曲线时间失效率时间失效率软件失效率曲线2019/8/11.软件的成本相当昂贵软件技术的发展落后于需求时间软件复杂性软件需求差距软件技术硬、软件成本比例的变化年份成本%软件1950197019851995硬件2019/8/113、软件的分类1、按软件的功能进行划分系统软件支撑软件应用软件2019/8/11支撑软件一般类型:文本编辑程序文本格式化程序支持需求分析:PSL/PSA问题描述语言关系数据库管理系统支持设计:图形软件包结构化流程图绘图程序支持测试:静态分析器测试覆盖检验程序支持实现:编辑程序连接编辑程序支持管理:标准检验程序库管理程序2019/8/112、按软件的规模进行划分按开发软件所需的人力、时间以及完成的源代码行数。类别参加人数研制期限产品规模(源代码行数)微型小型中型大型甚大型极大型112-55-20100-10002000-50001-4周1-6周1-2年2-3年4-5年5-10年约500行约2000行5000-50000行5万-10万行100万行1000万行2019/8/113、按软件开发划分软件项目开发软件产品开发2019/8/11软件工程的概念及范畴1、“软件工程”----SoftwareEngineering于1968年NATO组织在德国召开的一次会议上提出是把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。2019/8/11软件工程学软件开发技术软件工程管理软件开发方法学软件工具软件工程环境软件工程管理学软件经济学----软件工程学的范畴2、软件工程学2019/8/11Wakeupeverydaywithafeelingofpassionforthedifferenttechnologywillmakeinpeople’sLife.微软企业文化宗旨部分内容每天醒来的时候,要对技术给生活造成的改变始终拥有一份激情。2019/8/11程序3、软件的演变(即从传统软件开发到现代软件开发)软件软件产品传统软件开发现代软件开发1975198920000.00016240营业额增长曲线80独唱小合唱合唱万人大合唱|||简单程序较复杂程序软件高薪酬职位软件工程产生的背景1.软件的发展早期•面向批处理•有限的分布•自定义软件第二阶段•多用户•实时•数据库•软件产品第三阶段•分布式系统•嵌入“智能”•低成本硬件•消费者的影响第四阶段•强大的桌面系统•面向对象技术•专家系统•人工神经网络•并行计算•网络计算机1950196019701980199020001968年10月,北大西洋公约组织(NATO)的科学家在德国召开的学术会议上正式提出了软件危机问题。软件工程产生的背景2.软件危机a、软件危机的表现(1/3)成本高IBM360OS,5000多人年,耗时4年(1963-1966),花费2亿多美元美国空军:1955年软件占总费用(计算机系统)的18%,70年60%,85年达到85%美国全球军事指挥控制系统,硬件1亿美元,软件高达7.2亿美元计算机软件和硬件费用比010203040506070809060年代80年代计算机软件计算机硬件软件质量得不到保证软件应用面的扩大:科学计算、军事、航空航天、工业控制、企业管理、办公、家庭软件越来越多的应用于安全攸关(safetycritical)的系统,对软件质量提出更高的要求80年代欧洲亚丽安娜火箭的发射失败,原因是软件错误美国阿托拉斯火箭的发射失败,原因是软件故障英国1986年开发的办公室信息系统Folios经4年,因性能达不到要求,1989年取消日本第5代机因为软件问题在投入50亿美元后于1993年下马2007年诺顿误杀中文版windowsxp由于软件质量问题导致失败的软件项目非常多a、软件危机的表现(2/3)a、软件危机的表现(3/3)进度难以控制项目延期比比皆是由于进度问题而取消的软件项目较常见只有一小部分的项目能够按期完成维护非常困难软件维护的多样性软件维护的复杂性软件维护的副作用b、产生软件危机的原因-与软件本身的特点有关(难于维护,逻辑复杂)-与软件开发与维护的方法不正确有关:-软件≠程序-急于求成=拔苗助长-各自为阵-无方法学开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样正如搭茅草房和建设高楼大厦大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动C、软件工程(学)因危机而产生d、软件工程(学):克服软件危机的努力(1)从管理的角度软件开发过程的研究、文档的标准化以及人们的交流方式等(2)软件开发方法的研究结构化软件开发方法,面向对象的开发方法提出有效的方法和工具支持软件开发1968年提出软件工程概念和思想20世纪70年代的结构化软件开发方法20世纪80年代的面向对象的软件开发方法新的技术:软件重用、快速原型、需求工程典型技术:COM,Java,C++,J2EE,.Net,….支撑工具和环境:Jbuilder,VisualStudio,eclipse,myeclipse,vb,…1、解决危机的技术途径20世纪80年代末,美国DoD和工业界开始认识到管理的重要性美国DoD的一项研究表明,70%的项目由于管理不善导致难以控制进度、成本和质量;进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部如果软件开发组织不能对软件项目进行有效管理,就不能充分发挥软件开发方法和工具的潜力,也就不能高效率地开发出高质量的软件产品。2、解决危机的管理途径软件工程定义(1)Theestablishmentanduseofsoundengineeringprinciples(methods)inordertoobtaineconomicallysoftwarethatisreliableandworksonrealmachines.(1968-FritzBauer)软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。软件工程定义(2)Softwareengineering.(1)Theapplicationofasystematic,disciplined,quantifiableapproachtothedevelopment,operation,andmaintenanceofsoftware;thatis,theapplicationofengineeringtosoftware.(2)Thestudyofapproachesasin(1).(IEEE(TheInstituteforElectricalandElectronicengineers)Std610-1990.)软件工程是:(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。软件工程定义(3)Engineeringisthesystematicapplicationofscientificknowledgeincreatingandbuildingcost-effectivesolutionstopracticalproblemsintheservice