软件工程概述
2018-12-28崔亚婷
崔亚婷
说到软件工程,想必大家不是很熟悉,那么软件我想大家一定很熟悉的。想要了解什么是软件工程,我们就先要了解什么是软件。
软件可以说在我们的生活中无处不在,我们的生活现在也离不开软件。计算机软件的概念随着计算机技术的发展而发展。计算机发展初期,软件就是程序,也就是计算机可以识别的源代码或机器可直接执行的代码。随着计算机的发展,人们也渐渐认识的高质量的软件会使计算机系统的功能和效率大大提高,软件日益复杂,规模日益增大,人们开始认识到软件并不等于程序。全面地讲,软件由三部分组成,分别是:计算机程序、数据和软件文档。
那么下面我们来详细看一下这三大部分。
1.计算机程序,就是人们为了完成特定的功能而变质的一组指令集,由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列。目前程序设计语言主要有几种类型。面向机器:如汇编语言、机器语言等;面向过程:如Fortran,Pascal,C等等;面向对象:如Java等等;面向问题:如结构化查询语言SQL等等。
2.数据,就是程序能处理的具有一定数据结构的信息。
3.软件文档,是与程序的开发、维护和使用有关的图文资料,记录软件开发活动和阶段性成果、理解软件所必须的阐述性资料需求分析文档、软件设计文档、用户文档等。编写文档有什么作用呢?第一可以促进对软件的开发,管理和维护;第二便于各种人员(用户,开发人员)的交流。
既然我们知道了什么是软件,那我们经常使用的软件有什么特点呢?与硬件相比,计算机软件具有以下一些特点。
1.软件是抽象的。计算机硬件是实物产品,具有明显的可见性。但是我们无法直接观察软件的物理形态,只能通过运行它来了解它的功能和特性。
2.软件无明显的制造过程。计算机硬件是实物产品,我们可以亲眼目睹它的整個生产过程,而软件却没有明显的制造过程,软件注重的是开发过程。
3.软件无磨损性。计算机硬件存在着磨损和老化现象,就像我们的课桌,我们的板凳都存在着磨损现象。但对于软件而言,它不存在磨损和老化,它会出现老化的状态,所以软件需要不定时的更新和维护。
4.软件对计算机硬件有依懒性。软件的开发和运行依赖于特定的计算机系统环境,一般产品是不会有的,为了减少这种依赖性,软件开发过程中提出了软件的可移植性。
5.软件还处于手工开发方式。人们在分析、设计、开发、测试软件产品的过程中,运用了大量的脑力劳动。
6.软件本身的复杂性,软件本身自带的一大特点,软件是需要更新和服务的。
7.软件的高成本。在开发一个软件的过程当中,在编写、测试、运行和广告推销方面,开发成本相当昂贵。
我们该如何给软件分类呢?
按功能分:
1.系统软件。操作系统就是最典型的系统软件,它负责管理系统的资源,并为上层软件的运行提供了必备的接口和条件。
2.支撑软件。我们常用的文本编辑器、绘图软件、数据库管理系统和CASE工具系统等都属于支撑软件。
3.应用软件。比如,地理信息系统软件、航空售票软件、教务管理系统软件和信息管理系统等。
按服务对象分:
1.通用软件。由特定的软件开发机构开发,面向市场公开销售的独立运行的软件系统,如操作系统、文档处理系统和图片处理系统等
2.定制软件。是面向特定的用户需求,由软件开发机构在合同的约束下开发的软件,如为企业定制的办公系统、交通管理系统和飞机导航系统等。
按工作方式分:计算机软件还可以划分为实时软件、分时软件、交互式软件和批处理软件。
按软件产品规模分:计算机软件还可以划分为小型软件、中型软件和大型软件。
这么多的软件横空出世,那么他们都成功了吗?我们以怎样一个标准来衡量软件是否成功呢?
软件成功的标准应当是用户在用,满足用户的需求,服务于社会。软件失败了也就意味着并没有满足用户的需求,在软件开发过程中出现了一系列的问题,我们把软件开发中出现的问题统称为软件危机,软件危机爆发于20世纪60年代中期。这里我们叙述两个经典案例。
案例一:美国IBM公司在1963年至1966年开大的IBM360机的操作系统。公约100万条指令,花费了5000个人,经费达数亿美元,错误多达2000个以上,系统根本无法正常运行。
这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“...正像一只逃亡的野兽落到泥潭中做垂死挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难,......程序设计工作正像这样一个泥潭,......一批批程序员被迫在泥潭中拼命挣扎,......谁也没有料到竟会陷入这样的困境...”
案例二:美国银行1982年进入信托商业领域,并规划发展信托软件系统。项目原定预算2千万美元,开发时程9个月,预计1984年12月31日以前完成,后来至1987年3月都未能完成该系统,期间已投入6千万美元。美国银行最终因为此系统不稳定而不得不放弃,并将340亿美元的信托账户转移出去,并失去了6亿美元的信托生意商机。
可见软件危机的存在是极其重要的。那么软件危机有两个方面:第一如何开发软件,以满足不断增长,日趋复杂的需求。第二如何维护数量不断膨胀的软件产品。那么我们如何解决软件危机呢?人们逐渐认识到了软件的特性和软件产品开发的内在规律,并尝试用工程化的思想去指导软件开发,于是软件工程诞生了。
软件工程一直以来都缺乏一个统一的定义。1968年首次提出软件工程的概念,并将其定义为“为了经济地获得可靠的和能在实际机器上高效运行的软件,而建立和使用的健全的工程规则”。这个定义肯定了工程化思想在软件工程中的重要性,但是并没有提到软件产品的特殊性。
IEEE在软件工程术语汇编中的定义:软件工程是1.将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;2.对1中所述方法的研究。
比较认可的一种定义为:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件。以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
软件工程的提出是为了解决软件危机所带来的各种弊端。那么软件工程是如何发展起来的呢?
软件开发经历了程序设计阶段、软件设计阶段和软件工程阶段的演变过程。
程序设计阶段出现在1946年~1955年。这个阶段还没有软件的概念,程序设计主要围绕硬件进行开发,规模很小,工具简单,无明确分工,程序设计追求节省空间和编程技巧,无文档资料,主要用于科学计算。
软件设计阶段出现在1956年~1970年。这个时期硬件环境相对稳定,出现了“软件作坊”的开发组织形式。开始广泛使用产品软件,从而有了软件的概念。随着计算机技术的发展和计算机应用的日益普及,软件系统的规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽,开发者和用户有了明确的分工,社会对软件的需求量剧增。但软件开发技术没有重大突破,软件产品的质量不高,生产效率比较低,从而导致了“软件危机”的产生。
自1970年起,软件开发进入了软件工程阶段。由于“软件危机”的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件产生进入了软件工程时代。这个阶段硬件已向巨型化、微型化、网络化和智能化四个方向发展,数据库技术已成熟并广泛应用。
接下来我们來了解一下软件工程的基本内容。软件工程有三个要素,即过程、方法和工具。
软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动。它是使用适当的资源(包括人员,软硬件资源,时间等),为开发软件进行的一组开发活动,在活动结束时输入(即用户的需求)转化为输出(最终符合用户需求的软件产品)。软件的诞生和它的生命周期统称为软件过程。作为一种工业化的产品,软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最终该产品被市场淘汰的全过程。生命周期分为三个阶段:定义阶段:可行性研究初步项目计划、需求分析;开发阶段:概要设计、详细设计、实现、测试;运行和维护阶段:运行、维护、废弃。
软件工程方法包含软件开发方法、软件度量方法、软件管理方法和软件环境方法,但是通常把软件工程方法等同于软件开发方法,那么目前通常用的软件开发方法有面向过程的开发方法、面向对象的开发方法、面向数据的开发方法和形式化方法。
软件工具是进行软件开发时必不可少的部分,是程序员在软件开发、测试、维护过程中所使用的辅助工具。软件工具的使用为软件项目的开发提供了自动化的支持,在很大的程度上提高软件的开发质量,降低了软件的成本,缩短了软件的开发时间。
既然提出工程化的思想,那我们就该遵循一定的原则。
著名软件工程专家B.W.Boehm提出了以下几项软件工程的基本原则:将软件的生命周期划分为多个阶段,对各个阶段实行严格的项目管理;坚持阶段评审制度,以确保软件产品的质量;实施严格的产品控制,以适应软件规格的变更;采用现代程序设计技术。这是提高软件开发和维护效率的关键;开发出来的软件产品应该能够清楚地被审查。虽然软件产品的可见性比较差,但是它的功能和质量应该能够被准确地审查和度量,这样才能有利于有效的项目管理;合理地安排软件开发小组的人员,并且开发小组的人员要少而精;不断地改进软件工程实践。
那么软件工程要实现怎样的一个目标呢?
软件工程的基本目标:
1.达到要求的软件功能
2.取得较好的软件性能
3.开发出高质量的软件
4.付出较低的开发成本
5.需要较低的维护费用
6.能按时完成开发工作,及时交付使用
我们要运用工程化的思想达到软件工程的基本目标,开发出高质量的满足用户需求的有价值的软件产品。
我们平常所说的计算机科学和软件工程有什么区别呢?
科学是发现世界上已经存在的事物,回答“是什么”和“为什么”的问题。工程是创造世界上从未存在的事物,回答“做什么”和“怎么做”的问题。计算机科学研究构成计算机本身的理论和结构,诸如硬件设计或者算法的理论证明等。软件工程将计算机作为问题求解的工具,设计和实施尚未存在的方案用以服务社会。
软件工程的就业前景不可限量。软件产业的发展已经关系到一个国家的政治和未来,软件产业将成为21世纪拥有最大产业规模和最广阔前景的新兴产业之一。软件领域是一个包括系统软件,中间软件,嵌入式软件,数据库软件,财务和企业管理软件,教育软件,游戏软件等。产品化程度高的公司主要集中在管理软件,金融行业软件,及聚焦于某个行业的软件公司。提升软件的产品化程度将非常有益于中国软件企业竞争力的提高。软件产业属于第三产业的服务业,具有高智力投入,高成长,低成本投入,服务性强,全球性强,与国民经济关系密切等特点,一个高质量的软件会给企业和社会带来很大的便利。所以软件行业是一个发展前景很好的第三产业。