QS:
- 软件工程的定义
- 解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
- 软件生命周期
- SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)
- 简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。
- 用自己语言简述 SWEBok 或 CMMI (约200字)
AS:
-
- Software engineering is “(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software,” and “(2) the study of approaches as in (1).” –– IEEE Standard 610.12
- 应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、和维护的工程或进行研究的学科。
-
软件危机(software crisis)是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
-
本质原因:
- 用户需求不明确
- 缺乏正确的理论指导
- 软件开发规模越来越大
- 软件开发复杂度越来越高
- 软件的大量需求与软件生产力效率之间的矛盾
- 软件系统的复杂性与软件开发方法之间的矛盾
-
表现:
- 对软件开发成本和进度的估计常常很不准确。
- 用户对“已完成的”软件系统不满意的现象经常发生。
- 软件产品的质量往往靠不住。
- 软件通常没有适当的文档资料。
- 软件常常是不可维护的。
-
克服的方法:
用现代工程的概念,原理,技术和方法进行计算机软件的开发,管理和维护。- 正确认识计算机软件的内涵(软件≠程序)
- 充分认识到软件开发不是某种个体劳动的神秘技巧,而是一种 组织良好、管理严密、协同配合的工程活动
- 采用成熟的软件开发技术和方法
- 开发和使用适当的软件工具
-
-
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。但随着新的面向对象的设计方法和技术的成熟,软件生命周期设计方法的指导意义正在逐步减少。 生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。软件工程要求每一周期工作的开始只能必须是建立在前一个周期结果“正确”前提上的延续;因此,每一周期都是按“活动 ── 结果 ── 审核 ── 再活动 ── 直至结果正确”循环往复进展的。
软件生命周期的6个阶段及基本任务是:- 问题的定义及规划
此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性 - 需求分析
在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础,同样需求也是整个软件开发过程中不断变化和深入的,因此必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。 - 软件设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计。软件设计一般分为总体设计和详细设计,好的软件设计将为软件程序编写打下良好的基础。 - 程序编码
将软件设计的结果转换为计算机可运行的程序代码,在编码过程中必须要制定统一,符合标准的编写规范,以保证程序的可读性和易维护性,提高程序的运行效率。 - 软件测试
在程序编码完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个过程分单元测试,组装测试以及系统测试3个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 - 运行维护
软件维护是软件生命周期中持续时间最长的阶段。
- 问题的定义及规划
-
- 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 软件质量:解决普遍存在的软件生命周期问题。
- Software Engineering Professional Practice 软件工程专业实践:关注软件工程师必须具备的专业,负责和符合伦理的软件工程知识,技能和态度。
- Software Engineering Economics 软件工程经济学:关注在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。涵盖的主题包括软件工程经济学的基本原理(提案,现金流量,货币时间价值,计划视野,通货膨胀,折旧,替代和退休决策); 非营利性决策(成本效益分析,优化分析); 估计,经济风险和不确定性(估算技术,风险决策和不确定性); 和多属性决策(价值和衡量尺度,补偿和非补偿技术)。
- Computing Foundations 计算基础:提供软件工程实践所需的计算背景。涵盖的主题包括问题解决技术,抽象,算法和复杂性,编程基础,并行和分布式计算的基础知识,计算机组织,操作系统和网络通信。
- Mathematical Foundations 数学基础:提供软件工程实践所必需的数学背景。涵盖的主题包括集合,关系和功能; 基本命题和谓词逻辑; 证明技术; 图形和树木; 离散概率; 语法和有限状态机; 和数论。
- Engineering Foundations 工程基础:盖了提供软件工程实践所必需的工程背景。涵盖的主题包括经验方法和实验技术; 统计分析; 测量和指标; 工程设计; 仿真与建模; 和根本原因分析。
-
CMMI的五个级别:
- 初始级(Initial)
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。 - 可管理级(Managed)
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。 - 已定义级(Defined)
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。 - 量化管理级(Quantitatively Managed)
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。 - 优化管理级(Optimizing)
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
- 初始级(Initial)
- CMMI能力成熟度模型集成主要是用来帮助企业对软件工程的生产过程进行管理和改进,增强开发能力和标准化生产的模型。CMMI的三个最重要的目标,第一个是质量,第二个是时间表,第三就是要用最低的成本。CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。按照CMMI思路的指导,一个企业的软件开发能力将会从各个方面得到提升,朝着标准化、有序化、高效率的方向发展。