1.简答题
软件工程的定义
答:根据IEEE标准610.12给出的定义,软件工程是对软件的开发、操作和维护应用系统的、有纪律的、可量化的方法,即工程对软件的应用和对方法的研究。
解释导致 software crisis 本质原因、表现,述说克服软件危机的方法.
- 本质原因:软件危机的出现是由于计算机能力的迅速增加以及无法解决的问题的复杂性。由于计算机的计算能力快速增长,需要解决的问题更加复杂。随着软件复杂性的增加,因为现在的解决方法不足,许多软件问题出现。此外还有用户需求不明确、缺乏正确的理论指导、软件开发规模越来越大、软件开发复杂度越来越高等原因。
- 表现:
- 软件开发进度难以预测
- 软件开发成本难以控制
- 用户对产品功能难以满足
- 软件产品质量无法保证
- 软件产品难以维护
- 软件缺少适当的文档资料等。
- 软件的开发生产率跟不上硬件的发展,计算能力越大,编程问题越大,软件越复杂
- 克服方法:
- 建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。
- 研制和使用软件工具,用以辅助进行软件项目管理与技术生产。
- 采用成熟的软件开发技术和方法,比如结构化程序设计,面向对象的开发,CMM,UML等等
- 正确认识计算机软件的内涵。
- 采用工程项目管理方法实施软件开发的组织管理。软件开发应该是一种组织良好、管理严密、协同配合的工程活动
软件生命周期
计算机软件有一个孕育、诞生、成长、成熟、衰亡的生存过程,这 样的过程称为软件的生命周期(也称软件开发生命周期SDLC)。软件 生命周期将软件开发过程划分为若干阶段,每个阶段有明确的任务 目标和运行机制,从而使复杂的软件开发过程能够得到适当的控制 和管理。
软件生命周期一般包括可行性分析与计划、需求分析、设计(概要 设计和详细设计)、编码实现、测试、运行与维护等活动。这些活 动应当以适当的方式分配到不同的阶段去完成。
软件生命周期的6个阶段:
- 可行性分析与计划阶段
- 需求分析阶段
- 设计阶段
- 实现阶段
- 测试阶段
- 运行与维护阶段
- 软件生命周期常见模型:
- 瀑布模型
- V-W 模型
- 快速应用开发模型
- 原型模型
- 增量/演化/迭代模型
- 螺旋模型
- 喷泉模型
- 基于构件的开发模型
- Rational 统一过程模型
- 敏捷开发模型与极限编程
SWEBoK 的 15 个知识域
SWEBoK(Software Engineering Body of Knowledge)即软件工程知识体系。
- 软件需求 (Software Requirements) :软件需求知识域主要关注软件需求的协商,谈判,分析,明确,验证等过程。
- 软件设计 (Software Design) : 软件设计是定义软件结构,组件,接口,和其他系统特性以及产品结果的过程
- 软件构建 (Software Construction): 软件构建实现主要涉及到了详细的代码设计实现,单元测试,集成测试,调试和验证等工作任务。
- 软件测试 (Software Testing) :软件测试是一项评估软件项目质量以及识别软件缺陷并改善的工作
- 软件维护 (Software Maintenance) :软件维护涉及了升级现有软件功能(完善性维护),调整软件适应运行环境的变化(适应性维护),以及更正软件缺陷(改正性维护)等方面的工作。
- 软件配置管理 (Software Configuration Management) : 系统的配置是硬件,固件,软件或他们组合的功能和物理特征。同时配置还可以看作是硬件,固件,软件,或其组合的特定版本的集合。不同的版本有不同的配置,根据特定的构建过程组合在一起,以服务与特定的目的。
- 软件工程管理 (Software Engineering Management) :软件工程管理包括计划,协调,衡量,报告和控制一个项目,以确保软件的开发和维护是系统化的,有纪律的以及可量化的。
- 软件工程过程 (Software Engineering Process) : 涉及软件生命周期过程的定义,实现,评估,度量,管理和改进。所涵盖的主题包括过程实现和变更,过程定义,过程评估模型和方法,以及过程测量。
- 软件工程模型和方法 (Software Engineering Models and Methods) :解决了围绕整个软件生命周期各阶段问题的方法,以及在特定生命周期阶段的其他知识域所包含的问题的方法。
- 软件质量 (Software Quality): 关注软件质量的基础,软件质量管理过程,以及实际的考虑。
- 软件工程专业实践 (Software Engineering Professional Practice):对于软件工程师而言,必须具备的知识,技能和态度,要以一种专业的,负责的,和合乎道德的方法来进行实践。
- 软件工程经济学 (Software Engineering Economics):如何在业务环境中做出决策,以便技术决策与组织的业务目标保持一致。
- 计算基础 (Computing Foundations):涵盖了提供给软件工程实践所需的计算背景的基础主题。包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。
- 数学基础 (Mathematical Foundations) :涵盖了用于软件工程实践所需的数学理论基础
- 工程基础 (Engineering Foundations):主要提供了用于软件工程实践所需的工程背景基础
简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
- level 1 - Initial:无序,自发生产的模式,过程难以预测,控制性差,反应性弱。
- Level 2 - Managed:有序的,项目化的生产模式,具有明确的流程和较好的项目控制程序。
- Level 3 - Defined:定义级,企业企业管理组织化,流程标准化,体系制度化。
- level 4 - Quantitatively Managed:量化管理级,实现数字化管理和控制
- Level 5 - Optimizing:优化管理级。过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
用自己语言简述 SWEBok 或 CMMI (约200字)
- SWEBoK 的中文名称为软件工程知识体系,是 IEEE Computer Society 构建软件生产的最佳实践与相关知识的框架,用于指导软件工程人才的培养与学科建设。知识体系分为软件工程实践和基础教育两个部分,共有15个知识域,包括11个实践知识域和4个软件工程教育需求知识域。
- CMMI即能力成熟度模型集成,是一种过程性的改进训练和评估计划,用于度量一个企业的软件工程能力,可划分为五个级别(Initial, Managed, Defined, Quantitatively Managed, Optimizing)。