软件工程将系统的、规范的、可度量的方法应用于软件的开发、运行和维护的过程。 将工程化应用于软件开发过程中,对上述方法进行研究。
软件生命周期(Life Cycle):在时间维度,对软件项目任务进行划分,又称为软件开发过程。
计划
需求分析
设计
实现
测试
维护
软件需求知识领域涉及软件需求的建模、协商、分析、规范和确认。软件行业普遍认为,当这些活动执行得不好时,软件工程项目极易受到攻击。软件需求包含了对软件产品的需求和约束,这些需求和约束有助于解决一些实际问题。
设计的定义是定义系统或组件的架构、组件、接口和其他特性的过程,以及过程的结果(IEEE 1991)。软件设计知识领域涵盖了设计过程和最终产品。软件设计过程在软件工程生命周期活动中分析软件需求,以便对软件的内部结构及其行为进行描述,作为其构建的基础。软件设计结果必须描述软件架构——也就是说,软件是如何分解和组织成组件的,以及这些组件之间的接口。它还必须在细节层次上描述组件,以实现其构造。
软件构建是指通过详细设计、编码、单元测试、集成测试、调试和验证的组合来详细创建工作软件。软件构建知识领域包括与满足其需求和设计约束的软件程序开发相关的主题。本知识领域涵盖软件构建基础知识、软件构建管理、构建技术、实践考虑和软件构建工具。
测试是一项评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试涉及根据有限的测试用例集上的预期行为对程序行为进行动态验证。这些测试用例是从(通常非常大)执行域中选择的。软件测试知识领域包括软件测试的基础知识、测试技术、人机界面测试和评估、测试相关措施和实际考虑。
软件维护包括增强现有的能力,使软件适应新的和修改过的操作环境,以及纠正缺陷。这些类别被称为完善的、适应性的和纠正性的软件维护。软件维护知识领域包括软件维护的基础知识(维护的性质和需要、维护的类别、维护成本),软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护的测量),维护过程,软件维护技术(程序理解、重新设计、逆向工程、重构、软件报废),灾难恢复技术和软件维护工具。
系统的配置是硬件、固件、软件的功能和/或物理特性(或特性组合)。它还可以被视为硬件、固件或软件项的特定版本的集合,根据特定的构建过程进行组合以满足特定的目的。因此,软件配置管理(SCM)是一门在不同的时间点识别系统配置的学科,目的是系统地控制配置的更改,并在整个软件生命周期中保持配置的完整性和可追溯性。软件配置管理知识领域包括对SCM过程的管理,软件配置识别、控制、状态核算、审核,软件发布管理和交付,以及软件配置管理工具。
软件工程管理包括计划、协调、测量、报告和控制项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理知识领域包括建模和范围定义(确定和协商需求、可行性分析以及需求的评审和修订),软件项目策划(过程策划、工作量估算、成本和进度、资源分配、风险分析、质量策划),软件项目制定(测量、报告和控制,采购和供应商合同管理),产品验收,项目绩效审查和分析,项目结束,软件管理工具。
软件工程知识领域涉及软件生命周期过程的定义、实现、评估、测量、管理和改进。所涵盖的主题包括过程实施和变更(过程基础设施、过程实施和变更模型以及软件过程管理),过程定义(软件生命周期模型和过程、过程定义注释、过程适应和过程自动化),过程评估模型和方法,测量(过程测量、产品测量、测量技术和测量结果质量),以及软件过程工具。
软件工程模型和方法知识领域描述了包含多个生命周期阶段的方法,对于特定的生命周期阶段的方法由其他知识领域涵盖。所涵盖的主题包括建模(软件工程模型的原理和属性,语法与语义与不变量,前提条件、后条件和不变量),模型类型(信息、结构和行为模型),分析(分析正确性、完整性、一致性、质量和交互,可追溯性,权衡分析),以及软件开发方法(启发式方法、形式方法、原型方法和敏捷方法)。
软件质量是一个普遍存在的软件生命周期问题,在Swebok v3 知识领域s中很多都有解决。此外,软件质量知识领域包括软件质量基础(软件工程文化、软件质量特征、软件质量的价值和成本以及软件质量改进),软件质量管理过程(软件质量保证、验证和确认、审查和审计),实际考虑(缺陷描述、软件质量度量和软件质量工具)
软件工程专业实践涉及软件工程师以专业、负责和道德的方式实践软件工程所必须具备的知识、技能和态度。软件工程专业实践知识领域涵盖专业性(专业行为、专业协会、软件工程标准、雇佣合同和法律问题)、道德规范、群体动态(团队合作、认知问题复杂性、与利益相关者互动、处理不确定性和模糊性,处理多元文化环境),以及沟通技巧。
软件工程经济学知识领域关注于在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。所涵盖的主题包括软件工程经济学基础(提案、现金流、货币时间价值、规划范围、通货膨胀、折旧、重置和退休决策),非营利决策(成本效益分析、优化分析),估算、经济风险和不确定性(估算技术,风险和不确定性下的决策),以及多属性决策(价值和测量尺度、补偿和非补偿技术)。
计算基础知识领域涵盖了为软件工程实践提供必要计算背景的基本主题。所涵盖的主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信。
数学基础知识领域涵盖了为软件工程实践提供必要数学背景的基本主题。所涉及的主题包括集合、关系和函数,基本命题和谓词逻辑,证明技术,图和树,离散概率,语法和有限状态机,以及数论。
工程基础知识领域涵盖了为软件工程实践提供必要工程背景的基本主题。涵盖的主题包括经验方法和实验技术,统计分析,测量和度量,工程设计,模拟和建模,以及根本原因分析。
Level 1 - Initial:无序,自发生产模式。
Level 2 - Managed:过程以项目为特征,通常是被动的
Level 3 - Defined:过程以组织为特征,具有前瞻性。
Level 4 - Quantitatively Managed:过程是可度量的、可控的。
Level 5 - Optimizing:注重过程的提升和改进。
CMMI 全称为 Capability Maturity Model for Software(软件能力成熟度模型),顾名思义,这个模型最重要的作用就是用于判定开发企业的系统成熟度,分了5个级别(在2018年全新版本中取消了这一种分类方法)
对于企业来说,因为资金、时间等现实因素,往往是不能和SWEBok里要求的那样做到十全十美,所以研究CMMI,用于评估企业的能力,当然,这对于企业的提升也指明了方向。
CMMI是由美国国防部与卡内基-梅隆大学和美国国防工业协会共同开发和研制的。CMMI是一套融合多学科的、可扩充的产品集合,其研制的初步动机是为了利用两个或多个单一学科的模型实现一个组织的集成化过程改进。
PSP 各个阶段 | 自己预估的时间(分钟) | 实际的记录(分钟) |
---|---|---|
计划: 明确需求和其他因素,估计以下的各个任务需要多少时间 | (填在计划阶段花费的时间) | (此项应该和预估值一致) |
开发 (包括下面 8 项子任务) | (以下都填预估值) | (以下都填实际花费值) |
· 需求分析 (包括学习新技术、新工具的时间) | ||
· 生成设计文档 (整体框架的设计,各模块的接口,用时序图,快速原型等方法) | ||
· 设计复审 (和同事审核设计文档,或者自己复审) | ||
· 代码规范 (为目前的开发制定或选择合适的规范) | ||
· 具体设计(用伪代码,流程图等方法来设计具体模块) | ||
· 具体编码 | ||
· 代码复审 | ||
· 测试(自我测试,修改代码,提交修改) | ||
报告 | ||
测试报告(发现了多少bug,修复了多少) | ||
计算工作量 (多少行代码,多少次签入,多少测试用例,其他工作量) | ||
事后总结, 并提出改进计划 (包括写文档、博客的时间) | ||
总共花费的时间 (分钟) |
需要技能有:
如何统计每项数据:
对于每一个过程,小组内的每个成员记录自己的花费的时间,然后相加。单位是人·小时。