第一章 绪论
文章目录
1.软件是什么?
软件是在通用计算机硬件之上面向特定应用目标实现的解决方案。
软件包括程序、相关数据及说明文档。
2.软件的特征(与硬件区别在哪里)
软件在开发、生产和维护方面与硬件不同。
-
软件开发不同于硬件设计
与硬件设计相比,软件更依赖于开发人员的业务素质、智力,以及人员的组织、合作和管理。同时对硬件而言,设计成本往往只占整个产品成本的一小部分,而软件开发占整个产品成本的大部分。
-
软件生产不同于硬件制造
硬件设计完成后就投入批量制造,制造也是一个复杂的过程,其间仍可能引入质量问题;而软件成为产品之后,其制造只是简单的拷贝而已。软件的仓储和运输也非常简单。
-
软件维护不同于硬件维修
硬件在运行初期有较高的故障率,在缺陷修正后的一段时间中,故障率会降到一个较低和稳定的水平上。随着时间的改变,故障率将再次升高,这是因为硬件会受到摩损等损害,达到一定程度后就只能报废。软件是逻辑的而不是物理的,虽然不会磨损和老化,但在使用过程中的维护却比硬件复杂得多。如果软件内部的逻辑关系比较复杂,在维护过程中还可能产生新的错误。
3.软件危机是什么
软件危机是在开发和维护过程中产生的一系列问题。
表现为:
- 进度经常延迟(进度)
- 质量无法保证(质量)
- 成本超出预算(成本)
- 软件维护困难(维护)
- 失败风险很大(风险)
根源为(产生原因):
- 对软件这样一类复杂和特殊系统的认识不清
- 没有找到支持软件系统开发的有效方法
- 缺乏成功软件开发实践以及相应的开发经验
4.工程和工程过程
工程是对技术(或社会)实体的分析、设计、建造、验证和管理。
工程是一种组织良好、管理严密、各类人员协同配合、共同完成工作的学科。
它具有这些特性:以价值为目标、高度的组织管理性、多种学科的综合、高度的实践性。
一个工程过程包括以下四个核心步骤:
- 理解问题(软件需求分析)
- 设计方案(软件设计)
- 实施方案(软件编码)
- 监控方案的效能(软件测试和质量保障)
5.软件工程的定义
NATO:软件工程就是为了经济地获得可靠的且能在实际机器上高效运行的软件而建立和使用的工程原理。
IEEE:软件工程是将系统的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。
CMU/SEI-90TR-003:软件工程就是应用计算机科学和数学的原理来经济有效地解决软件问题的一种工程。
6.SWEBOK V4的18个知识域(了解)
- 软件工程专业知识域
- 软件需求、软件架构、软件设计、软件构造
- 软件测试、软件运营、软件维护、软件配置管理
- 软件工程管理、软件工程过程
- 软件工程模型与方法、软件质量、软件安全
- 软件工程经济、软件工程职业实践
- 软件工程通用知识域
- 工程经济基础、计算基础
- 数学和工程基础
7.软件工程的金三角(了解)
指支撑软件开发的三大核心要素:人员(人的参与)、技术(技术方法)和管理(软件工程管理)
- 人:完成软件开发的主体
- 技术:提供了建造软件在技术上需要如何做的方法、
- 管理:提供了质量管理、成本管理、时间管理和范围管理等知识和技能
- 过程:将人、技术和管理结合在一起的凝聚力。
8.软件过程(软件工程技术)
- 需求(Request)重点在What
- 任务:调研和定义软件的需求
- 成果:《需求规约》(经用户和软件人员双方共同认可) FURPS+
- 设计(Design)重点在How
- 任务:软件人员依据软件需求,建立软件的设计蓝图, 是需求到代码的桥梁。
- 成果:《软件架构》文档,设计模型
- 编程(Coding):依据设计文档为每个模块编写程序
- 测试(Testing):发现并排除软件中的缺陷
- 部署(Deployment):交付、支持和反馈
- 软件运营(Operation):在目标环境中部署和配置软件,以及在软件运行时(直到停用)对其进行监控和管理的过程
- 软件维护(Maintenance):软件系统交付运营后,为了改正错误或满足新的需要而修改软件的过程。
- 举例:一个中等规模的软件,如果开发过程要一年时间,它投入使用后,其运行时间可能持续五年,这段时间是维护阶段。
- 与开发相比,维护阶段的工作量和成本要大得多。
- 人们对软件维护的认识远不如软件开发,因为开发具有主动性和创造性,易被人们所重视。
- 维护类型:
- 纠错性维护:为修复所发现的问题而进行的反应式维护
- 预防性维护:在软件产品中的潜在错误成为实际错误前所进行的预防性修复,例如设计重构和代码优化等
- 适应性维护:为适应环境的变化而修改软件的维护
- 补充性维护:添加新功能或新特性以增强产品使用的维护
- 完善性维护:为用户提供功能增强、程序文档改进、软件性能和可维护性等质量属性的提升而做的维护。和补充性维护不同的是,它并不增加新功能和新特性,所做的修改较小
- 紧急维护:计划外的应急修改,以暂时保持系统运行,等待后续纠错性维护