简答题
1.软件工程的定义
- 对软件开发、操作和维护的系统化、规范化、可量化方法的应用,即工程对软件的应用。
- 对(1)中方法的研究。
- 软件工程的目标是克服软件危机,构建生产软件的方法与知识体系。
2.解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
(1)原因
软件危机是计算机科学早期使用的一个术语,指在规定的时间内编写有用而高效的计算机程序的困难性。软件危机是由于计算机能力的迅速提高和无法解决的问题的复杂性造成的。随着软件复杂性的增加,由于现有方法的不足,出现了许多软件问题。Edsger Dijkstra曾说过,机器已经变得强大了几个数量级,只要没有机器,编程根本就不是问题;当我们有一些弱的计算机时,编程变成了一个简单的问题,现在我们有了巨大的计算机,编程也变成了一个同样巨大的问题。计算能力已经超过了程序员有效利用这些能力的能力。在过去的几十年中,开发了各种过程和方法来改进软件质量管理,如过程编程和面向对象编程。然而,大型的、复杂的、没有详细说明的、涉及不熟悉方面的软件项目仍然容易受到大型的、未预料到的问题的影响。
(2)表现
-
进行了超预算的项目
-
项目长期无法完成
-
软件非常低效
-
软件质量低下
-
软件经常与用户的需求不匹配
-
项目难以管理
-
程序代码的后期维护存在困难
-
软件无法完成并交付
(3)克服方法
-
研制和使用软件工具,用以辅助进行软件项目管理与技术生产,将软件生命周期各阶段使用的软件工具有机地集合成为一个整体,形成能够连续支持软件开发与维护全过程的集成化软件支援环境,以期从管理和技术两方面解决软件危机问题。
-
建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。
-
基于程序变换、自动生成和可重用软件等软件新技术研究也已取得一定的进展,把程序设计自动化的进程向前推进一步。
3.软件生命周期
软件生命周期是在时间维度,对软件项目任务进行划分,又称为软件开发过程。常见有瀑布模型、螺旋模型、敏捷的模型等。其中瀑布模型有可行性分析与计划、需求分析、设计、编码实现、测试、运行和维护六个阶段。
4.SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)
(1)软件工程实践知识域
-
软件需求 Software requirements
真实世界问题而必须展示的特性。软件需求的知识域包括七个子域,即软件需求基础、需求过程、需求获取、需求分析、需求规格说明、需求确认和实践考虑。 -
软件设计 Software design
根据IEEE [ IEEE 610.12-90] ,设计既是"定义一个系统或组件的体系结构、组件、接口和其他特征的过程",又是"这个过程的结果"。软件设计的知识域包括六个子域,即软件设计基础、软件设计关键问题、软件结构与体系结构、软件设计质量的分析与评价、软件设计符号、软件设计的策略与方法。 -
软件构造 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
指软件工程师必须具备的知识、技能和态度,以一种专业、负责和道德的方式来实践软件工程。软件工程专业实践知识域涵盖专业(专业行为、专业协会、软件工程标准、雇佣合同、法律问题),伦理准则;团队动态(在团队中工作,认知问题的复杂性,与利益相关者的互动,处理不确定性和模糊性,处理多元文化环境)和沟通能力。
(2)软件工程教育基础知识域
-
软件工程经济学 Software engineering economics
软件工程经济学知识域关注于在业务上下文中做出决策,以使技术决策与组织的业务目标保持一致。所涵盖的主题包括软件工程经济学的基本原理(建议、现金流量、金钱的时间价值、规划期限、通货膨胀、折旧、重置和退休决定);非营利性决策(成本效益分析、优化分析);评估、经济风险和不确定性(评估技术、风险和不确定性下的决策);以及多属性决策(值和度量尺度、补偿和非补偿技术)。
-
计算基础 Computing foundations
计算基础知识域涵盖了为软件工程实践提供必要的计算背景的基本主题。主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。
-
数学基础 Mathematical foundations
数学基础知识域涵盖了为软件工程实践提供必要数学背景的基本主题。主题包括集合、关系和函数;基本命题逻辑和谓词逻辑;证明技术;图表和树木;离散型概率;语法和有限状态机;和数论。
-
工程基础 Engineering foundations
工程基础知识域涵盖了为软件工程实践提供必要的工程背景的基本主题。所涵盖的主题包括实证方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。
5.简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
(1)Level 1 - Initial:初始级。
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
(2)Level 2 - Managed:可管理级。
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
(3)Level 3 - Defined:已定义级。
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
(4)Level 4 - Quantitatively Managed:量化管理级。
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个做出结论的客观依据,管理能够在定量的范围内预测性能。
(5)Level 5 - Optimizing:优化管理级。
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
6.用自己语言简述 CMMI
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成,是美国国防部的一个设想,1994年由美国国防部与卡内基-梅隆大学下的软件工程研究中心(Software Engineering Institute,SEISM)以及美国国防工业协会(National Defense Industrial Association)共同开发和研制的,计划是把现在所有现存实施的与即将被发展出来的各种能力成熟度模型,集成到一个框架中去,申请此认证的前提条件是该企业具有有效的软件企业认定证书。CMMI里面所有的要求,都是来自于成功企业的最佳实践的,也就是从以往的成功经验总结出来的,其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。CMMI一共有5个等级,从第1级开始,要想达到更高级的标准,一定需要一步一步达到要求,难度也越来越大。