简答题
软件工程的定义
软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
软件危机(Software Crisis)是一个早期的计算机科学用语,指的是在给定时间内编写出可用和高效的程序的困难性。现在引申至指软件在开发和维护过程中出现的一系列严重的问题。
在1972年,Edsger Dijkstra 指出计算能力约强大,编程越是大问题。因此导致软件危机的本质原因是计算机计算能力的迅速增长,以及计算机能力增长而导致软件需要处理和解决的问题具有更大的复杂性。也就是计算机计算能力的提高超过了程序员能够高效利用计算机的能力。
软件危机的表现:
- 项目运行超过预算
- 项目运行超过时间
- 软件非常低效
- 软件质量很差
- 软件常常不能满足需求
- 项目不可管理
- 软件从未交付
克服软件危机的方法:
- 建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。
- 研制和使用软件工具,用以辅助进行软件项目管理与技术生产,将软件生命周期各阶段使用的软件工具有机地集合成为一个整体,形成能够连续支持软件开发与维护全过程的集成化软件支援环境,以期从管理和技术两方面解决软件危机问题。
- 基于程序变换、自动生成和可重用软件等软件新技术研究也已取得一定的进展,把程序设计自动化的进程向前推进一步。
软件生命周期
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
根据GB/T 8567的定义,软件生命周期分为以下6个阶段:
- 可行性分析与计划
- 需求分析
- 设计(概要设计和详细设计)
- 编码实现
- 测试
- 运行和维护
SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)
- 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 软件质量:软件质量是一个普遍存在的软件生命周期问题,在许多SWEBOK V3 知识域中都得到了解决。此外,软件质量知识域还包括软件质量的基础(软件工程文化、软件质量特征、软件质量的价值和成本、软件质量改进);软件质量管理过程(软件质量保证、验证和验证、评审和审计);以及实际的考虑(缺陷特性、软件质量度量和软件质量工具)。
- Software Engineering Professional Practice 软件工程专业实践:关注软件工程师必须具备的专业,负责和符合伦理的软件工程知识,技能和态度。
- Software Engineering Economics 软件工程经济学:关注在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。
- Computing Foundations 计算基础:计算基础知识域涵盖了为软件工程实践提供必要的计算背景的基本主题。主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。
- Mathematical Foundations 数学基础:数学基础知识域涵盖了为软件工程实践提供必要数学背景的基本主题。主题包括集合、关系和函数;基本命题逻辑和谓词逻辑;证明技术;图表和树木;离散型概率;语法和有限状态机;和数论。
- Engineering Foundations 工程基础:工程基础知识域涵盖了为软件工程实践提供必要的工程背景的基本主题。所涵盖的主题包括实证方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。
简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
- Level1-initial(初始级): 软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
- Level2-managed(可管理级): 建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
- Level3-defined(已定义级): 已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
- Level4-Quantitatively Managed(量化管理级): 分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
- Level5-Optimizing(优化管理级): 过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
用自己语言简述 SWEBok 或 CMMI (约200字)
CMMI是美国国防部与卡内基-梅隆大学下的软件工程研究中心以及美国国防工业协会共同开发和研制的,其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。它所要达成的目标,第一个是质量,第二个是时间表,第三就是要用最低的成本。阶段式表现方法把CMMI中的若干个过程区域分成了5 个成熟度级别,帮助实施CMMI的组织建议一条比较容易实现的过程改进发展道路。一般来说,通过CMMI认证的级别越高,其越容易获得用户的信任,在国内、国际市场上的竞争力也就越强