软件工程课程设计_第1页
软件工程课程设计_第2页
软件工程课程设计_第3页
软件工程课程设计_第4页
软件工程课程设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

软件工程课程设计第一页,共十四页,编辑于2023年,星期三软件工程软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公包、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。而这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析员、软件设计师、系统架构师、程序员、测试员等等。人们也常常用程序员来泛指各种软件工程师。2023/6/142第二页,共十四页,编辑于2023年,星期三软件工程的由来

鉴于软件开发时所遭遇困境,北大西洋公约组织(NATO)在1968年举办了首次软件工程学术会议,并于会中提出“软件工程”来界定软件开发所需相关知识,并建议“软件开发应该是类似工程的活动”。软件工程自1968年正式提出至今,这段时间累积了大量的研究成果,广泛地进行大量的技术实践,借由学术界和产业界的共同努力,软件工程正逐渐发展成为一门专业学科。

2023/6/143第三页,共十四页,编辑于2023年,星期三软件工程的定义

创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。应用系统化,遵从原则,可被计量的方法来发展、操作及维护软件;也就是把工程应用到软件上。与开发、管理及更新软件产品有关的理论、方法及工具。一种知识或学科(discipline),目标是生产品质良好、准时交货、符合预算,并满足用户所需的软件。实际应用科学知识在设计、建构电脑程序,与相伴而来所产生的文件,以及后续的操作和维护上。使用与系统化生产和维护软件产品有关之技术与管理的知识,使软件开发与修改可在有限的时间与费用下进行。建造由工程师团队所开发之大型软件系统有关的知识学科。对软件分析、设计、实施及维护的一种系统化方法。系统化地应用工具和技术于开发以计算机为主的应用。2023/6/144第四页,共十四页,编辑于2023年,星期三软件工程的内核知识(SWEBOK)

ACM

与IEEEComputerSociety联合修定的SWEBOK(SoftwareEngineeringBodyofKnowledge)提到,软件工程领域中的内核知识包括:软件需求(Softwarerequirements)软件设计(Softwaredesign)软件建构(Softwareconstruction)软件测试(Softwaretest)软件维护与更新(Softwaremaintenance)软件构型管理(SoftwareConfigurationManagement,SCM)软件工程管理(SoftwareEngineeringManagement)软件开发过程(SoftwareDevelopmentProcess)软件工程工具与方法(Computer-AidedSoftwareEngineering,CASE)软件品质(SoftwareQuality)2023/6/145第五页,共十四页,编辑于2023年,星期三软件工程与计算机科学

软件的开发到底是一门科学还是一门工程,这是一个被争论了很久的问题。实际上,软件开发兼有两者的特点。但是这并不意味着它们可以被互相混淆。很多人认为软件工程基于计算机科学和信息科学就如传统意义上的工程学之于物理和化学一样。在美国,大约40%的软件工程师具有计算机科学的学位。在世界其他地方,这个比例也差不多。他们并不一定会每天使用计算机科学方面的知识,但是他们每天都会使用软件工程方面的知识。2023/6/146第六页,共十四页,编辑于2023年,星期三软件工程与计算机科学的差别[11]软件工程计算机科学目标在时间、资源、人员这3个主要限制条件下构建满足用户需求的软件系统。探索正确的计算和建模方法,从而改进计算方法本身。产品软件(比如办公包和编译器)。算法(比如希尔排序法)和抽象的问题(比如哲学家进餐问题)。进度与时间表软件项目都有特定的进度与时间表研究项目一般不具有设置的进度与时间表关注点软件工程关注如何为用户实现价值。软件理论关注的是软件本身运行的原理,比如时间复杂度,空间复杂度,和算法的正确性。变化程度随着技术和用户需求的不断变化,软件开发人员必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中。对于某一种特定问题的正确解决方法将永远不会改变。需要的其他知识相关领域的知识。数学。著名的探索者和教育家BarryBoehm,DavidParnas,andFrederickP.Brooks。EdsgerDijkstra,高德纳,RobertTarjan,PeterSlater,艾伦·图灵,姚期智。著名的实践者JohnBackus,DanBricklin,蒂姆·伯纳斯-李,林纳斯·托瓦兹,理查德·马修·斯托曼。无。2023/6/147第七页,共十四页,编辑于2023年,星期三软件工程与计算机程序设计

软件工程存在于各种应用中,存在于软件开发的各个方面。而程序设计通常包含了程序设计和编码的反复迭代的过程,它是软件开发的一个阶段。软件工程力图对软件项目的各个方面作出指导,从软件的可行性分析直到软件完成以后的维护工作。软件工程认为软件开发与各种市场活动密切相关。比如软件的销售,用户培训,与之相关的软件和硬件安装等。软件工程的方法学认为一个独立的程序员不应当脱离团队而进行开发,同时程序的编写不能够脱离软件的需求,设计,以及客户的利益。软件工程的发展是计算机程序设计工业化的体现。2023/6/148第八页,共十四页,编辑于2023年,星期三软件危机

软件工程的兴起要根源于20世纪60,70和80年代的软件危机。在那个时代,很多的软件最后都得到了一个悲惨的结局。很多的软件项目开发时间大大超出了规划的时间表。一些项目导致了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大。OS360操作系统被认为是一个典型的案例。到现在为止,它仍然被使用在IBM360系列主机中。这个经历了数十年,极度复杂的软件项目甚至产生了一套不包括在原始设计方案之中的工作系统。OS360是第一个超大型的软件项目,它使用了1000人左右的程序员。FredBrooks在随后他的大作《人月神话》(TheMythicalMan-Month)中曾经承认,在他管理这个项目的时候,他犯了一个价值数百万美元的错误。财产的损失:软件的错误可能导致巨大的财产损失。欧洲阿里亚娜火箭的爆炸就是一个最为惨痛的教训。2023/6/149第九页,共十四页,编辑于2023年,星期三方法学

软件工程的方法有很多方面的意义。包括项目管理,分析,设计,程序的编写,测试和质量控制。软件设计方法可以区别为重量级的方法和轻量级的方法。重量级的方法中产生大量的正式文档。著名的重量级开发方法包括ISO9000,CMM,和统一软件开发过程(RUP)。轻量级的开发过程没有对大量正式文档的要求。著名的轻量级开发方法包括极限编程(XP)和敏捷过程(AgileProcesses)。2023/6/1410第十页,共十四页,编辑于2023年,星期三根据《新方法学》这篇文章的说法,重量级方法呈现的是一种“防御型”的姿态。在应用“重量级方法”的软件组织中,由于软件项目经理不参与或者很少参与程序设计,无法从细节上把握项目进度,因而会对项目产生“恐惧感”,不得不要求程序员不断撰写很多“软件开发文档”。而轻量级方法则呈现“进攻型”的姿态,这一点从XP方法特别强调的四个准则—“沟通、简单、反馈和勇气”上有所体现。目前有一些人认为,“重量级方法”适合于大型的软件团队(数十人以上)使用,而“轻量级方法”适合小型的软件团队(几人、十几人)使用。当然,关于重量级方法和轻量级方法的优劣存在很多争论,而各种方法也在不断进化中。一些方法论者认为人们在开发中应当严格遵循并且实施这些方法。但是一些人并不具有实施这些方法的条件。实际上,采用何种方法开发软件取决于很多因素,同时受到环境的制约。2023/6/1411第十一页,共十四页,编辑于2023年,星期三软件开发过程

软件开发过程是随着开发技术的演化而随之改进的。从早期的瀑布式(Waterfall)的开发模型到后来出现的螺旋式的迭代(Spiral)开发,以致最近开始兴起的敏捷开发方法(Agile),他们展示出了在不同的时代软件产业对于开发过程的不同的认识,以及对于不同类型项目的理解方法。注意区分软件开发过程和软件过程改进之间的重要区别。诸如像ISO15504,ISO9000,CMM,CMMI这样的名词阐述的是一些软件过程改进框架,他们提供了一系列的标准和策略来指导软件组织如何提升软件开发过程的质量、软件组织的能力,而不是给出具体的开发过程的定义。2023/6/1412第十二页,共十四页,编辑于2023年,星期三软件工程的发展方向

“敏捷开发”(AgileDevelopment)被认为是软件工程的一个重要的发展。它强调软件开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”(ExtremeProgramming,简称为XP)。而与轻量级方法相对应的是“重量级方法”的存在。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子比如CMM/PSP/TSP。面向方面的程序设计(AspectOrientedProgramming,简称AOP)被认为是近年来软件工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程(GenericProgramming)和模板。2023/6/1413第十三页,共十四页,编辑于2023年,星期三参考

^F.L.Bauer,NATOSoftwareEngineeringConference,1968.^

IEEE标准电脑字典,610.12,1990^I.Sommerville,SoftwareEngineering,7thed.:Addison-WesleyLongmanPublishingCo.,Inc.Boston,MA,USA,2004.^S.R.Schach,SoftwareEngineering:AskenAssociatesPacificPalisades,CA,USA,1990.^B.W.Boehm,SoftwareEngineeringEconomics:PrenticeHallPTRUpperSaddleRiver,NJ,USA,1981.^R.Fairley,SoftwareEngineeringConcepts:McGraw-Hill,Inc.NewYork,NY,USA,1985.^C.Ghezzi,M.Jazayeri,andD.Mandrioli,FundamentalsofSoftwareEngineering,2nded.:PrenticeHall,2002.^TheFreeOn-LineDictionary

温馨提示

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

评论

0/150

提交评论