软件工程课程设计幻灯片.ppt
软件工程课程设计第1页,共14页,编辑于2022年,星期三软件工程 软软件工程件工程件工程件工程是一是一门门研究用工程化方法构建和研究用工程化方法构建和维护维护有效的、有效的、实实用的和高用的和高质质量的量的软软件件的学科。的学科。它涉及到它涉及到程序程序程序程序设计语设计语言言言言、数据数据库库、软软件开件开发发工具工具、系系统统平台平台、标标准、准、设计设计模式模式模式模式等方面。等方面。软软件件应应用于多个方面。典型的用于多个方面。典型的软软件比如有件比如有电电子子邮邮件件、嵌入式系嵌入式系统统、人机界面人机界面人机界面人机界面、办办公包公包公包公包、操作系操作系统统、编译编译器器器器、数据数据库库、游游戏戏等。同等。同时时,各个行各个行业业几乎都有几乎都有计计算机算机软软件的件的应应用,比如用,比如工工工工业业、农业农业、银银行行行行、航空航空、政府政府部部门门等。而等。而这这些些应应用促用促进进了了经济经济和社会的和社会的发发展,提高人展,提高人们们的工作效率,同的工作效率,同时时提升了生活提升了生活质质量。量。软软件工程件工程师师是是对应对应用用软软件件创创造造软软件的人件的人们们的的统统称,称,软软件工程件工程师师按按照所照所处处的的领领域不同可以分域不同可以分为为系系统统分析分析员员、软软件件设计师设计师、系系系系统统架构架构架构架构师师、程序程序员员、测试员测试员等等。人等等。人们们也常常用程序也常常用程序员员来泛指各种来泛指各种软软件工件工程程师师。2022/10/72第2页,共14页,编辑于2022年,星期三软件工程的由来 鉴鉴于于软软件开件开发时发时所遭遇困境,所遭遇困境,北大西洋公北大西洋公北大西洋公北大西洋公约组织约组织(NATONATO)在)在19681968年年举办举办了首次了首次软软件工程学件工程学术术会会议议,并于会中提出,并于会中提出“软软件工程件工程”来来界定界定软软件开件开发发所需相关知所需相关知识识,并建,并建议议“软软件开件开发应该发应该是是类类似工似工程的活程的活动动”。软软件工程自件工程自19681968年正式提出至今,年正式提出至今,这这段段时间时间累累积积了了大量的大量的研究研究成果,广泛地成果,广泛地进进行大量的技行大量的技术实术实践,借由践,借由学学学学术术界界界界和和产产业业界的共同努力,界的共同努力,软软件工程正逐件工程正逐渐发渐发展成展成为为一一门专业门专业学科学科学科学科。2022/10/73第3页,共14页,编辑于2022年,星期三软件工程的定义 创创立与使用健全的工程原立与使用健全的工程原则则,以便,以便经济经济地地获获得可靠且高效率的得可靠且高效率的软软件。件。应应用系用系统统化,遵从原化,遵从原则则,可被,可被计计量的方法来量的方法来发发展、操作及展、操作及维护软维护软件;也就件;也就是把工程是把工程应应用到用到软软件上。件上。与开与开发发、管理及更新、管理及更新软软件件产产品有关的理品有关的理论论、方法及工具。、方法及工具。一种知一种知识识或学科(或学科(disciplinediscipline),目),目标标是生是生产产品品质质良好、准良好、准时时交交货货、符合、符合预预算,并算,并满满足用足用户户所需的所需的软软件。件。实际应实际应用科学知用科学知识识在在设计设计、建构、建构电脑电脑程序,与相伴而来所程序,与相伴而来所产产生的文件,以及后生的文件,以及后续续的的操作和操作和维护维护上。上。使用与系使用与系统统化生化生产产和和维护软维护软件件产产品有关之技品有关之技术术与管理的知与管理的知识识,使,使软软件开件开发发与修与修改可在有限的改可在有限的时间时间与与费费用下用下进进行。行。建造由工程建造由工程师团队师团队所开所开发发之大型之大型软软件系件系统统有关的知有关的知识识学科。学科。对软对软件分析、件分析、设计设计、实实施及施及维护维护的一种系的一种系统统化方法。化方法。系系统统化地化地应应用工具和技用工具和技术术于开于开发发以以计计算机算机为为主的主的应应用。用。2022/10/74第4页,共14页,编辑于2022年,星期三软件工程的内核知识(SWEBOK)ACMACM 与与 IEEE Computer Society IEEE Computer Society 联联合修定的合修定的 SWEBOKSWEBOK(Software Engineering Software Engineering Body of KnowledgeBody of Knowledge)提到,)提到,软软件工程件工程领领域中的内核知域中的内核知识识包括:包括:软软件需求(件需求(Software requirementsSoftware requirements)软软件件设计设计(Software designSoftware design)软软件建构(件建构(Software constructionSoftware construction)软软件件件件测试测试(Software testSoftware test)软软件件维护维护与更新(与更新(Software maintenanceSoftware maintenance)软软件构型管理(件构型管理(Software Configuration Management,SCMSoftware Configuration Management,SCM)软软件工程管理(件工程管理(Software Engineering ManagementSoftware Engineering Management)软软件开件开发过发过程(程(Software Development ProcessSoftware Development Process)软软件工程工具与方法(件工程工具与方法(Computer-Aided Software Engineering,CASEComputer-Aided Software Engineering,CASE)软软件品件品质质(Software QualitySoftware Quality)2022/10/75第5页,共14页,编辑于2022年,星期三软件工程与计算机科学 软软件的开件的开发发到底是一到底是一门门科学科学还还是一是一门门工程工程,这这是一个被争是一个被争论论了很了很久的久的问题问题。实际实际上,上,软软件开件开发发兼有两者的特点。但是兼有两者的特点。但是这这并不意并不意味着它味着它们们可以被互相混淆。很多人可以被互相混淆。很多人认为软认为软件工程基于件工程基于计计算机科算机科学学和和信息科学信息科学信息科学信息科学就如就如传统传统意意义义上的工程学之于上的工程学之于物理物理和和化学化学一一样样。在。在美国,大美国,大约约40%40%的的软软件工程件工程师师具有具有计计算机科学的学位。在世界其他算机科学的学位。在世界其他地方,地方,这这个比例也差不多。他个比例也差不多。他们们并不一定会每天使用并不一定会每天使用计计算机科学算机科学方面的知方面的知识识,但是他,但是他们们每天都会使用每天都会使用软软件工程方面的知件工程方面的知识识。2022/10/76第6页,共14页,编辑于2022年,星期三软件工程与计算机科学的差别软件工程与计算机科学的差别11软件工程软件工程计算机科学计算机科学目标在时间、资源、人员这3个主要限制条件下构建满足用户需求的软件系统。探索正确的计算和建模方法,从而改进计算方法本身。产品软件(比如办公包和编译器)。算法(比如希尔排序法)和抽象的问题(比如哲学家进餐问题)。进度与时间表软件项目都有特定的进度与时间表研究项目一般不具有设置的进度与时间表关注点软件工程关注如何为用户实现价值。软件理论关注的是软件本身运行的原理,比如时间复杂度,空间复杂度,和算法的正确性。变化程度随着技术和用户需求的不断变化,软件开发人员必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中。对于某一种特定问题的正确解决方法将永远不会改变。需要的其他知识相关领域的知识。数学。著名的探索者和教育家Barry Boehm,David Parnas,and Frederick P.Brooks。Edsger Dijkstra,高德纳,Robert Tarjan,Peter Slater,艾伦图灵,姚期智。著名的实践者John Backus,Dan Bricklin,蒂姆伯纳斯-李,林纳斯托瓦兹,理查德马修斯托曼。无。2022/10/77第7页,共14页,编辑于2022年,星期三软件工程与计算机程序设计 软软件工程存在于各种件工程存在于各种应应用中,存在于用中,存在于软软件开件开发发的各个方面。的各个方面。而而程序程序设计设计通常包含了程序通常包含了程序设计设计和和编码编码的反复迭代的的反复迭代的过过程,它程,它是是软软件开件开发发的一个的一个阶阶段。段。软软件工程力件工程力图对软图对软件件项项目的各个方面作出指目的各个方面作出指导导,从,从软软件的可件的可行性分析直到行性分析直到软软件完成以后的件完成以后的维护维护工作。工作。软软件工程件工程认为软认为软件件开开发发与各种市与各种市场场活活动动密切相关。比如密切相关。比如软软件的件的销销售售,用,用户户培培训训,与之相关的与之相关的软软件和硬件安装等。件和硬件安装等。软软件工程的方法学件工程的方法学认为认为一个一个独立的独立的程序程序员员不不应应当脱离当脱离团队团队而而进进行开行开发发,同,同时时程序的程序的编编写不写不能能够够脱离脱离软软件的需求,件的需求,设计设计,以及,以及客客户户的利益。的利益。软软件工程的件工程的发发展是展是计计算机程序算机程序设计设计工工业业化的体化的体现现。2022/10/78第8页,共14页,编辑于2022年,星期三软件危机 软软件工程的件工程的兴兴起要根源于起要根源于2020世世纪纪6060,7070和和8080年代的年代的软软件危机件危机。在那个。在那个时时代,很多的代,很多的软软件件最后都得到了一个悲惨的最后都得到了一个悲惨的结结局。很多的局。很多的软软件件项项目开目开发时间发时间大大超出了大大超出了规规划的划的时间时间表。一些表。一些项项目目导导致了致了财产财产的流失,的流失,甚至某些甚至某些软软件件导导致了人致了人员伤员伤亡。同亡。同时软时软件开件开发发人人员员也也发现软发现软件开件开发发的的难难度越来越大。度越来越大。OS 360OS 360操作系操作系统统被被认为认为是一个典型的案例。到是一个典型的案例。到现现在在为为止,它仍然止,它仍然被使用在被使用在IBMIBM360360系列主机中。系列主机中。这这个个经历经历了数十年,极度复了数十年,极度复杂杂的的软软件件项项目甚目甚至至产产生了一套不包括在原始生了一套不包括在原始设计设计方案之中的工作系方案之中的工作系统统。OS 360OS 360是第一个超是第一个超大型的大型的软软件件项项目,它使用了目,它使用了10001000人左右的程序人左右的程序员员。Fred BrooksFred Brooks在随在随后他的大作后他的大作人月神人月神话话(The Mythical Man-MonthThe Mythical Man-Month)中曾)中曾经经承承认认,在,在他管理他管理这这个个项项目的目的时时候,他犯了一个价候,他犯了一个价值值数百万美元的数百万美元的错误错误。财产财产的的损损失:失:软软件的件的错误错误可能可能导导致巨大的致巨大的财产损财产损失。失。欧洲欧洲阿里阿里亚亚娜火箭娜火箭的爆炸就是一个最的爆炸就是一个最为为惨痛的教惨痛的教训训。2022/10/79第9页,共14页,编辑于2022年,星期三方法学 软软件工程的方法有很多方面的意件工程的方法有很多方面的意义义。包括。包括项项目管理,分析,目管理,分析,设设计计,程序的,程序的编编写,写,测试测试和和质质量控制。量控制。软软件件设计设计方法可以区方法可以区别为别为重量重量重量重量级级的方法的方法的方法的方法和和轻轻量量量量级级的方法的方法的方法的方法。重量。重量级级的方法中的方法中产产生大量的正式生大量的正式文档文档。著名的重量著名的重量级级开开发发方法包括方法包括ISO 9000ISO 9000,CMMCMM,和,和统统一一软软件开件开发发过过程程(RUPRUP)。)。轻轻量量级级的开的开发过发过程没有程没有对对大量正式文档的要求。著名的大量正式文档的要求。著名的轻轻量量级级开开发发方法包括方法包括极限极限编编程程(XPXP)和)和敏捷敏捷过过程程(Agile Agile ProcessesProcesses)。)。2022/10/710第10页,共14页,编辑于2022年,星期三 根据根据新方法学新方法学这这篇文章的篇文章的说说法,法,重量重量重量重量级级方法方法方法方法呈呈现现的是一种的是一种“防御型防御型”的姿的姿态态。在。在应应用用“重量重量级级方法方法”的的软软件件组织组织中,由于中,由于软软件件项项目目经经理不理不参与或者很少参与程序参与或者很少参与程序设计设计,无法从,无法从细节细节上把握上把握项项目目进进度,因而会度,因而会对项对项目目产产生生“恐惧感恐惧感”,不得不要求程序,不得不要求程序员员不断撰写很多不断撰写很多“软软件开件开发发文档文档”。而而轻轻量量量量级级方法方法方法方法则则呈呈现现“进进攻型攻型”的姿的姿态态,这这一点从一点从XPXP方法特方法特别强调别强调的四的四个准个准则则“沟通、沟通、简单简单、反、反馈馈和勇气和勇气”上有所体上有所体现现。目前有一些人。目前有一些人认为认为,“重量重量级级方法方法”适合于大型的适合于大型的软软件件团队团队(数十人以上)使用,而(数十人以上)使用,而“轻轻量量级级方方法法”适合小型的适合小型的软软件件团队团队(几人、十几人)使用。当然,关于(几人、十几人)使用。当然,关于重量重量重量重量级级方法方法方法方法和和轻轻量量量量级级方法方法方法方法的的优优劣存在很多争劣存在很多争论论,而各种方法也在不断,而各种方法也在不断进进化中。化中。一些方法一些方法论论者者认为认为人人们们在开在开发发中中应应当当严严格遵循并且格遵循并且实实施施这这些方法。些方法。但是一些人并不具有但是一些人并不具有实实施施这这些方法的条件。些方法的条件。实际实际上,采用何种方上,采用何种方法开法开发软发软件取决于很多因素,同件取决于很多因素,同时时受到受到环环境的制境的制约约。2022/10/711第11页,共14页,编辑于2022年,星期三软件开发过程 软软件开件开发过发过程是随着开程是随着开发发技技术术的演化而随之改的演化而随之改进进的。从早期的的。从早期的瀑布式瀑布式(Waterfall)(Waterfall)的开的开发发模型到后来出模型到后来出现现的螺旋式的迭代的螺旋式的迭代(Spiral)(Spiral)开开发发,以致最近开始,以致最近开始兴兴起的敏捷开起的敏捷开发发方法方法(Agile)(Agile),他,他们们展示出了在不同的展示出了在不同的时时代代软软件件产业对产业对于开于开发过发过程的不同的程的不同的认识认识,以及,以及对对于不同于不同类类型型项项目的理解方法。目的理解方法。注意区分注意区分软软件开件开发过发过程和程和软软件件过过程改程改进进之之间间的重要区的重要区别别。诸诸如如像像ISO 15504,ISO 9000,CMM,CMMIISO 15504,ISO 9000,CMM,CMMI这样这样的名的名词阐词阐述的是一些述的是一些软软件件过过程改程改进进框架,他框架,他们们提供了一系列的提供了一系列的标标准和策略来指准和策略来指导软导软件件组织组织如何提升如何提升软软件开件开发过发过程的程的质质量、量、软软件件组织组织的能力,而不是的能力,而不是给给出具体的出具体的开开发过发过程的定程的定义义。2022/10/712第12页,共14页,编辑于2022年,星期三软件工程的发展方向 “敏捷开敏捷开敏捷开敏捷开发发”(Agile DevelopmentAgile Development)被)被认为认为是是软软件工程的一个重件工程的一个重要的要的发发展。它展。它强调软强调软件开件开发应发应当是能当是能够对够对未来可能出未来可能出现现的的变变化和化和不确定性作出全面反不确定性作出全面反应应的。的。敏捷开敏捷开发发被被认为认为是一种是一种“轻轻量量量量级级”的方法。在的方法。在轻轻量量级级方法中最方法中最负负盛名的盛名的应该应该是是“极限极限极限极限编编程程程程”(Extreme ProgrammingExtreme Programming,简简称称为为XPXP)。而与)。而与轻轻量量级级方法相方法相对应对应的是的是“重量重量重量重量级级方法方法方法方法”的存在。重量的存在。重量级级方方法法强调强调以开以开发过发过程程为为中心,而不是以人中心,而不是以人为为中心。重量中心。重量级级方法的例子比方法的例子比如如CMM/PSP/TSPCMM/PSP/TSP。面向方面的程序面向方面的程序面向方面的程序面向方面的程序设计设计(Aspect Oriented ProgrammingAspect Oriented Programming,简简称称AOPAOP)被被认为认为是近年来是近年来软软件工程的另外一个重要件工程的另外一个重要发发展。展。这这里的里的方面方面方面方面指的是指的是完成一个功能的完成一个功能的对对象和函数的集合。在象和函数的集合。在这这一方面相关的内容一方面相关的内容有有泛型泛型编编程程(Generic ProgrammingGeneric Programming)和)和模板模板。2022/10/713第13页,共14页,编辑于2022年,星期三参考 1.1.1.1.F.L.Bauer,NATO Software Engineering Conference,1968.F.L.Bauer,NATO Software Engineering Conference,1968.2.2.2.2.IEEEIEEE标标准准电脑电脑字典,字典,610.12610.12,1990 1990 3.3.3.3.I.Sommerville,Software Engineering,7th ed.:Addison-Wesley Longman Publishing Co.,Inc.I.Sommerville,Software Engineering,7th ed.:Addison-Wesley Longman Publishing Co.,Inc.Boston,MA,USA,2004.Boston,MA,USA,2004.4.4.4.4.S.R.Schach,Software Engineering:Asken Associates Pacific Palisades,CA,USA,1990.S.R.Schach,Software Engineering:Asken Associates Pacific Palisades,CA,USA,1990.5.5.5.5.B.W.Boehm,Software Engineering Economics:Prentice Hall PTR Upper Saddle B.W.Boehm,Software Engineering Economics:Prentice Hall PTR Upper Saddle River,NJ,USA,1981.River,NJ,USA,1981.6.6.6.6.R.Fairley,Software Engineering Concepts:McGraw-Hill,Inc.New York,NY,USA,R.Fairley,Software Engineering Concepts:McGraw-Hill,Inc.New York,NY,USA,1985.1985.7.7.7.7.C.Ghezzi,M.Jazayeri,and D.Mandrioli,Fundamentals of Software Engineering,2nd C.Ghezzi,M.Jazayeri,and D.Mandrioli,Fundamentals of Software Engineering,2nd ed.:Prentice Hall,2002.ed.:Prentice Hall,2002.8.8.8.8.The Free On-Line Dictionary of Computing,The Free On-Line Dictionary of Computing,http:/foldoc.org/http:/foldoc.org/9.9.9.9.S.A.Conger,The New Software Engineering:Course Technology Press United S.A.Conger,The New Software Engineering:Course Technology Press United States,1993.States,1993.10.10.10.10.http:/puter.org/portal/web/swebokhttp:/puter.org/portal/web/swebok 11.11.11.11.P.McBreen,Software Craftmanship:The New Imperative:Addsion-Wesley Professional,2001.P.McBreen,Software Craftmanship:The New Imperative:Addsion-Wesley Professional,2001.12.12.12.12.11 2022/10/714第14页,共14页,编辑于2022年,星期三