您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程(张海藩)第1章
软件工程导论(第五版)普通高校本科计算机专业特色教材精选张海藩编著让我们高举程序主义、软件工程思想的伟大旗帜,紧密团结在以Microsoft为核心的软件公司周围,沿着比尔·盖茨的生财之道,不分白天黑夜地编程,把建设有中国特色的软件产业的伟大事业全面推向未来。23在一些人眼里,今天的软件开发似乎已成为简单的事情,已有了不少很好的开发工具和软件库,软件开发人员训练有素,都强烈渴望去编写很酷的软件,可以在几天的时间里编写出一个相当复杂的软件。但为什么有一些软件能够得到用户的喜欢,而另一些则不能?为什么有些软件能够在市场上成功,而有些则受到冷落?由此可见,开发软件并不一定难,难就难在如何开发有用的软件。微软凌小宁博士4我最大的心得是,一个产品一定要找到能够真正适用的场合,不能只是为了技术而从事技术为了研究而进行研究,却不管用户对你所研究的技术和产品有没有需求。否则,无论你的技术是多么优秀,多么先进,恐怕你的产品在市场上都无法获得成功。微软张益肇博士5软件工程是计算机科学与技术专业的一门专业核心课程。通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。课程的性质、目的与任务6本课程比较全面、系统地介绍软件工程的概念、技术与方法。主要内容包括:软件工程概述、软件生存周期及软件需求分析、软件设计方法、软件测试技术等。通过本课程的学习,使学生能真正地从中了解软件开发的整个过程。为了让学生真正得以实践,结合实际软件开发项目,让学生从问题定义开始,经过可行性研究、需求分析、概要设计、详细设计、编码直到最后要对自己开发的软件还要进行测试,这样一个软件开发过程,从而使学生掌握软件开发的基本技能。课程主要内容7学习本课程的基本要求本课程是继程序设计课程之后,对提高学生软件开发能力有重要作用的一门课程。要求学生在学习本课程前应掌握数据结构、结构化程序设计、面向对象程序设计以及程序设计方法论。通过本课程的学习,为学生后期的毕业设计环节奠定了良好的基础。参考资料1.实用软件工程郑人杰清华出版社2.现代软件工程周之英科学出版社3.软件工程——理论与实践高教出版社4.软件工程实践者的研究方法黄柏素译机械工业出版社89可行性与需求分析系统设计程序设计测试维护10第1章软件工程学概述软件的发展在工业发达国家计算机系统的发展经历了三个不同的时期,伴随而起的计算机软件的发展也经历了个体化生产、作坊式生产到产业化生产的三段发展模式。11程序规模小、软件设计是一个隐含过程软件作坊--软件危机开始出现“软件工程”12Case1:美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。......据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。......这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“......正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。......程序设计工作正像这样一个泥潭,......一批批程序员被迫在泥潭中拼命挣扎,......谁也没有料到问题竟会陷入这样的困境......”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。SoftwareCrisis!1.1软件危机1.软件危机软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。这些问题或难题并不限于那些“不能正常运行”的软件。一般来说,软件危机包括两方面的内容:如何开发软件,满足对软件日益增长的需求如何维护数量不断膨胀的已有软件13Crisis!2.软件危机的表现形式1)对软件开发成本和进度的估计常常很不准确;2)用户对“已完成”的软件系统不满意的现象经常发生;3)软件产品的质量往往是靠不住的;4)软件常常是不可维护的;5)软件通常没有适当的文档资料;6)软件成本在计算机系统总成本中所占的比例逐年上升;7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及及深入的趋势。143.产生软件危机的原因1)由软件本身的特点决定逻辑产品;不会因为使用的时间过长而被“用坏”。2)由软件人员本身的素质决定软件的专业人员对软件的开发和维护有糊涂的观念,在实践中采用了错误的方法和技术;软件开发人员忽略了对目标系统每个细节的完整、准确、具体的认识,急于求成;15对软件生存周期这一过程认识不全面,准确地说开发一个软件需要经过问题定义、可行性研究、需求分析、总体设计、详细设计、编码、测试、维护八个阶段;不重视早期修改,在软件开发的不同阶段进行修改需要付出的代价不同;16忽略了软件维护工作的重要性,对软件工程师来说,软件维护工作本身不是一项吸引人的工作,理解他人的程序也常常是困难的;3)由硬件设计中的长期一贯制所决定的计算机从1946年诞生至今,半个世纪以来,一直遵循冯·诺依曼的设计原则不变,即采用二进制和程序存储的原理。174.解决软件危机的途径1)加快新一代计算机的研制工作;2)应该有组织,有计划,通过严格的管理手段进行软件的开发;3)及时总结软件开发的成功技术和方法并加以推广;4)应该选择好的开发工具进行软件的开发181.2软件工程1.软件工程软件工程是研究软件生产的一门学科。它采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。《IEEE软件工程标准术语》对软件工程下的定义是开发、运行和维护软件以及在这个过程中用到的方法。IEEE:InstituteforElectricalandElectronicEngineers电器电子工程师学会1920Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。FritzBauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。21软件工程是一类求解软件的工程,它应用计算机科学、数学(用于构造模型和算法)和管理科学(用于计划、资源、质量和成本等的管理)等原理,借鉴传统工程(用于制定规范、设计范型、评估成本、权衡结果)的原则和方法,创建软件以达到提高质量、降低成本的目的。软件工程是一门指导计算机软件开发和维护的工程学科。22软件工程是一门交叉学科软件开发技术:软件开发方法学软件开发过程软件工具和软件工程环境软件管理技术:软件管理学软件经济学软件心理学软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解而改变,应用发展的眼光看待它。232.软件工程的本质特性软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由一种文化背景的人替另一种文化背景的人创造产品3.软件工程的基本原理用分阶段的生存周期计划严格管理坚持进行阶段评审严格实行产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性244.软件工程方法学三要素方法、工具、过程工具方法过程质量焦点方法是主导,工具是辅助25软件工程方法学:传统方法学面向对象方法学26271.传统方法学-生命周期方法学/结构化范型从时间角度对软件开发和维护的复杂问题进行分解,把软件生命的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。文档是通信的工具,它们清楚准确地说明了到这个时候为止,关于该项工程已经知道了什么,同时确立了下一步工作的基础。此外,文档也起备忘录的作用,在完成生命周期每个阶段的任务时,应该采用适合该阶段任务特点的系统化的技术方法——结构分析或结构设计技术。282.面向对象方法学面向对象方法是把数据和行为看成同等重要,是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。①把对象(Object)作为融合了数据及在数据上的操作行为统一的软件构件。用对象分解取代了传统方法的功能分解。①把所有对象都划分成类(Class):每个类定义了一组数据和一组操作。①按照父类(基类)和子类(派生类)的关系,把若干个相关类组成一个层次结构的系统。子类能够继承。①对象彼此间仅能通过发送消息互相联系。对象是数据处理的主体,具有封装性特点。复杂性降低、可理解性提高、简化开发与维护、软件重用。1.3软件生命周期1.定义软件从定义、开发、使用、维护,直到最终废弃要经历一个漫长的时期,我们称之为软件的生命周期。2.生命流程软件生命期分可行性研究与计划、需求分析、设计、编程、测试、运行与维护等六个阶段,每个阶段都有明确的任务,并需产生一定规格的文档资料交付给下一阶段,下一阶段在上阶段交付的文档的基础上继续开展工作。293.软件生命期模型(由于其形状似多级瀑布,常称为瀑布模型)30可行性研究与计划需求分析设计编程运行与维护测试可行性研究报告需求说明书设计文档程序测试报告第一个阶段有时又称为计划期中间四个阶段总称为开发期最后一个阶段称为运行期可行性研究与计划阶段可行性研究与计划阶段的基本任务:搞清问题的性质,确定系统的目标和规模,从技术、经济和社会因素等方面分析论证本软件项目的可行性,并最终产生一份可行性分析报告。可行性研究的结果:使用部门负责人做出是否继续进行这项工程的决定的重要依据。3132需求分析和规格说明阶段(简称需求分析阶段)分析阶段的基本任务:理解用户的需求,并将用户的需求用书面的形式表达出来。分析阶段产生的文档:需求规格说明书明确地描述了用户的需求,需求说明书是以后各阶段工作的基础。设计阶段设计阶段的基本任务:要在需求说明书的基础上建立软件系统的“结构”,包括数据结构和模块结构。设计阶段的内容:概要设计(或称为总体设计)和详细设计,前者主要考虑模块的分解,后者考虑每个模块内部的细节。设计阶段产生的文档:模块说明书、数据库或文件结构说明等。3334编程阶段编程阶段的基本任务:按模块说明书的要求为每个模块编写程序。测试阶段测试阶段的基本任务:发现并排除错误。测试通常又可分为模块测试、集成测试和系统测试等几步。35运行与维护阶段运行阶段与维护的基本任务:运行软件并对软件继续排错和修改扩充。3637阶段关键问题结束标准问题定义问题是什么?关于规模和目标的报告书可行性研究有可行的解吗?系统的高层逻辑模型:数据流图、成本/效益分析需求分析系统必须做什么?系统的逻辑模型:数据流图、数据字典、算法描述总体设计概括地说,应该如何解决这个问题?可能的解法:系统流程图、成本/效益分析推荐的系统结构:层次图或结构图详细设计怎样具体地实现这个系统?编码规格说明:HIPO图或PDL编码/单元测试正确的程序模块源程序清单;单元测试方案和结果综合测试符合要求的软件综合测试方案和结果;完整一致的软件配置维护持久地满足用户需要的软件完整准确的维护记录1.4软件生存期模型•软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架瀑布模型喷泉模型增量模型智能模型螺旋模型3839瀑布模型40瀑布模型(WaterfallModel)又叫流水式过程模型,它是模仿旅游景点的阶梯瀑布,由上向下一个阶梯一个阶梯地倾泻下来,最后进入一个风平浪尽的大湖,这个大湖就是软件企业的产品库。1.模型的本意:根据软件生存周期是由问题定义、需求分析、策划、总体设计、详细设计、编程、测试、运行、维护等阶段所组成的,就把每个阶段当作瀑布中的一个台阶,把软件生存过程比喻成瀑布中的流水,软件生存过程在这些台阶中由上向下地奔流。开发人员按照阶段开发,管理人员按照阶段管理。412.模型的特点:(1)里程碑或基线驱动,或者说文档驱动;(2)过程逆转性很差,或者
本文标题:软件工程(张海藩)第1章
链接地址:https://www.777doc.com/doc-1371805 .html