“软件工程”在IEEE软件工程术语汇编中的定义如下:
软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②对①中所述方法的研究。
软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,降低维护的难度。软件工程涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
随着计算机技术的不断发展,软件开发经历了程序设计阶段、软件设计阶段和软件工程阶段的演变过程。
·程序设计阶段。程序设计阶段出现在1946~1955年。此阶段的特点是:尚无软件的概念;程序设计主要围绕硬件进行,规模很小,工具简单,尚无明确分工(开发者和用户);程序设计追求节省空间和编程技巧;几乎没有文档资料(除程序清单外);程序主要为当时的科学计算服务。
·软件设计阶段。软件设计阶段出现在1956~1970年。此阶段的特点是:硬件环境相对稳定,出现了“软件作坊”的开发组织形式;开始广泛使用产品软件(可货架购买),逐步建立了软件的概念;随着计算机技术的发展和计算机应用的日益普及,软件规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽,开发者和用户有了明确的分工,社会对软件的需求量剧增。但需要指出的是,此阶段软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,从而导致了“软件危机”的出现。
·软件工程阶段。“软件危机”的产生,迫使计算机界不得不研究、改变软件开发的技术手段和管理方法,自20世纪70年代起,软件开发进入了软件工程阶段,并从此进入了软件工程时代。此阶段的特点是:硬件已向巨型化、微型化、网络化和智能化四个方向发展;数据库技术已成熟并广泛应用;第三代、第四代设计语言陆续出现。
随着计算机科学及软件工程技术的不断发展,软件工程本身也在不断演化和进步,对未来软件工程的展望如下:
·传统软件工程技术,如基于领域的架构(DSSA)与模型驱动的开发(MDD)将会得到进一步重视和普及,并逐渐发挥强大的作用。
·随着COM、DCOM、CORBA等中间件技术的不断普及,分布式应用软件在不同的软件技术中很容易实现资源共享,分布式软件工程技术得到长足发展,并逐步成为软件开发行业的新趋势。
·随着云计算、大数据等新技术的不断发展,目前计算机能力已经逐渐倾向于服务器端和云端,实用的中间件技术和较快的计算机运算处理能力,不仅是开发大型软件过程的必经之路,也是新技术发展的主要趋势之一。
·随着互联网技术的发展,跨网络平台、跨系统领域的软件开发都被标准接口协议重新整合在一起。在新的软件开发过程中,统一的基础平台与协议框架的集成起到了至关重要的作用。
·随着全球化趋势的不断加速,传统的软件开发管理方式已不再合适,开放性软件计算方式在全球化协同合作加速的大背景下,将成为软件工程发展的必然趋势。
嵌入式软件也经历了上述演变过程,随着计算机技术和软件技术的不断发展,嵌入式软件开发已成为一项复杂的系统工程,必须遵循系统工程和软件工程的要求。特别是在航空、航天、电子、核工业、交通、能源等领域,嵌入式软件工程得到长足发展,逐渐产生了一系列标准规范,用于指导嵌入式软件的开发、应用及维护。