简答题
1. 软件工程的定义
简单来讲,软件工程即软件开发领域里对工程方法的系统应用。
IEEE对软件工程的定义是将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。
2. 解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
软件危机是由于计算机能力的迅速增加以及无法解决的问题的复杂性,而导致软件危机的本质原因是软件的复杂性、一致性、可变性和不可视性。典型表现有以下几种:
- 项目运行超出预算
- 项目运行时间过长
- 软件效率低
- 软件质量差
- 软件不符合要求
- 项目难以管理,代码难以维护
- 软件无法成功交付
克服软件危机的方法是系统化、与时俱进的软件工程。
3. 软件生命周期
软件生命周期是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
4. SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)
(1) Software Requirements
软件需求。
软件需求知识域关注的方面是软件需求的启发,协商,分析,规范和验证。人们普遍认为,若需求不清晰,则软件项目会变得很脆弱。软件需求表达了对软件产品的需求和限制,这些需求和约束有助于解决一些现实问题。
(2) Software Design
软件设计。
设计的定义是:定义体系结构、组建、接口以及其他系统或组建特性的过程和结果。
软件设计知识域涵盖了设计过程和最终产品。软件设计过程是软件工程生命周期活动,包括分析软件需求以产生软件内部结构及其行为的描述,将其作为其构造的基础。软件设计(结果)必须描述软件体系结构,即软件如何分解和组织成组件与组件之间的接口。
(3) Software Construction
软件构建。
软件构建是指通过结合详细设计,编码,单元测试,集成测试,调试和验证来详细创建工作软件。
(4) Software Testing
软件测试。
测试是一项旨在评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试涉及在有限的测试用例集上针对预期行为动态验证程序的行为。这些测试用例是从(通常非常大的)执行域中选择的。软件测试知识域包括软件测试的基础知识、测试技术、交互界面测试与评估、与测试有关的方法和实际考虑。
(5) Software Maintenance
软件维护。
软件维护包括增强现有功能,调整软件以在新的和修改的操作环境中运行,以及纠正缺陷。这些类别分别称为完善,自适应和纠正性软件维护。软件维护知识域包括软件维护的基础知识(维护的性质和需求,维护类别,维护成本)、软件维护中的关键问题(技术问题,管理问题,维护成本估算,软件维护测量)、维护过程、 软件维护技术(程序理解,重新设计,逆向工程,重构,软件退役)、 灾难恢复技术和软件维护工具。
(6) Software Configuration Management
软件配置管理。
系统的配置是硬件,固件,软件或这些的组合的功能和物理特征。软件配置管理(SCM)是在不同时间点识别系统配置的规则,用于系统地控制配置的改变,以及在整个软件生命周期中维持配置的完整性和可追溯性。软件配置管理知识域涵盖SCM过程的管理、软件配置识别,控制,状态核算,审计、软件发布管理和交付.
(7) Software Engineering Management
软件工程管理。
软件工程管理涉及规划,协调,测量,报告和控制项目或程序,以确保软件的开发和维护是系统化的,规范化的和量化的。软件工程管理知识域涵盖了启动和范围定义(确定和协商要求,可行性分析以及要求的审查和修订); 软件项目计划(过程计划,工作量估算,成本和进度,资源分配,风险分析,质量计划); 软件项目制定(计量,报告和控制;收购和供应商合同管理); 产品验收; 审查和分析项目绩效; 项目结束; 和软件管理工具。
(8) Software Engineering Process
软件工程过程。
(9) Software Engineering Models and Methods
软件工程模型和方法。
软件工程模型和方法知识域提出了不同生命周期阶段的工程方法。
包括建模、模型类型、分析和软件开发方法。
(10) Software Quality
软件质量。
软件质量是软件生命周期中无处不在的关注点。
软件质量知识域涵盖了软件质量基础、软件质量管理过程和实际考虑。
(11) Software Engineering Professional Practice
软件工程专业实践。
软件工程专业实践是关于软件工程师进行专业、负责、合乎道德的软件工程实践时所需要的知识、技术和态度。
软件工程专业实践知识域包含敬业精神、道德准则、小组活力和交流技巧。
(12) Software Engineering Economics
软件工程经济学。
软件工程经济学知识域关注的是在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。涵盖的主题包括软件工程经济学的基本原理、非营利性决策、经济风险和不确定性估计和多属性决策。
(13) Computing Foundations
计算基础。
计算基础知识域涵盖了提供软件工程实践所需的计算基础主题。涵盖的主题包括问题解决技术,抽象,算法和复杂度,编程基础,并行和分布式计算的基础知识,计算机组成原理,操作系统和网络通信。
(14) Mathematical Foundations
数学基础。
数学基础知识域涵盖了提供软件工程实践所必需的数学背景的基础主题。涵盖的主题包括集合,关系和函数; 基本命题和谓词逻辑; 证明技巧; 图形和树; 离散概率; 语法和有限状态机和数论。
(15) Engineering Foundations
工程基础。
工程基础知识域涵盖了提供软件工程实践所必需的工程背景的基础主题。涵盖的主题包括经验方法和实验技术; 统计分析; 测量和指标; 工程设计; 仿真与建模以及根本原因分析。