文章目录
1. 软件工程的定义
软件工程并没有一个统一,权威的定义,很多专家,学者和机构都有自己的定义
IEEE标准610.12关于软件工程的定义是:1.软件工程是将系统化的,严谨的,可度量性的方法应用于软件的开发,运行和维护,也就是软件的工程化。 2.对1提到的方法的研究
2. 解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
导致软件危机的原因是快速增长的计算机能力和越来越高的可能要处理的问题的复杂性。通俗来说就是编程人员无法充分利用增长的计算机能力,落后的软件生产方式无法满足迅速增长的计算机软件需求。
本质原因是软件生产的这种知识密集和人力密集的特点
软件危机表现在
- 项目运行超出预算
- 项目运行超时
- 软件效率低下
- 软件质量低下
- 软件通常无法匹配需求
- 项目无法管理且代码难以维护
- 软件从未发行交付
克服软件危机的方法
采用软件工程方法建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动以期达到降低软件生产成本、改进软件产品质量、提高软件生产率水平的目标,克服软件危机。
3. 软件生命周期
计算机软件有一个孕育、诞生、成长、成熟、衰亡的生存过程,这样的过程称为软件的生命周期。软件生命周期一般包括可行性分析与计划、需求分析、设计 (概要设计和详细设计)、编码实现、测试、运行与维护等活动。
软件生命周期的六个阶段包括:可行性分析与计划阶段,需求分析阶段,设计阶段,实现阶段,测试阶段,运行与维护阶段
软件开发过程一般应该采用某种类型的软件生命周期模型,常见的模型包括瀑布模型,原型模型等
4. SWEBoK 的 15 个知识域
- 描述软件工程实践的知识域:
-
软件需求
软件需求知识域涉及软件需求的引出、协商、分析、规范和验证。软件行业普遍认为,当这些活动表现不佳时,软件工程项目是非常脆弱的。软件需求表达了对软件产品的需求和约束,这些需求和约束有助于解决一些实际问题。 -
软件设计
软件设计是定义系统或组件的体系结构、组件、接口和其他特性的过程,以及该过程的结果(IEEE 1991)。软件设计知识域包括设计过程和最终产品。软件设计过程是软件工程生命周期的活动,在此过程中,进行分析软件需求,描述软件内部结构及其行为,以作为其构建的基础。软件设计的结果必须描述软件体系结构——也就是说,软件如何分解和组成组件以及这些组件之间的接口。它还必须详细描述支持其构造的组件 -
软件建设
软件建设是指通过详细设计、编码、单元测试、集成测试、调试和验证,对工作软件进行详细的创建。软件构建知识域与开发满足需求和设计约束的软件程序相关。本知识域涵盖了软件构建的基础;管理软件建设;施工技术;实际问题;以及软件构建工具。 -
软件测试
测试是一种通过识别缺陷来评估产品质量和改进产品质量的活动。软件测试包括在有限的测试用例集中,根据预期的行为对程序的行为进行动态验证。这些测试用例是从(通常非常大的)执行域中选择的。软件测试知识域包括软件测试的基础知识,测试技术,人机界面测试与评价,与考试有关的措施,和实际的考虑。 -
软件维护
软件维护包括增强现有的功能,使软件适应新的和修改过的操作环境,以及纠正缺陷。这些类别被称为完善的、自适应的和纠正的软件维护。软件维修知识域包括软件维修的基本知识(维修的性质和需要、维修类别、维修费用);软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护度量);维护过程;软件维护技术(程序理解、再工程、逆向工程、重构、软件退役);灾难恢复技术和软件维护工具。 -
软件配置管理
系统的配置是硬件、固件、软件或这些的组合的功能和/或物理特性。它还可以看作是根据特定的构建过程组合的特定版本的硬件、固件或软件项的以满足特定的目的的集合。软件配置管理(SCM)是在不同的时间点识别系统配置的规程,目的是系统地控制配置的变更,以及在整个软件生命周期中维护配置的完整性和可跟踪性。软件配置管理知识域包括对SCM过程的管理;软件配置识别、控制、状态核算、审计;软件发布管理与交付;和软件配置管理工具。 -
软件工程管理
软件工程管理包括计划、协调、度量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理KA包括初始化和范围定义(确定和协商需求、可行性分析、需求评审和修订);软件项目规划(过程规划、工作量估算、成本和进度、资源分配、风险分析、质量规划);软件项目制定(测量、报告、控制;采购和供应商合同管理);产品验收;检讨及分析项目表现;项目关闭;以及软件管理工具。 -
软件工程过程
软件工程知识域涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。涵盖的主题包括过程实现和变更(过程基础结构、过程实现和变更的模型以及软件过程管理);过程定义(软件生命周期模型和过程、过程定义符号、过程适应和过程自动化);过程评估模型和方法;测量(过程测量、产品测量、测量技术、测量结果质量);以及软件处理工具。 -
软件工程模型和方法
软件工程模型和方法知识域解决了包含多个生命周期阶段的方法;特定于特定生命周期阶段的方法由其他知识域覆盖。涵盖的主题包括建模(软件工程模型的原理和属性;语法、语义和不变量;前置条件、后置条件和不变量);模型的类型(信息、结构和行为模型);分析(正确性、完整性、一致性、质量和交互性分析;可追溯性;和权衡分析);以及软件开发方法(启发式方法、形式化方法、原型方法和敏捷方法)。 -
软件质量
软件质量是一个普遍存在的软件生命周期问题,许多SWEBOK V3 知识域都解决了这个问题。此外,软件质量KA包括软件质量的基础(软件工程文化、软件质量特征、软件质量的价值和成本、软件质量改进);软件质量管理过程(软件质量保证、验证和验证、评审和审核);以及实际的考虑(缺陷描述、软件质量度量和软件质量工具)。 -
软件工程专业实践
软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以便以专业、负责任和合乎道德的方式实践软件工程。软件工程专业实践知识域涵盖专业(专业行为、专业社团、软件工程标准、雇佣合同、法律问题);伦理准则;群体动力学(团队合作,认知问题复杂性,与利益相关者互动,处理不确定性和模糊性,处理多元文化环境);和沟通能力。
- 描述软件工程教育需求的知识域
-
软件工程经济学
软件工程经济学知识域关注的是在业务上下文中做出决策,使技术决策与组织的业务目标保持一致。其涵盖的主题包括软件工程经济学的基本原理(建议、现金流、金钱的时间价值、规划范围、通货膨胀、折旧、替换和退休决定);非营利性决策(成本效益分析、优化分析);评估、经济风险与不确定性(评估技术、风险与不确定性下的决策);多属性决策(价值和度量尺度、补偿和非补偿技术)。 -
计算基础
计算基础知识域涵盖了为软件工程实践提供必要的计算背景的基本主题。这些主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信。 -
数学基础
数学基础知识域涵盖了为软件工程实践提供必要的数学背景的基本主题。这些主题包括集合、关系和函数;基本命题与谓词逻辑;证明技术;图表和树木;离散型概率;语法和有限状态机;和数论。 -
工程基础
工程基础知识域涵盖了为软件工程实践提供必要的工程背景的基本主题。这些主题包括经验方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。
5. 简单解释 CMMI 的五个级别
CMMI 的五个级别
-
Level 1 - 初始级(Initial)
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的 -
Level 2 - 可重复级/受管理级(Repeatable/Managed)
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。 -
Level 3 - 已定义级(Defined)
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。 -
Level 4 - 量化管理级(Quantitatively Managed)
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。 -
Level 5 - 优化管理级(Optimizing)
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
6. 用自己语言简述 SWEBok 或 CMMI (约200字)
能力成熟度模型集成(Capability Maturity Model Integration,简称CMMI)是一个过程级的改进培训和评估程序,它可以用于指导跨项目,部门或整个组织的过程改进,帮助企业或组织改进生产过程,并鼓励减少软件、产品和服务开发风险的高效生产行为。CMMI使用五个评级来评估企业和组织:初始级,已管理级,已定义级,量化管理级和优化管理级。很多公司以获得高等级的CMMI认证为荣,CMMI也确实提高了公司价值,体现在更规范的开发流程,有利于成本控制,提高质量和效率,高认证使公司竞争更有优势等
虽然CMMI起源于软件工程,但如今已经涵盖包括硬件产品的开发、各种服务的交付等各个方面,而不特定于软件工程。