一 、简答题
1.软件工程的定义
BarryBoehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
IEEE:在软件工程术语汇编中的定义:软件工程是:1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1中所述方法的研究
FritzBauer:在NATO会议上给出的定义:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
《计算机科学技术百科全书》:软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
2.解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
本质原因
软件危机的本质原因是计算机的发展。软件具有复杂性、一致性、不可变性、可视性的本质特点,落后的软件生产方式无法满足计算机的迅速发展。
表现
①成本和进度估计不准
②用户与开发人员交流不充分,产品不合用户要求
③软件质量无保障
④软件可维护性差
⑤无文档资料是软件质量主要原因
⑥软件成本占计算机系统比例上升
⑦软件开发生产效率低,供不应求
克服软件危机的方法:
为了克服软件危机,IEEE Computer Society 构建软件生产的最佳实践与相关知识的框架,称为 Software Engineering Body of Knowledge。指导软件工程人才的培养与学科建设。
2014 V3 版的 SWEBoK 将知识分为软件工程实践和基础教育两个部分,共 15 个知识域(knowledge areas / KAs)。Software Requirements,Software Design 是其中最重要的两个领域。
从实践的角度,Software Engineering Process 从时间维度给出了项目的过程模型(Process Models),其它则从内容角度给出了原则与方法。这样,就得到沿时间轴的二维表,这样软件工程就变成了在什么时刻、工作目标、应该做什么、怎么做的 最佳实践指南。
3.软件生命周期
软件生命周期(Software Life Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。旧的解释是周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
软件生命周期常见有瀑布模型、螺旋模型、敏捷的模型等。
4.SWEBoK 的 15 个知识域(knowledge area)
SWEBok的知识领域有软件需求、软件设计、软件建构、软件测试、软件维护与更新、软件构型管理、软件工程管理、软件开发过程、软件工程工具与方法、软件质量。
本课程关注的知识领域有软件需求、软件设计、软件建构、软件测试、软件构型管理、软件开发工程、软件工程工具与方法、软件质量等。
软件需求
软件需求知识领域涉及软件需求的引出、协商、分析、规范和确认。软件行业普遍承认,当这些活动执行得不好时,软件工程项目极易受到攻击。软件需求表示对软件产品的需求和约束,这些需求和约束有助于解决一些实际问题。
软件设计
设计被定义为定义系统或组件的架构、组件、接口和其他特性的过程,以及该过程的结果(IEEE 1991)。软件设计知识域涵盖了设计过程和最终产品。软件设计过程是软件工程生命周期活动,在该活动中分析软件需求,以便对软件的内部结构及其行为进行描述,作为其构建的基础。软件设计(结果)必须描述软件架构——也就是说,软件是如何分解和组织成组件的,以及这些组件之间的接口。它还必须在细节层次上描述组件,以实现其构造。
软件构建
软件构建是指通过详细设计、编码、单元测试、集成测试、调试和验证的组合来详细创建工作软件。软件构建知识领域包括与满足其需求和设计约束的软件程序开发相关的主题。涵盖软件构建基础知识、管理软件构建、构建技术、实践考虑和软件构建工具。
软件测试
测试是一项评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试涉及根据有限的测试用例集上的预期行为对程序行为进行动态验证。这些测试用例是从(通常非常大)执行域中选择的。软件测试知识领域包括软件测试的基础知识、测试技术、人机界面测试和评估、测试相关措施和实际考虑。
软件维护
软件维护包括增强现有的能力,使软件适应新的和修改过的操作环境,以及纠正缺陷。这些类别被称为完善的、适应性的和纠正性的软件维护。软件维护知识领域包括软件维护的基础知识(维护的性质和需要、维护的类别、维护成本);软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护的测量);维护过程;软件维护技术(程序理解、重新设计、逆向工程、重构、软件退役);灾难恢复技术和软件维护工具。
软件配置管理
系统的配置是硬件、固件、软件的功能和/或物理特性,或这些特性的组合。它还可以被视为硬件、固件或软件项的特定版本的集合,根据特定的构建过程进行组合以满足特定的目的。因此,软件配置管理(SCM)是一门在不同的时间点识别系统配置的学科,目的是系统地控制配置的更改,并在整个软件生命周期中保持配置的完整性和可追溯性。软件配置管理知识领域包括对SCM过程的管理;软件配置识别、控制、状态核算、审核;软件发布管理和交付;以及软件配置管理工具。
软件工程管理
软件工程管理包括计划、协调、测量、报告和控制项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理KA包括启动和范围定义(确定和协商需求、可行性分析以及需求的评审和修订);软件项目规划(过程规划、工作量、成本和进度估计、资源分配、风险分析、质量规划);软件项目E投资(测量、报告和控制;采购和供应商合同管理);产品验收;项目绩效的审查和分析;项目结束;以及软件管理工具。
软件工程过程
软件工程KA涉及软件生命周期过程的定义、实现、评估、测量、管理和改进。所涵盖的主题包括过程实施和变更(过程基础设施、过程实施和变更模型以及软件过程管理);过程定义(软件生命周期模型和过程、过程定义注释、过程适应和过程自动化);过程评估模型和方法;度量(过程测量、产品测量、测量技术和测量结果质量)和软件过程工具。
软件工程模型与方法
软件工程模型和方法KA描述了包含多个生命周期阶段的方法;特定于特定生命周期阶段的方法由其他KA涵盖。所涵盖的主题包括建模(软件工程模型的原理和属性;语法与语义与不变量;前提条件、后条件和不变量);模型类型(信息、结构和行为模型);分析(分析正确性、完整性、一致性、质量和交互;可追溯性;和权衡分析);和软件开发方法(启发式方法、形式方法、原型方法和敏捷方法)。
软件质量
软件质量是一个普遍存在的软件生命周期问题,在许多Swebok v3 KAS中都有解决。此外,软件质量KA包括软件质量基础(软件工程文化、软件质量特征、软件质量的价值和成本以及软件质量改进);软件质量管理过程(软件质量保证、验证和确认、审查和审计);以及实际考虑(缺陷描述、软件质量度量和软件质量工具)。
软件工程专业实践
软件工程专业实践涉及软件工程师以专业、负责和道德的方式实践软件工程所必须具备的知识、技能和态度。软件工程专业实践KA涵盖专业性(专业行为、专业协会、软件工程标准、雇佣合同和法律问题);道德规范;群体动力学(团队合作、认知问题复杂性、与利益相关者互动、处理不确定性和模糊性、处理具有多元文化环境);以及沟通技巧。
软件工程经济学
软件工程经济学KA关注于在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。所涵盖的主题包括软件工程经济学基础(提案、现金流、货币时间价值、规划范围、通货膨胀、折旧、重置和退休决策);非营利决策(成本效益分析、优化分析);估算、经济风险和不确定性(估算技术,DEC)风险和不确定性下的ISION);以及多属性决策(价值和测量尺度、补偿和非补偿技术)。
计算基础
计算基础KA涵盖了为软件工程实践提供必要计算背景的基本主题。所涵盖的主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信。
数学基础
数学基础KA涵盖了为软件工程实践提供必要数学背景的基本主题。所涉及的主题包括集合、关系和函数;基本命题和谓词逻辑;证明技术;图和树;离散概率;语法和有限状态机;以及数论。
工程基础
工程基础KA涵盖了为软件工程实践提供必要工程背景的基本主题。涵盖的主题包括经验方法和实验技术;统计分析;测量和度量;工程设计;模拟和建模;以及根本原因分析。
5.简单解释 CMMI 的五个级别
Level 1 - Initial:无序,自发生产模式
Level 2 - Managed:建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
Level 3 - Defined:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
Level 4 - Quantitatively Managed:分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
Level 5 - Optimizing:过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
6.简述 SWEBok 或 CMMI
SWEBok
SWEBok, 即软件工程知识体系指南,它描述了软件工程事件所需要的知识,为开发本科软件工程教育计划打下了基础。IEEE认为,这是软件工程向职业状态演化的关键。
它总共包括10个知识域:软件需求、软件设计、软件构造 、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法、软件质量。
它涉及到的学科有:计算机工程、计算机科学、管理、数学、项目管理、质量管理、软件人类工程系、系统工程。
它有两个目标:(1) 促进世界范围内对软件工程的一致观点;(2)为软件工程确立边界
CMMI
CMMI(Capability Maturity Model for Software / CMM),软件能力成熟度模型,是衡量企业能力成熟与否的模型工具。它一共分为五个层级,分别是初始级、可管理级、已定义级、量化管理级和优化管理级。
软件能力成熟度模型为企业软件工程能力的评估提出了明确的标准,根据团体能力上限的不同自底向上划分出了不同的层级,便于我们准确客观地评测企业能力。
而与此同时,CMMI的层级划分也为企业的未来发展及自身完善明确了方向,根据能力成熟度模型的层级标准,各个企业可以对自身的软件工程流程做出更加严格专业的规范,从而提高其自身能力和竞争力。