1. 软件工程的定义
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
软件工程是应用系统的、规范的、量化的方法来开发、操作和维护软件,是将工程应用到软件开发的系统方法。
2. 解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
软件危机的根源是软件的大量需求与软件生产力效率之间的矛盾,和软件系统的复杂性与软件开发方法之间的矛盾。
软件危机具体表现为以下几个方面:
- 项目运行超出预算
- 项目运行超出时间
- 软件质量低落
- 软件通常不匹配需求
- 项目无法管理且代码难以维护。
软件危机的矛盾是不可解决的,但是可以缓解矛盾。想要克服软件危机,应该正确认识计算机软件的内涵,采用工程项目管理方法实施软件开发的组织管理,采用成熟的软件开发技术、方法和工具。
3. 软件生命周期
软件开发的生命周期是在开发和构建系统时应该遵循的步骤,常包含软件的需求定义与分析、设计、实现、测试、交付与维护等阶段,常见的有瀑布模型、螺旋模型、敏捷模型等。
瀑布模型可以划分为:需求分析、设计、实现、测试、集成、部署、维护
V模型是瀑布模型的变种,允许软件过程中环节的回顾调整。
螺旋模型是一种演进模型,为版本递增软件的快速开发提供了可能,其主要特征为循环地增加系统定义和实现的复杂度而降低风险以及用一组锚点里程碑保证利益获得灵活和满意的系统解决方案。
4. SWEBoK 的 15 个知识域
软件工程实践的知识域:
- Software Requirements (软件需求):表达了对软件产品的需求和约束,这些需求和约束有助于解决一些现实世界的问题。// 其知识域包括软件的获取、协商、分析、验证和规范。
- Software Design (软件设计):设计是定义系统或组件的体系结构、组件、接口和其他特征的过程、以及该过程的结果。其过程还包含了对软件需求进行分析然后生成软件内部结构极其行为的描述,作为构建软件的基础。// 其知识域包括:设计过程和最终产品
- Software Construction (软件构造):通过详细设计、编码、单元测试、集成测试、调试和验证相结合,对工作软件进行详细的构建。// 其知识域包括:软件建设的基本原理;管理软件建设;构建技术;实际考虑;软件构建工具。
- Software Testing (软件测试):一种评估产品质量以及通过识别缺陷来改进产品质量的活动。// 其知识域包括:软件测试的基本原理;测试技术;人机用户界面测试和评估;测试相关方法;实际考虑。
- Software Maintenance (软件维护):包括增强现有的功能,使得软件在新的环境中运行以及修正缺陷。// 其知识域包括:软件维护的基本原理(维护的性质的需求、维护类别、维护成本);软件维护的关键问题(技术问题、管理问题、维护成本估算、软件维护的量度);维护过程;维护技术;灾难恢复技术;软件维护工具。
- Software Configuration Management (软件配置管理):一门在不同时间点识别系统配置的学科。// 其知识域包括:SCM过程的管理;软件配置识别、控制、状态解释、审计;软件发布管理和交付;软件配置管理工具。
- Software Engineering Management (软件工程管理):包括计划、协调、测量、报告和控制一个项目或程序,确保软件的开发和维护是系统的、规范化的、可定量的。
- Software Engineering Process (软件工程过程):软件生命周期的定义、实现、评估、定量、管理和改进。
- Software Engineering Models and Methods (软件工程模型和方法):软件工程技术和管理的原理、原则、方法
- Software Quality (软件质量):是软件生命周期一个普遍存在的关注点。
- Software Engineering Professional Practice (软件工程专业实践):软件工程师必须具备的知识、技能和态度,以便以专业、负责和道德的方式实践软件工程。
5.CMMI的五个级别
- Level 1 完成级,在这一级别,项目的目标得以实现但具有很大的偶然性,无法保证在将来进行同类项目时仍能完成,这一级别的项目实施对人员有很大依赖性。
- Level 2 管理级,建立了基本的项目管理过程来跟踪费用、进度和功能特性,制定了必要的过程纪律,可重复早先类似应用项目取得的成功经验。
- Level 3 定义级,已经将软件管理与工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发与维护软件,软件产品的生产在整个软件过程是可见的。
- Level 4: 量化管理级,分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解和控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
- Level 5: 优化管理级,过程的量化反馈与先进的新思想、新技术促使整个过程不断地改进。
6. 简述SWEBoK或CMMI
SWEBoK即软件工程知识体系,描述了软件工程所需要的11个实践知识背景和4个基础教育背景。SWEBoK是构建软件生产的实践知识要求和基础教育要求,被用于缓解软件危机的两大矛盾。根据SWEBoK来决定如何培养软件工程人才和如何管理软件开发生命周期,可以提高相关领域的人才水平,用更加成熟的技术、更加高效的管理方法来进行软件开发。SWEBoK可以用于描述一个团队或个人的工程规范,但是由于没有级别区别,难以衡量其的工程能力水平。
CMMI即能力成熟度模型集成,用于衡量一个团队或个人的软件工程能力水平。CMMI从开发、服务、采购等多个方面将团队分为5个等级,其中最低级表示没有通过CMMI评估。通过CMMI评估,可以表示该团队的开发过程的成熟度,也给出了该团队更进一步提升路径的建议。CMMI提供的是一个阶梯式的软件工程知识体系框架,这允许团队可以从不成熟开始一步步改进,而不需要一步到位,完善和使用软件生命周期中的所有过程和方法。因此,CMMI是一个更加适合不断成长的团队的开发模型。