软件工程
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 。
软件工程危机
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
危机表现
- 软件成本日益增长
- 开发进度难以控制
- 软件质量差
- 软件维护困难
危机原因
- 用户需求不明确
- 缺乏正确的理论指导
- 软件规模越来越大
- 软件复杂度越来越高
解决方法
- 在开发的过程当中,按照软件工程的一般开发流程来,避免一些潜在的危机。
- 做产品的调研、功能开发,在遇到情况的时候可以及时修改。
- 画流程图的时候,用不同的方法进行执行,选择方案。
- 开发的过程当中,向前与向中对比。
- 危机产生时,找到前一个环节的问题,可以避免错误了。
- 最后开发完的bug需要维护人员不断的进行反馈,然后程序再修改,更改版本号。
软件生命周期
软件生命周期是软件的产生直到报废或停止使用的生命周期。旧的解释是周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
SWEBOK
软件工程知识体系指南描述了关于软件工程的普遍接受的知识。SWEBOK有15个知识域(KA),这15个知识领域概括了基本概念,并包括一个指向更详细信息的参考列表。它们分别是:
-
描述软件工程实践的知识域
-
软件需求
- 软件需求KA涉及软件需求的引出、协商、分析、规范和验证。在软件行业中,人们普遍认为,当这些活动执行得不好时,软件工程项目是非常脆弱的。软件需求表达了对软件产品的需求和约束,这些需求和约束有助于解决一些实际问题。
-
软件设计
- 设计被定义为定义系统或组件的体系结构、组件、接口和其他特征的过程,以及该过程的结果。软件设计KA包括设计过程和最终产品。软件设计过程是软件工程生命周期活动,在该活动中,软件需求被分析,以产生对软件内部结构的描述,以及作为构建基础的行为。软件设计(结果)必须描述软件体系结构——即,如何将软件分解和组织成组件以及这些组件之间的接口。它还必须在支持构造的详细级别上描述组件。
-
软件建设
- 软件构建是指通过详细设计、编码、单元测试、集成测试、调试和验证相结合,对工作软件进行详细创建。软件构建KA包括与满足其需求和设计约束的软件程序开发相关的主题。这个KA涵盖了软件构建基础;管理软件建设;施工技术;实际问题;以及软件构建工具。
-
软件测试
- 测试是对产品质量进行评估并通过识别缺陷来改进产品质量的活动。软件测试涉及到在一组有限的测试用例上根据预期行为动态地验证程序的行为。这些测试用例是从(通常非常大的)执行域中选择的。软件测试KA包括软件测试的基础知识;测试技术;人机界面测试与评价;任何跟考试有关的措施;和实际的考虑。
-
软件维护
- 软件维护包括增强现有的功能,使软件适应新的和修改的操作环境,以及纠正缺陷。这些类别被称为完善的、自适应的和纠正的软件维护。软件维修KA包括软件维修的基本知识(维修的性质和需要、维修的类别、维修费用);软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护度量);维护过程;软件维护技术(程序理解、再工程、逆向工程、重构、软件退役);灾难恢复技术和软件维护工具。
-
软件配置管理
- 系统的配置是硬件、固件、软件或它们的组合的功能和/或物理特征。它还可以看作是硬件、固件或软件项目的特定版本的集合,这些版本根据特定的构建过程组合在一起,以服务于特定的目的。因此,软件配置管理(SCM)是在不同的时间点识别系统配置的规程,以便系统地控制配置的更改,并在整个软件生命周期中维护配置的完整性和可追溯性。软件配置管理KA包括单片机过程的管理;软件配置识别、控制、状态核算、审计;软件发布管理和交付;以及软件配置管理工具。
-
软件工程管理
- 软件工程管理包括计划、协调、测量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理KA包括初始化和范围定义(确定和协商需求、可行性分析以及需求的评审和修订);软件项目规划(过程规划、工作量、成本和进度的估计、资源分配、风险分析、质量规划);软件项目制定(测量、报告和控制;采购和供应商合同管理);产品验收;项目绩效的评审与分析;项目关闭;以及软件管理工具。
-
软件工程过程
- 软件工程KA涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。所涵盖的主题包括过程实现和变更(过程基础结构、过程实现和变更的模型以及软件过程管理);过程定义(软件生命周期模型和过程,过程定义、过程适应和过程自动化的符号);过程评估模型和方法;测量(过程测量、产品测量、测量技术、测量结果质量);以及软件过程工具。
-
软件工程模型和方法
- 软件工程模型和方法KA解决了包含多个生命周期阶段的方法;针对特定生命周期阶段的方法由其他ka覆盖。所涵盖的主题包括建模(软件工程模型的原理和属性;语法、语义、不变量;(前置条件、后置条件和不变量);模型的类型(信息、结构和行为模型);分析(对正确性、完整性、一致性、质量和交互进行分析;可追溯性;和权衡分析);以及软件开发方法(启发式方法、正式方法、原型方法和敏捷方法)。
-
软件质量
- 软件质量是一个普遍存在的软件生命周期问题,在许多SWEBOK V3 ka中都得到了解决。此外,软件质量KA还包括软件质量的基础(软件工程文化、软件质量特征、软件质量的价值和成本、软件质量改进);软件质量管理过程(软件质量保证、验证和验证、评审和审计);以及实际的考虑(缺陷特性、软件质量度量和软件质量工具)。
-
软件工程专业实践
- 软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以一种专业、负责和道德的方式来实践软件工程。软件工程专业实践KA涵盖专业(专业行为、专业协会、软件工程标准、雇佣合同、法律问题);伦理准则;团队动态(在团队中工作,认知问题的复杂性,与利益相关者的互动,处理不确定性和模糊性,处理多元文化环境);和沟通能力。
-
-
描述软件工程教育需要的知识域
-
软件工程经济学
- 软件工程经济学KA关注于在业务上下文中做出决策,以使技术决策与组织的业务目标保持一致。所涵盖的主题包括软件工程经济学的基本原理(建议、现金流量、金钱的时间价值、规划期限、通货膨胀、折旧、重置和退休决定);非营利性决策(成本效益分析、优化分析);评估、经济风险和不确定性(评估技术、风险和不确定性下的决策);以及多属性决策(值和度量尺度、补偿和非补偿技术)。
-
计算基础
- 计算基础KA涵盖了为软件工程实践提供必要的计算背景的基本主题。主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。
-
数学基础
- 数学基础KA涵盖了为软件工程实践提供必要数学背景的基本主题。主题包括集合、关系和函数;基本命题逻辑和谓词逻辑;证明技术;图表和树木;离散型概率;语法和有限状态机;和数论。
-
工程基础
- 工程基础KA涵盖了为软件工程实践提供必要的工程背景的基本主题。所涵盖的主题包括实证方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。
-
软件工程经济学
CMMI
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成,计划把现在所有现存实施的与即将被发展出来的各种能力成熟度模型,集成到一个框架中去,申请此认证的前提条件是该企业具有有效的软件企业认定证书。
CMMI的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其所依据的想法是:只要集中精力持续努力去建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件开发中的困难。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。
CMMI 分为5个等级:
- 初始级:软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
- 可管理级:建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
- 已定义级:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
- 量化管理级:分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
- 优化管理级:过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
参考
- An Overview of the SWEBOK Guide
- Software engineering
- 《现代软件工程讲义》
- Fred Brooks《人月神话》