|
| 1 | +# 初识软件工程 |
| 2 | + |
| 3 | +## 软件危机的概念与包含的问题 |
| 4 | + |
| 5 | +**概念**: |
| 6 | + |
| 7 | +软件危机是指在计算机软件**开发及维护的过程中**所遇到的**一系列严重问题**。 |
| 8 | + |
| 9 | +**包含的问题**: |
| 10 | + |
| 11 | +- 如何开发软件,以**满足不断增长、日趋复杂的需求**? |
| 12 | +- 如何**维护数量不断膨胀**的软件产品? |
| 13 | + |
| 14 | +## 产生软件危机的原因 |
| 15 | + |
| 16 | +**客观原因**: |
| 17 | + |
| 18 | +- **软件管理**和**控制开发过程**相当**困难**。 |
| 19 | +- 软件在**运行时发现的错误**很可能是**开发时期引入的、在测试阶段没能检测出来的**错误。 |
| 20 | +- 软件**规模庞大**,且程序**复杂性**将随着规模的增加而**呈指数上升**。 |
| 21 | + |
| 22 | +**主观原因**: |
| 23 | + |
| 24 | +- **开发人员对开发和维护有错误的认识**。如忽视需求分析的重要性,认为开发就是写程序,轻视软件维护等。 |
| 25 | +- **只重视程序而忽视软件配置其余成分**的糊涂观念。 |
| 26 | + |
| 27 | +## 消除软件危机的途径 |
| 28 | + |
| 29 | +- **对软件有正确的认识**。一个软件必须由一个完整的配置组成。软件是程序、数据及相关文档的完整集合。 |
| 30 | +- 充分认识到软件开发是一种**组织良好、管理严密、各类人员协同配合、共同完成**的工程项目。 |
| 31 | +- **使用在实践中成功的技术和方法**,并且**研究探索更好、更有效**的技术和方法。 |
| 32 | +- **在测试阶段做好充分的检测工作**,提交给客户高质量的软件。 |
| 33 | + |
| 34 | +## 什么是软件?什么是程序?什么是数据?什么是文档? |
| 35 | + |
| 36 | +软件是**程序**、**数据**及**相关文档**的完整集合。 |
| 37 | + |
| 38 | +- **程序**是**能够完成预定功能和性能的可执行的指令序列**; |
| 39 | +- **数据**是**使程序能够适当地处理信息的数据结构**; |
| 40 | +- **文档**是**开发、使用和维护程序所需要的图文资料**。 |
| 41 | + |
| 42 | +## 软件工程的定义 |
| 43 | + |
| 44 | +- **1969 年 Fritz Bauer 的基本定义**: |
| 45 | + |
| 46 | + 软件工程是建立和使用合理的工程化原则来活得经济的软件,并且在实现中是可靠和有效的。 |
| 47 | + |
| 48 | +- **1983 年 IEEE 定义**: |
| 49 | + |
| 50 | + 软件工程是将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护,以及对这些方法的研究,也就是说,将工程方法应用于软件领域的过程。 |
| 51 | + |
| 52 | +## 软件工程的三要素及各要素的含义 |
| 53 | + |
| 54 | +- **过程**: |
| 55 | + |
| 56 | + 为了获得高质量的软件所需要完成的**一系列任务的框架**,它规定了**完成各项任务的工作步骤** |
| 57 | + |
| 58 | +- **方法**: |
| 59 | + |
| 60 | + 完成软件开发的各项任务的**技术方法**,回答“**怎样做**”的问题 |
| 61 | + |
| 62 | +- **工具**: |
| 63 | + |
| 64 | + 为运用方法而提供的自动的或半自动的**软件工程支撑环境** |
| 65 | + |
| 66 | +## 软件的生命周期包含哪些阶段? |
| 67 | + |
| 68 | +**需求分析**阶段、**描述与定义**阶段、**设计**阶段、**实现**阶段、**测试**阶段、**维护**阶段和**淘汰**阶段。 |
| 69 | + |
| 70 | +## 软件需求分析阶段的任务是什么?阶段性成果是什么? |
| 71 | + |
| 72 | +**任务**: |
| 73 | + |
| 74 | +软件工程师需要了解客户(或用户)**需要什么样的软件产品**,即需要软件具备哪些功能、完成何种任务、处理什么数据等等。 |
| 75 | + |
| 76 | +**阶段性成果**:**软件需求规格说明书** |
| 77 | + |
| 78 | +## 软件设计阶段的任务是什么?阶段性成果是什么? |
| 79 | + |
| 80 | +**任务**: |
| 81 | + |
| 82 | +依据软件需求规格说明文档的内容,具体设计软件的结构、方法、数据、界面及各个软件功能模块的接口、数据和算法。 |
| 83 | + |
| 84 | +**阶段性成果**:**软件设计文档** |
| 85 | + |
| 86 | +## 软件设计阶段分为哪两个子阶段?各子阶段的工作分别是什么? |
| 87 | + |
| 88 | +这个阶段分为**概要设计**和**详细设计**两个子阶段: |
| 89 | + |
| 90 | +- **概要设计阶段**完成**对软件总体结构的设计和模块的划分工作**。 |
| 91 | +- **详细设计阶段**完成**各个软件模块的设计工作**。 |
| 92 | + |
| 93 | +## 软件的维护阶段具体是指什么阶段? |
| 94 | + |
| 95 | +软件的维护阶段是指**软件交付给客户之后**,**直到软件被淘汰**的阶段。 |
| 96 | + |
| 97 | +## 软件维护阶段的主要工作包括什么? |
| 98 | + |
| 99 | +- **正确性维护**:对软件中发现的错误进行更正。 |
| 100 | +- **扩充性维护**:为增加软件的功能而进行的修改。 |
| 101 | +- **性能性维护**:为提升软件的运行性能而进行的修改。 |
| 102 | +- **适应性维护**:为软件适应不同应用环境而进行的修改和升级。 |
0 commit comments