- 软件工程教程
- 软件工程主页
- 软件工程概述
- 软件开发生命周期
- 软件项目管理
- 软件需求
- 软件设计基础
- 分析与设计工具
- 软件设计策略
- 软件用户界面设计
- 软件设计复杂性
- 软件实现
- 软件测试概述
- 软件维护
- CASE工具概述
- 软件 - 考试题及答案
- 软件工程 - 考试题及答案
软件工程概述
让我们首先了解软件工程的含义。这个术语由两个词组成:软件和工程。
软件不仅仅是程序代码。程序是可以执行的代码,用于某种计算目的。软件被认为是可执行程序代码、相关库和文档的集合。针对特定需求而制作的软件称为软件产品。
工程另一方面,是关于使用明确定义的科学原理和方法开发产品。
软件工程是与使用明确定义的科学原理、方法和程序开发软件产品相关的工程分支。软件工程的结果是高效可靠的软件产品。
定义
IEEE将软件工程定义为:
(1) 对软件的开发、运行和维护应用系统化、规范化、可量化的方法;即对软件应用工程。
(2) 对如上所述方法的研究。
德国计算机科学家Fritz Bauer将软件工程定义为:
软件工程是为了经济地获得可靠并在实际机器上高效工作的软件而建立和使用健全的工程原理。
软件演化
使用软件工程原理和方法开发软件产品的过程称为软件演化。这包括软件的初始开发及其维护和更新,直到开发出满足预期需求的所需软件产品。
演化始于需求收集过程。之后,开发人员创建预期软件的原型,并在软件产品开发的早期阶段向用户展示以获取反馈。用户提出更改建议,在此基础上,连续的更新和维护也会不断变化。这个过程改变了原始软件,直到完成所需的软件。
即使用户已经拥有所需的软件,不断发展的技术和不断变化的需求也迫使软件产品做出相应的改变。从头开始重新创建软件并一一满足需求是不可行的。唯一可行且经济的解决方案是更新现有软件,使其符合最新的需求。
软件演化定律
Lehman提出了软件演化的定律。他将软件分为三类:
- S型(静态型) - 这种软件严格按照定义的规范和解决方案工作。解决方案和实现方法在编码之前都已完全理解。S型软件最不容易发生变化,因此是最简单的。例如,用于数学计算的计算器程序。
- P型(实用型) - 这种软件包含一系列程序。它由程序能够执行的确切操作来定义。在这种软件中,可以描述规范,但解决方案并非立即可见。例如,游戏软件。
- E型(嵌入型) - 这种软件与现实世界的环境需求密切相关。这种软件具有高度的演化性,因为现实世界的情况中存在各种法律、税收等方面的变化。例如,在线交易软件。
E型软件演化
Lehman提出了E型软件演化的八大定律:
- 持续变化 - E型软件系统必须持续适应现实世界的变化,否则它将逐渐变得越来越无用。
- 复杂性增加 - 随着E型软件系统的演化,除非采取措施维持或降低其复杂性,否则其复杂性往往会增加。
- 熟悉性守恒 - 必须不惜一切代价保留对软件的熟悉程度或关于其开发方式、为何以这种特定方式开发等的知识,以实施系统更改。
- 持续增长 - 为了解决某个业务问题而设计的E型系统,其实施更改的大小会根据业务生活方式的变化而增长。
- 质量下降 - 除非严格维护并适应不断变化的操作环境,否则E型软件系统的质量会下降。
- 反馈系统 - E型软件系统构成多环、多级反馈系统,必须将其视为多环、多级反馈系统才能成功地进行修改或改进。
- 自调节 - E型系统演化过程是自调节的,产品和过程测量的分布接近正态分布。
- 组织稳定性 - 在E型系统的整个生命周期中,平均有效的全球活动率是不变的。
软件范式
软件范式指的是在设计软件时采取的方法和步骤。今天已经提出了许多方法并且正在使用中,但是我们需要了解这些范式在软件工程中的地位。这些范式可以组合成各种类别,尽管它们彼此包含。
编程范式是软件设计范式的子集,而软件设计范式又是软件开发范式的子集。
软件开发范式
这种范式被称为软件工程范式,其中应用了所有与软件开发相关的工程概念。它包括各种研究和需求收集,这有助于构建软件产品。它包括:
- 需求收集
- 软件设计
- 编程
软件设计范式
这种范式是软件开发的一部分,包括:
- 设计
- 维护
- 编程
编程范式
这种范式与软件开发的编程方面密切相关。这包括:
- 编码
- 测试
- 集成
软件工程的必要性
软件工程的必要性源于用户需求和软件运行环境的高变化率。
- 大型软件 - 建造一堵墙比建造一座房子或建筑物更容易,同样,随着软件规模的扩大,工程必须介入,赋予其科学的过程。
- 可扩展性 - 如果软件过程不是基于科学和工程概念,那么重新创建新软件将比扩展现有软件更容易。
- 成本 - 正如硬件行业已经展示了其技能,大规模制造已经降低了计算机和电子硬件的价格。但是,如果未采用适当的过程,软件成本仍然很高。
- 动态特性 - 软件不断发展和适应的特性很大程度上取决于用户工作环境。如果软件的特性一直在变化,则需要对现有软件进行新的增强。这就是软件工程发挥良好作用的地方。
- 质量管理 - 更好的软件开发过程能够提供更好、更优质的软件产品。
优秀软件的特性
软件产品可以通过其提供的功能以及易用性来评价。该软件必须在以下方面令人满意:
- 运行方面
- 过渡方面
- 维护
设计精良的软件应具有以下特性:
运行方面
这告诉我们软件在运行中的表现如何。它可以通过以下方面来衡量:
- 预算
- 可用性
- 效率
- 正确性
- 功能性
- 可靠性
- 安全性
- 安全性
过渡方面
当软件从一个平台迁移到另一个平台时,这方面非常重要。
- 可移植性
- 互操作性
- 可重用性
- 适应性
维护
这方面简要介绍了软件在不断变化的环境中维持自身能力如何。
- 模块化
- 可维护性
- 灵活性
- 可扩展性
简而言之,软件工程是计算机科学的一个分支,它使用明确定义的工程概念来生产高效、耐用、可扩展、符合预算和按时交付的软件产品。