您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 33第一章 软件工程学概述
软件工程导论SoftwareEngineering程金控制科学与工程学院cse_chengj@ujn.edu.cn2020/1/20前言•参考教材:1.张海藩.软件工程导论(第5版).清华大学出版社.20092.计算机软件工程规范国家标准汇编(2003)3.史济民.软件工程原理.方法与应用.北京-高等教育出版社,1990.5•主要参考资料–《软件工程导论》教学大纲–《软件工程导论》授课计划前言•《软件工程导论》课程的性质、任务和特点–本课程是计算机科学类专业的一门必修课程,它是一门新兴的研究软件开发与维护的普通原理和技术的工程学科。–本课程的主要任务是:1.研究软件工程学产生的背景、基本原理和实际软件开发技术。2.学习软件生命周期的划分,掌握各个阶段的任务过程、方法、管理技术和使用专业工具对整个软件工程进行科学规划。3.培养高层次软件开发设计人员。4.培养软件项目管理人员。前言-课程的主要内容第1章软件工程学概述第2章可行性研究第3章需求分析第4章形式化说明技术第5章总体设计第6章详细设计第7章实现第8章维护第9章面向对象方法学引论第10章面向对象分析第11章面向对象设计第12章面向对象实现第13章软件项目管理前言-注意事项一.准备作业本,要求按时、独立完成课堂布置作业,不得抄袭。二.将不定期进行考勤,有事务必请假,出示按规定办理的请假条。三.课程涉及C++语言编程,请提前预习相关知识。四.本课程最终成绩由平时成绩(含考勤、作业和课堂表现,30%)、期末考试(70%)。五.我的联系方式地点:cse_chengj@ujn.edu.cn第一教学楼(老信息楼)1006第1章软件工程学概述1.1软件危机1.2软件工程1.3软件生命周期1.4软件过程1.1软件危机•什么是软件:软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。–程序是按照事先设计的功能和性能要求执行的指令序列;–数据是是程序能正常操纵信息的数据结构;–文档是与程序开发维护和使用有关的各种图文资料。1.1软件危机•软件的发展:–早期时代(20世纪60年代中期以前),软件却是为每个具体应用而专门编写的。这时的软件通常是规模较小的程序,编写者和使用者往往是同一个(或同一组)人。这种个体化的软件环境,使得软件设计通常是在人们头脑中进行的一个隐含的过程,除了程序清单之外,没有其他文档资料保存下来。–从20世纪60年代中期到70年代中期是计算机系统发展的第二代时期-“软件作坊”,专职应别人的需求写软件。“软件作坊”基本上仍然沿用早期形成的个体化软件开发方法。1.1软件危机•软件危机的出现:随着计算机应用的日益普及,软件数量急剧膨胀:–在程序运行时发现的错误必须设法改正;–用户有了新的需求时必须相应地修改程序;–硬件或操作系统更新时,通常需要修改程序以适应新的环境。•软件危机的案例:–IBM公司于1963年~1966年开发的IBM360系列机的操作系统。–1963年,美国用于控制火星探测器的计算机软件中的一个,号被误写为・,而使飞往火星的探测器发生爆炸,造成高达数亿美元的损失.–WINDOWSXP操作系统的漏洞。–银行的金融管理软件系统。软件危机的案例:•美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。•项目负责人F.P.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“…正像一只逃亡的野兽落到泥沼中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。…程序设计工作正像这样一个泥潭,…一批批程序员被迫在泥沼中拼命挣扎,…谁也没有料到问题竟会陷入这样的困境…”。•IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。而Brooks博士随后写出了软件工程领域的经典著作》《TheMythicalManMonth:EssayonSoftwareEngineering》。1.1软件危机•什么是软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。•软件危机包含下述两方面的问题:–如何开发软件,以满足对软件日益增长的需求;–如何维护数量不断膨胀的已有软件。1.1软件危机•软件危机的主要典型表现:(1)对软件开发成本和进度的估计常常很不准确。1995年美国公司取消了810亿美元的软件项目,在完成前就因成本等问题而取消的占其中的31%;53%的软件项目进度拖延,超过预定工期50%以上;只有9%的大型软件项目能够及时交付且费用不超支。(2)用户对“已完成的”软件系统不满意的现象经常发生。软件开发人员常常在对用户要求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序。软件开发人员和用户之间的信息交流往往很不充分,“闭门造车”必然导致最终的产品不符合用户的实际需要。1.1软件危机•软件危机的主要典型表现(3)软件产品的质量往往靠不住。软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件产品发生质量问题。(4)软件常常是不可维护的。很多程序中的错误是非常难改正的,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需要在原有程序中增加一些新的功能。“可重用的软件”还是一个没有完全做到的、正在努力追求的目标。1.1软件危机•软件危机的主要典型表现(5)软件通常没有适当的文档资料。这些文档资料应该是在软件开发过程中产生出来的,而且应该是“最新式的”(即和程序代码完全一致的)。软件开发组织的管理人员可以使用这些文档资料作为“里程碑”,来管理和评价软件开发工程的进展状况;软件开发人员可以利用它们在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是必不可少的。缺乏必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。1.1软件危机•软件危机的主要典型表现:(6)软件成本在计算机系统总成本中所占比例逐年上升。软件开发需要大量人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而持续上升。美国在1985年软件成本大约已占计算机系统总成本的90%。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。1.1软件危机•产生软件危机的原因-与软件本身的特点有关:–软件缺乏“可见性”,在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件的质量也较难评价,因此,管理和控制软件开发过程相当困难。–软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。统计数据表明,实际上用于软件维护的费用占软件总费用的55%-70%。1.1软件危机•产生软件危机的原因-与软件本身的特点有关:–软件的显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。–为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,然而,如何保证每个人完成的工作合在一起确实能构成一个高质量的大型软件系统,更是一个极端复杂困难的问题,不仅涉及许多技术问题,诸如分析方法、设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理。1.1软件危机•产生软件危机的原因-另一方面也和软件开发与维护的方法不正确有关:–错误的认识和作法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。•事实上,对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。•软件开发最初的工作应是问题定义。作好软件定义时期的工作,是降低软件成本,提高软件质量的关键。1.1软件危机•产生软件危机的原因-另一方面也和软件开发与维护的方法不正确有关:–在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”时再引入变动,当然需要付出更高的代价。1.1软件危机•产生软件危机的原因-另一方面也和软件开发与维护的方法不正确有关:–所以,编写程序只是软件开发过程中的一个阶段,而且在典型的软件开发工程中,编写程序所需的工作量只占软件开发全部工作量的10%~20%。测试程序其它40%~50%10%~20%软件开发工作量分配比例1.1软件危机•产生软件危机的原因-另一方面也和软件开发与维护的方法不正确有关:–最后,还必须认识到程序只是完整的软件产品的一个组成部分。–一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。必须清除只重视程序而忽视软件配置其余成分的错误观念。1.1软件危机•消除软件危机的途径–为了消除软件危机,首先应该对计算机软件有一个正确的认识。–应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。–应该开发和使用更好的软件工具。–总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。1.2软件工程•什么是软件工程:–软件工程是指导计算机软件开发和维护的一门工程学科。–采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。1.2软件工程•软件工程具有下述的本质特性:1.软件工程关注于大型程序的构造。2.软件工程的中心课题是控制复杂性。3.软件经常变化。4.开发软件的效率非常重要。5.和谐地合作是开发软件的关键。6.软件必须有效地支持它的用户。7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人。1.2软件工程•软件工程的基本原理-B.W.Boehm认为这7条原理是确保软件产品质量和开发效率的原理的最小集合。1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性1.2软件工程•软件工程方法学–为了克服软件危机,一方面需要对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究;另一方面,也需要对软件的编制、测试、维护和管理的方法进行研究,从而产生了程序设计方法学。•1968年,E·W·代克斯特拉首先提出“GOTO语句是有害的”论点,向传统程序设计方法提出了挑战,从而引起了人们对程序设计方法讨论的普遍重视。1.2软件工程–软件工程方法学包含3个要素:方法、工具和过程。•方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;•工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;•过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1.2软件工程•传统方法学–传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。–仍然是使用十分广泛的软件工程方法学。1.2软件工程•传统方法学–这种方法学把软件生命周期的全过程依次划分为
本文标题:33第一章 软件工程学概述
链接地址:https://www.777doc.com/doc-3206431 .html