软件工程高效学 | 软件工程基础

简介: 软件工程是计算机领域的一门专业基础课,它对于培养大家的软件素质、提高大家的软件开发能力与软件项目管理能力具有重要意义。本篇介绍软件工程的发展过程以及典型的软件工程方法等相关内容。

640.jpg

01、软件工程基础

软件工程的定义

软件工程是一门指导进行计算机软件开发和维护的工程学科,涉及计算机科学、工程科学、管理科学等多学科,主要研究如何应用软件开发的科学理论和工程技术来指导大型软件系统的开发。

1983年,IEEE给出的定义为:“软件工程是开发、运行、维护和修复软件的系统方法”。主要思想是强调在软件开发过程中需要应用工程化原则的重要性。

概括来说,软件工程涵盖了工程原理、技术方法和管理技术。其中,工程原理用于制定规范、设计范型、评估成本及确定权衡;技术方法用于构建模型与算法;管理技术用于计划、资源、质量、成本等管理。
软件工程的发展历程

随着计算机软件从简单地用于数值计算到广泛应用于各行各业,软件工程的发展经历了结构化开发软件工程、面向对象开发软件工程、构件化开发软件工程、网构技术软件工程和智能化开发软件工程五个阶段。

(1) 结构化开发软件工程阶段。

20世纪60年代末,人们主要采取“生产作坊”的开发方式,软件开发效率低下,产品质量低劣,引发了“软件危机”。为解决这些问题,1968年北大西洋公约组织(NATO)第一次提出“软件工程”的概念,核心是将软件工程纳入工程化的轨道,保证软件开发的质量和效率,被称为第一代软件工程。

(2) 面向对象开发软件工程阶段。

20世纪80年代中到90年代,以Smalltalk为代表的面向对象程序设计语言相继推出,面向对象的方法和技术得到发展。软件工程研究的重点从程序设计语言转移到面向对象的分析和设计,其核心是CASE工具和环境的研发。面向对象方法通过设计模式、软件体系结构和体系结构描述语言以及UML技术得到进一步发展,这一阶段又称为第二代软件工程。

(3) 构件化开发软件工程阶段。

20世纪90年代,随着软件规模和复杂度不断增大,为了降低生产成本,适应需求变化,软件复用和构件技术受到关注。软件构件可封装高密度的、高复杂度的业务逻辑,软件系统的开发可通过使用现成的、可复用的软件构件组装完成,无须全部重新构造,以此达到提高效率和质量,降低成本的目的,这一阶段又称为第三代软件工程。

(4) 网构技术软件工程阶段。

2000年左右,互联网逐渐发展为一种全球泛在的计算基础设施,形成一个互联网计算平台,此时网构软件技术得到发展。网构软件包括一组分布于环境下各个节点的、具有主体化特征的软件实体,以及一组用于支撑这些软件实体以各种交互方式进行协同的连接子,具备自主性、协同性、情景性、涌现性和演化性,这一阶段又称为第四代软件工程。

(5) 智能化开发软件工程阶段。

2010年以后,以深度学习为代表的人工智能迅猛发展,智能化开发软件工程泛指将演化计算、机器学习、深度学习等人工智能新技术应用于软件工程领域,解决围绕软件全生命周期的各种典型软件工程任务(如代码生成、软件测试与缺陷定位、自动修复等),以提高软件的质量和开发效率。2020年以后,随着云原生的普及,容器化、微服务化、虚拟化成为许多云技术产品的基础性技术。这一阶段又称为第五代软件工程。

软件工程开发方法

在软件开发的过程中,软件开发方法是关系到软件开发成败的重要因素。软件开发方法就是软件开发所遵循的办法和步骤,以保证所得到的运行系统和支持的文档满足质量要求。

软件开发的基本方法包括结构化方法、面向对象方法、面向构件方法和面向行业领域方法等,本书鉴于篇幅原因,仅介绍结构化方法和面向对象方法。

(1) 结构化方法。

结构化方法是较传统的软件开发方法。结构化的基本思想可以概括为自顶向下、逐步求精,采用模块化技术和功能抽象将系统按功能分解为若干模块,从而将复杂的系统节解为若干子系统,子系统又可以分解为更小的子任务,最后的子任务都可以独立编写成子程序模块。模块内部由顺序、选择和循环等基本控制结构组成。

这些模块功能相对独立,接口简单,使用维护非常方便。所以,结构化方法是一种非常有用的软件开发方法,是其他软件工程方法的基础。

但是,由于结构化方法将过程和数据分离为相互独立的实体,因此开发的软件可复用性较差,在开发过程中要使数据和程序始终保持相容也很困难。这些问题通过面向对象方法能得到很好的解决。

(2) 面向对象方法。

面向对象方法是针对结构化方法的缺点,为了提高软件系统的稳定性、可修改性和可重用性而逐渐产生的。面向对象方法最开始主要用在程序编码中,之后又逐渐出现了面向对象的分析和设计方法,是当前软件开发方法的主要方向。

面向对象方法的出发点和基本原则,主要体现在开发软件的过程中,尽可能模拟人类习惯的思维方式,将客观世界的实体抽象成程序语言中的封装对象,它主要有以下几个特点。

① 认为客观世界是由各种对象组成的,任何事物都是对象。

② 把所有对象都划分为各种对象类,每个类定义一组数据和一组方法。

③ 按照子类与父类的关系,把若干对象类组成一个层次结构的系统。

④ 对象彼此之间仅能通过传递消息相互联系。

面向对象方法的主要优点是使用现实的概念抽象地思考问题,从而自然地解决问题,保证软件系统的稳定性、可重用性以及良好的维护性。但是面向对象方法也不是十全十美的,在实际的软件开发中,常常要综合地应用结构化方法和面向对象方法。

目录
相关文章
|
2月前
|
测试技术
【软件工程】高效需求分析在软件工程中的精要
【软件工程】高效需求分析在软件工程中的精要
85 0
|
12月前
|
架构师 程序员
「软件工程」编程生产力概述
「软件工程」编程生产力概述
|
12月前
|
设计模式 算法 架构师
【软件工程】软件设计概述
【软件工程】软件设计概述
|
项目管理
软件工程高效学 | 实战案例:TAPD进行需求管理
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动,其根本目的是让软件项目尤其是大型项目的整个软件生命周期(从分析、设计、编码到测试、维护全过程)都能在管理者的控制之下。本篇通过TAPD进行需求管理。
402 0
软件工程高效学 | 实战案例:TAPD进行需求管理
|
测试技术
【软件工程基础】需求工程
【软件工程基础】需求工程
118 0
|
存储 安全 数据库
【软件工程基础】软件需求
【软件工程基础】软件需求
109 0
|
小程序 测试技术 程序员
『软件工程12』软件工程实践方法——软件测试
在一项系统软件完成之后,且在上线之前,需要经过不断的软件测试,找出 bug 和错误,不断修补,才能正式上线。在下面的这篇文章中,将讲解软件测试的一些基础知识以及测试用例的设计和软件测试的步骤。 接下来开始进行讲解。
『软件工程12』软件工程实践方法——软件测试
《软件工程方法与实践》—— 第一部分 软件工程基础
本部分将介绍软件工程的基本概念、软件过程及其模型和敏捷软件开发方法,包括软件工程概述、软件过程、软件过程模型和敏捷软件开发方法四章内容
1424 0
《软件工程方法与实践》—— 第2章 软件过程 2.1 引言
大型软件的开发一直是开发人员和机构所面临的严峻的挑战,特别是软件危机出现以后,人们为了解决软件危机提出了各种各样的方法。从技术方面入手,这些方法直接影响了系统分析的思想,结构化程序设计成为程序设计的主流。人们从管理方面入手, 这些方法解决软件的一个核心问题,这就产生了软件工程的概念。
912 0