什么是软件工程?其特点和定义
什么是软件工程?
软件工程的定义是:分析用户需求,然后设计、构建和测试能够满足这些需求的软件应用程序的过程。
让我们来看看软件工程的各种定义:
- IEEE 在其标准 610.12-1990 中将软件工程定义为将系统化、规范化和可计算的方法应用于软件的开发、运行和维护。
- 弗里茨·鲍尔将其定义为“建立和使用标准工程原理。它有助于经济高效地获得可靠且能在实际机器上高效运行的软件”。
- Boehm 将软件工程定义为“将科学知识实际应用于计算机程序的创造性设计和构建。它还包括开发所需的配套文档。”ping操作和维护它们。”
为什么要进行软件工程?软件危机及其解决方案
什么是软件危机?
- 1960 世纪 XNUMX 年代末,许多软件项目失败了。
- 许多软件的开发都超出了预算。最终交付的软件既不可靠,维护成本又很高。
- 较大的软件很难维护并且维护成本相当高。
- 很多软件都无法满足客户日益增长的需求。
- 软件项目的复杂性会随着硬件性能的提升而增加。
- 与生成新软件的能力相比,对新软件的需求增长更快。
以上所有问题最终导致了“软件危机”。
解决方案
解决该问题的方案是将杂乱无章的编码工作转变为软件工程规范。这些工程模型帮助公司简化运营流程,并交付满足客户需求的软件。
- 20世纪70年代末,软件工程原理得到了广泛应用。
- 20 世纪 80 年代见证了软件工程过程的自动化和计算机辅助软件工程 (CASE) 的发展。
- 20 世纪 90 年代,人们越来越重视项目的“管理”方面以及质量和流程标准,就像 ISO 9001 一样。
软件工程为何如此受欢迎?
以下是软件工程流行的重要原因:
- 大型软件 现实生活中,砌墙比盖房子或楼房容易得多。同样,随着软件规模的扩大,软件工程可以帮助你构建软件。
- 可扩展性 – 如果软件开发过程基于科学和工程概念,那么重新创建新软件以扩展现有软件就更容易。
- 适应性 – 当软件开发过程基于科学和工程原理时,借助软件工程就很容易重新创建新软件。
- Cost 硬件行业展现了自身的实力,大规模生产降低了计算机和电子硬件的成本。
- 动态自然 软件具有不断发展和适应的特性,并且会随着用户的工作环境而变化。
- 质量管理 – 提供了一种更好的软件开发方法,以提供高质量的软件产品。
软件工程与其他学科的关系
以下是软件工程与其他学科的关系:
- 计算机科学: 它为软件提供了科学基础,就像物理学为电气工程提供了基础一样。
- 管理科学: 软件工程是一项劳动密集型工作,既需要技术控制,也需要管理控制。因此,它在管理科学领域得到广泛应用。
- 经济学: 在这个领域,软件工程可以帮助您进行资源估算和成本控制。您需要开发一套计算系统,并在既定预算内定期维护数据。
- 系统工程: 大多数软件都是大型系统的一个组成部分,例如工业监控系统中的软件或飞机上的飞行软件。软件工程方法应该应用于这类系统的研究。
软件工程的挑战
以下是软件工程师面临的一些关键挑战:
- 在航天、航空和核电站等安全攸关的领域,软件故障的代价可能非常巨大,因为这关系到生命安全。
- 市场对快速周转时间的需求不断增加。
- 应对新应用所需的日益复杂的软件。
- 需要相互通信的软件系统的多样性。
软件产品的属性
任何软件产品的特性都包括该产品在安装并投入使用时所显示的功能。
它们并非产品提供的服务,而是与产品的动态行为和用户对产品的使用方式相关的。
这些属性的示例如下:
Efficiency, reliability, robustness, maintainability, etc.
然而,这些特性的相对重要性在不同的软件系统之间是不同的。
| 产品特性 | 描述 |
|---|---|
| 可维护性 | 软件应该不断发展以满足客户不断变化的需求。 |
| 责任感 | 可靠性包括多种特性。可靠的软件在系统发生故障时不应该造成任何物理或经济损失。 |
| 高效 | 软件应用程序不应过度占用系统资源,例如内存和处理器周期。 |
| 可用性 | 该软件应用程序应具备合适的用户界面和文档。 |
优化上述属性极具挑战性。例如,提供更佳的用户界面可能会降低系统效率。
好软件的特点
评判任何软件都应该看它提供的功能以及帮助你使用它的方法。
每个软件都必须满足以下属性:
- Opera周志武
- 过渡期的
- 维护
以下是软件专业人员开发的优秀软件的一些重要特征。
Opera周志武
这一特性让我们了解软件在实际运行中的性能,可以通过以下方式衡量:
- 预算
- 高效
- 可用性
- 责任感
- 正确性
- Functionality
- 安全
- 安保防护
过渡期的
当软件从一个平台移动到另一个平台时,这是一个至关重要的方面:
- 互操作性
- 雷乌斯能力
- 便携性
- 适应性
维护
这方面主要讨论软件在快速变化的环境中自我适应的能力:
- 灵活性
- 可维护性
- 模块化
- 可扩展性


