一、软件工程的定义
软件工程是将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。软件工程是强调使用生存周期方法和各种结构分析及设计方法的技术。
二、解释导致 software crisis 本质原因、表现,述说克服软件危机的方法
本质原因:
- complexity 复杂性
- conformity 一致性
- changeability 可变性
- invisibility 不可视性
表现:
- 项目运行超预算
- 项目运行时间过长
- 软件效率很低
- 软件质量很差
- 软件通常不符合要求
- 项目难以管理,代码难以维护
- 软件从未交付过
克服方法:
- 建立软件工程知识体系(SWEBoK),指导软件工程人才的培养与学科建设。
- 建立能力成熟度模型集成(CMMI),用于度量一个企业的软件工程能力。
- 建立软件工程相关标准。例如ISO 9000 系列 质量管理体系。基本思想是通过标准化生产行为,保障并提升产品质量。其核心是 PDCA 循环模型的建立与实施。
- 尝试各种实践管理工具。
三、软件生命周期
- 软件分析时期:问题定义、可行性研究、需求分析
- 软件设计时期:总体设计、详细设计
- 编码与测试时期:编码、测试
- 运行与维护时期
四、SWEBoK的15个知识域
- Software requirements 软件需求:表示在实际问题中,对软件产品很重要的一些要求和约束。软件需求KA重点关注软件需求的启发,协商,分析,规范和验证。
- Software design 软件设计:软件工程最核心的内容。软件设计由软件体系结构设计、软件详细设计两种活动组成。它涉及软件体系结构、构件、接口,还设计软件设计质量分析和评估、软件设计的表示、软件设计策略和方法等。
- Software construction 软件构造:软件构建是指通过详细设计、编码、单元测试、集成测试、调试和验证的组合来详细创建工作。本KA涵盖软件构建基础知识、管理软件构建、构建技术、实践考虑和软件构建工具。
- Software testing 软件测试:软件生存周期的重要部分,涉及测试标准、技术、度量和测试过程。测试的目的是标识缺陷和问题,改善产品质量。软件测试覆盖整个软件开发过程。正确的软件工程质量观是预防、避免缺陷和问题。测试的终点是建立一个有限的测试用例集,动态地验证程序是否达到预期行为。
- Software maintenance 软件维护:软件维护KA包括软件维护的基础知识;软件维护中的关键问题;维护过程;软件维护技术;灾难恢复技术和软件维护工具。
- Software configuration management 软件配置管理:是一种标识、组织和控制修改的技术,维护整个系统生命周期中软件配置的一致性和可追踪性。内容包括配置管理过程的管理、软件配置鉴别、配置管理控制管理、配置管理状态记录、配置管理审计、软件发布和交付管理。
- Software engineering management 软件工程管理:软件工程管理KA包括初步和范围的定义;软件项目规划;软件项目制定;产品验收;项目绩效的审查和分析;项目结束;以及软件管理工具。
- Software engineering process 软件工程进程:软件工程进程KA主要涵盖过程实施和变更;过程定义;过程评估模型和方法;测量;软件过程工具。
- Software engineering models and methods 软件工程模型和方法:软件工程模型和方法KA描述了包含多个生命周期阶段的方法,其涵盖的主题包括建模;模型类型;分析;软件开发方法。
- Software quality 软件质量:软件质量是一个普遍存在的软件生命周期问题。软件质量KA包括软件质量的基础知识; 软件质量管理流程; 以及实用性考虑。
- Software engineering professional practice 软件工程专业训练:软件工程专业训练关注软件工程师必须具备的专业,负责和道德的软件工程知识,技能和态度。该KA涵盖专业性;道德规范;群体动力学;以及沟通技巧。
- Software engineering economics 软件工程经济学:软件工程经济学KA关注的是在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。其涵盖了软件工程经济学基础;非营利决策;评估经济风险和不确定性;以及多属性决策。
- Computing foundations 计算基础:计算基础KA涵盖了提供软件工程实践所需的计算背景的基础主题。包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信。
- Mathematical foundations 数学基础:数学基础KA涵盖了提供软件工程实践所必需的数学背景的基础主题。包括集合、关系和函数;基本命题和谓词逻辑;证明技术;图和树;离散概率;语法和有限状态机;以及数论。
- Engineering foundations 工程基础:工程基础KA涵盖了提供软件工程实践所必需的工程背景的基础主题。包括经验方法和实验技术;统计分析;测量和度量;工程设计;模拟和建模;以及根本原因分析。
五、简单解释 CMMI 的五个级别
- Level 1 - Initial:无序,自发生产模式。
- Level 2 - Managed:管理,以项目为特征,被动生产模式。
- Level 3 - Defined:定义,以项目为特征,主动生产模式。
- Level 4 - Quantitatively Managed:定量管理,项目可度量,可控制生产模式。
- Level 5 - Optimizing:优化,注重项目过程发展的生产模式。
六、用自己语言简述 SWEBok 或 CMMI
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成。开发者计划把现在所有现存实施的与即将被发展出来的各种能力成熟度模型,集成到一个框架中去,其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其所依据的想法是:只要集中精力持续努力去建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件开发中的困难