软件工程的定义
- IEEE的定义:将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
- ISO的定义:软件工程过程是将输入转化为输出的一组彼此相关的资源和活动。
- wiki的定义:软件工程是软件开发领域里对工程方法的系统应用。
- 德国计算机学家BarryBoehm的定义:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
- 我的理解:将工程化的方法应用于软件开发、运行、维护, 并提供规范系统的操作流程和衡量标准。
软件危机
本质原因
- 落后的软件生产方式无法满足迅速增长的计算机软件需求
- 计算机的计算能力的极速发展
- 软件复杂性越来越大、变化越来越快
表现
- 开发进度和成本难以控制
- 产品功能难以满足
- 产品质量无法保证
- 项目难以管理,代码难以维护
- 软件文档不完备
克服方法
- 利用软件工程克服软件危机,构建生产软件的方法与知识体系。
- 利用软件工程(含概念、原则、方法、技术和工具)指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。
软件生命周期
定义
在时间维度,对软件项目任务进行划分,又成为软件开发过程。
常见模型
- 瀑布模型
- 螺旋模型
- 敏捷开发
SWEBoK 的 15 个知识域
软件工程的时间知识域
- 软件需求:涉及软件需求的引出、协商、分析、规范和验证
- 软件设计:软件设计过程是软件工程生命周期活动,在该活动中,软件需求被分析,以产生对软件内部结构及其行为的描述,这些描述将作为软件构建的基础。
- 软件构造:软件构建是指通过详细设计、编码、单元测试、集成测试、调试和验证相结合,对工作软件进行详细创建。
- 软件测试:测试是对产品质量进行评估并通过识别缺陷来改进产品质量的活动。
- 软件维护:软件维护包括增强现有的功能,使软件适应新的和修改的操作环境,以及纠正缺陷。
- 软件配置管理:系统的配置是硬件、固件、软件或它们的组合的功能和/或物理特征。它还可以看作是硬件、固件或软件项目的特定版本的集合,这些版本根据特定的构建过程组合在一起,以服务于特定的目的。
- 软件工程管理:软件工程管理包括计划、协调、测量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。
- 软件工程过程:软件工程KA涉及软件生命周期过程的定义、实现、评估、度量、管理和改进
- 软件工程模型和方法:软件工程模型和方法KA解决了包含多个生命周期阶段的方法;针对特定生命周期阶段的方法由其他ka覆盖。
- 软件质量:软件质量是一个普遍存在的软件生命周期问题,此外,软件质量KA还包括软件质量的基础(软件工程文化、软件质量特征、软件质量的价值和成本、软件质量改进)
- 软件工程职业实践:软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以一种专业、负责和道德的方式来实践软件工程。
软件工程教育基础知识域
- 软件工程经济学:软件工程经济学KA关注于在业务上下文中做出决策,以使技术决策与组织的业务目标保持一致。
- 计算基础:计算基础KA涵盖了为软件工程实践提供必要的计算背景的基本主题。
- 数学基础:数学基础KA涵盖了为软件工程实践提供必要数学背景的基本主题。
- 工程基础:工程基础KA涵盖了为软件工程实践提供必要的工程背景的基本主题。
CMMI 的五个级别
- 初始级:软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
- 可重复级:建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
- 已定义级:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
- 量化管理级:分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
- 优化管理级:过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
简要描述SEWBOK
- SWEBOK是国际IEEE组织发布的针对软件工程知识领域研究与实践的权威指南,专注于软件工程领域的研发、实践、标准、文献等方面的权威指南。涉及7个相关学科(计算机工程、计算机科学、管理、数学、项目管理、质量管理、系统工程),15个知识域。
- 其目标为:
- 促进世界范围内对软件工程的一致观点
- 阐明软件工程相对其他学科的位置并明确他们的分界
- 刻画软件工程学科的内容
- 提供使用知识体系的主题
- 为开发课程和个人认证与许可材料,提供一个基础