目前比较认可的一种定义认为:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
软件作为计算机的灵魂,从计算机应用诞生之日起就主宰着计算机产业的发展。从二进制的指令到最先进的语音及图像识别系统,勾勒出了软件发展的趋势,即面向用户,方便用户,赢得用户。微软公司的成功有力地说明了这一指导思想在软件开发中的重要性。
1 软件工程的概念
1.1 “软件工程”概念提出
20世纪50、60年代开发大型系统软件用手工方式进行,其生产效率低、出错率高。这种状态不能满足日益增长的软件生产的需要,产生以下四个方面的问题。(1)软件复杂性飞速增长;(2)软件成本高;(3)开发周期长;(4)维护工作量大。
即出现了“软件危机”现象。为了摆脱软件生产的这种局面,在1968年北大西洋公约组织的学术会议上,第一次提出了“软件工程”这个概念。
1.2 软件工程学概念
软件工程学是研究和探讨如何利用当代的科学理论和技术指导软件的开发,以达到利用较少的投资获得高质量软件产品的目的科学。
软件工程学既是边缘学科,又是一种综合性学科。它包括计算机科学、系统工程学、管理学、经济学、人体工程学和心理学等。
2 软件工程的发展
软件工程的发展,大体经历了三个时代,即程序设计时代、软件时代、软件工程时代。
2.1 软件开发的三个阶段
前面讲过用软件工程的方式生产软件的过程类似于机械、建筑工程生产产品的过程。如一个建筑工程从开始到结束,经历设计、施工和验收三个阶段。软件产品的生产也要经过定义、开发、维护的软件开发三个阶段。
2.2 软件工程与其他工程科学不同之处
从上面建筑工程与软件二种产品开发阶段比较,可以看出:(1)建筑工程流程图中,设计蓝图产生之后,往下的每一步没有回溯问题。但在软件开发工程中,每一步都可能经历不只一次的修改和适应的回溯问题。(2)软件交付使用后,还有一个运行维护问题,如运行后发现有隐藏错误、运行环境有变化、用户要求的变更等。
3 应用软件开发方法
一个大型的应用软件、如计算机辅助设计软件,大型仿真训练软件等,需要多人共同完成。为保证大型应用软件系统的开发质量,必须严格按照软件工程的思路和原则,采用软件的开发方法,使用软件工程提供的图示工具,组织软件人员协调一致地完成设计与开发任务。
现应用的软件开发方法主要有三种:软件生命周期法、原型化方法、自动形式的系统开发方法。
3.1 软件开发的生命周期法
生命周期方法是从时间角度对软件的定义、开发和维护的复杂问题进行分解,分成若干个阶段。每个阶段的开始和结束都有严格的标准(前一阶段的结束就是后一阶段的开始。标准就是每个阶段都应该交出高质量的文档。软件生命周期一般分为六个时期,即六个阶段。
3.2 原型化方法
传统的生命周期法的理论基础较为严密。一般说来,在软件开发过程中,首先要经过严格的定义或预先说明,并要求软件开发人员和用户在系统的开发初期就要对整个的功能和信息需求做出全面、准确而深刻地认定。
通常用户给出概括性的软件目标而无法描述详细的输入、处理或输出需求。而软件开发人员也可能尚未确定处理算法的效果、操作系统的适用性及即将使用的人机界面形态。在这种情况下,对事务只有边干边认识,原型化方法就是基于这一主导思想。
4 软件工程开发的目标
4.1 可修改性
容许对系统进行修改而不增加原系统的复杂性。它支持软件的调试与维护,是一个难以达到的目标。
4.2 有效性
软件系统能最有效地利用计算机的时间资源和空间资源。各种计算机软件无不将系统的时/空开销作为衡量软件质量的一项重要技术指标。
4.3 可靠性
对于实时嵌入式计算机系统,可靠性是一个非常重要的目标。因为软件要实时地控制一个物理过程,一旦出现问题可能是灾难性的,后果将不堪设想。因此在软件开发、编码和测试过程中,必须将可靠性放在重要地位。
4.4 可理解性
系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。
4.5 可维护性
软件产品交付用户使用后,能够对它进行修改,以便改正潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化,等等。由于软件是逻辑产品,只要用户需要,它可以无限期的使用下去,因此软件维护是不可避免的。
4.6 可重用性
可重用的软部件有的可以不加修改直接使用,有的需要修改后再用。可重用软部件应具有清晰的结构和注解,应具有正确的编码和较低的时/空开销。
4.7 可适应性
软件在不同的系统约束条件下,使用户需求得到满足的难易程度。适应性强的软件应采用广为流行的程序设计语言编码,在广为流行的操作系统环境中运行,采用标准的术语和格式书写文档。适应性强的软件较容易推广使用。
4.8 可移植性
软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。为了获得比较高的可移植性,在软件设计过程中通常采用通用的程序设计语言和运行环境支撑。
4.9 可追踪性
根据软件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对软件需求进行逆向追踪的能力。软件可追踪性依赖于软件开发各个阶段文档和程序的完整性、一致性和可理解性。
4.10 可互操作性
多个软件元素相互通信并协同完成任务的能力。为了实现可互操作性,软件开发通常要遵循某种标准,支持折衷标准的环境将为软件元素之间的可互操作提供便利。可互操作性在分布计算环境下尤为重要。
结束语
应用软件必须采用开发者易懂的程序设计语言的格式进行编写。最低级的编程语言是目标机直接理解的机器代码;与之相反,高级编程语言是指具有自然结构和数据抽象结构的“类英语语言”。高级编程语言的目的是使编程人员摆脱对计算机硬件知识的依赖性,从面向机器编程的方式转向面向高级语言。
作者:陈宇 来源:科学与财富 2016年17期