软件工程专业导论摘要:学习专业导论,让我们对于自己的专业以及以后的路感到更加清晰;软件工程专业的发展历史和特点,并且对软件工程的发展趋势进行了展望。关键词:软件工程的概念、发展、特点和前景引言:这半年,是我们升入大一的第一个半年。在这一个学期里,我们接触了原本神秘的大学生活,更接触到了“传说中的”专业知识。刚刚脱离了高中“填鸭式”的教育方式,来到大学这个自由的学习环境,我们大部分的学习都需要自己自主进行了。面对自己的专业——软件工程,刚进大学的我们一个个一头雾水,连“软件工程”为何物都不知道。这样的我们实在难以学好专业知识。为了让我们更好的了解自己的专业、及早确定自己以后的学习和研究方向,院领导专门组织开设了“软件工程专业导论”这门课。对我来说,这门课让我对于自己的专业和前途都感到清晰了许多。以下我将就自己所学到的关于专业的知识进行论述。总论:1.软件及软件工程中的概念:软件工程的框架——软件工程的框架是由软件工程目标、软件工程活动和软件工程原则三个方面的内容构成的。软件工程的目标——生产具有正确性、可用性以及开销适宜的软件产品。也决定了软件过程、过程模型和工程方法的选择。(正确性:软件产品达到预期功能的程度。可用性:软件基本结构、实现及文档为用户可用的程度。开销适宜:软件开发、运行的整个开销满足用户要求的程度。)软件工程的活动——活动:生产一个最终满足需求且达到工程目标的软件产品所需要的步骤。①、需求:问题分析:需求获取和定义,又称软件需求规约。需求分析:生成软件功能规约。②、设计:概要设计:建立整个软件的体系结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义等。详细设计:产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。③、实现:把设计结果转换为可执行的程序代码。④、确认:贯穿整个开发过程,对完成的结果进行确认,保证产品满足用户的要求。⑤、支持:修改和完善活动。软件工程的原则——软件工程的四条基本原则:①、采取适宜的开发模型,控制易变的需求;②、采用合适的设计方法:需要软件模块化、抽象与信息隐藏、局部化、一致性以及适应性等,需要合适的设计方法的支持。③、提供高质量的工程支持:软件工具和环境对软件过程的支持。④、重视开发过程的管理:有效利用可用的资源、生产满足目标的软件产品、提高软件组织的生产能力等。2.软件开发周期及模型:软件生命周期:分为制定计划、需求分析和定义、软件设计、程序编写、软件测试、运行/维护等六个步骤。软件开发模型:是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。(瀑布模型、演化模型、螺旋模型、喷泉模型)3.软件工程的发展方向和趋势:软件工程专业可以分为嵌入式系统专业方向、数字媒体技术专业方向等等。敏捷开发(AgileDevelopment)被认为是软体工程的一个重要的发展。它强调软体开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。面向侧面的程序设计(AspectOrientedProgramming,简称AOP)被认为是近年来软体工程的另外一个重要发展。软件工程的发展趋势有以下五点:(1)遗留(legacy)软件将继续发挥作用。(2)软件应用范围将继续扩大,成为信息社会的基础设施。(3)网络化软件将是发展重点。(4)软件的可靠性与安全性日趋重要。(5)工业化生产是必由之路。4.软件工业化生产时代的基础技术:以软件过程改进为中心软件过程成熟度模型CMM个体软件过程PSP群体软件过程TSP建造支持软件过程的环境面向对象技术构件重用技术5.软件工程专业的发展历史:总的来说,软件工程经历了30多年的历史,其发展大致可以划分为两个阶段:1、60年代末~80年代初状况:软件系统的规模、复杂性以及在关键领域的广泛应用,促进了软件开发过程采纳工程化的方法进行管理。研究:开发模型、支持工具、开发方法。成果:瀑布模型、结构化语言(pascal等)、结构化方法、各种管理方法(如费用估算、文档复审)。事件:前期主要研究系统实现技术;后期则开始强调管理和软件质量。焦点:软件项目2、80年代初~现在状况:“软件工厂”的概念已经提出。研究:软件生产技术,特别是软件复用技术和软件生产管理的研究和实践。成果:提出了具有广泛应用前景的面向对象方法和相关的编程语言。事件:软件过程改进。在工业实践中建立起一种量化的评估程序,判定软件组织成熟的程度。焦点:软件过程近几年,研究从过程管理转向产品开发,更加注重新的程序开发范型和软件生产。范围:面向agent语言、复用技术、需求分析规格说明的形式化研究、高智能高自动化的CASE成为热点详细来说,可以分为以下三个时代。1程序设计时代(1946-1956)硬件:内存少,速度慢主要用于科学计算,小程序(自己设计、自己使用),为某个具体应用而专门编写往往追求编程技巧和程序运行效率,程序难读、难懂、难修改采用机器语言和汇编语言2程序系统时代(1956-1968)硬件:电子管→晶体管→集成电路→超大规模集成电路操作系统、高级语言出现,导致软件设计容易计算机应用日益普及,软件需求量增大(需要多人共同开发程序)大程序,程序开发出来,不但自己用,别人也可用,“软件产品”程序复杂度提高,合作协作完成,“软件作坊”但是:软件管理技术跟不上,沿用个体化软件开发方法协调开发比较难无法满足社会需求量无法估算开发软件所需的费用维护(改正、适应、完善、预防)工作以令人吃惊的比例耗费资源甚至许多程序的个性化特性使得它们最终成为不可维护的所以这个时期出现了软件危机(Softwarecrisis)3软件工程时代(1968-)硬件发展快,但软件发展较慢硬件可以成批生产,但软件不可以硬件可以重用,但软件不可以软件危机加重6.软件发展的现状:(1)已经存在大量正在运行的软件。金融、电信、航空航天等(2)软件的应用范围不断扩大。商务、交通、家电等,软件无处不在。(3)软件的规模与复杂性持续增加非常大规模系统:从50万行增加到1000万行,扩大了20倍;复杂性:a.子系统数目越来越多;b.计算机应用从数值计算开始发展到几百万条指令的大型企业业务应用,再发展到几千万终端用户直接交互工作的网络应用。(4)出现了大量与软件相关的标准。CORBA、UML、XML、TMN、CWM等。(5)软件危机仍然存在(软件脱节)1968-2000:软件效率、质量、进度、预算无法控制。7.软件危机:概括地说,软件危机包含两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机的出现,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门学科。8.软件开发技术:软件开发技术分为以下七点:(1)软件开发过程(分为四类:基本过程类;支持过程类;组织过程类;建材过程类)(2)软件开发的基本原则:严格性和形式化原则、分隔原则、模块化原则、抽象原则、预期变动原则、通用/复用性原则、递增式原则(3)需求分析(结构化分析方法;面向对象分析方法)(4)软件体系结构(从软件角度、软件风格角度研究)(5)软件设计(结构化设计、面向对象设计)(6)软件测试(策略:单元测试、集成测试、确认测试)(7)软件维护(改正性维护、适应性维护、完善性维护、预防性维护)