系统设计与分析(一)
软件工程的定义
IEEE计算机学会将软件工程定义为:
- (1)应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即将工程应用带软件。
- (2)对(1)中各种方法的研究
解释导致software crisis本质原因、表现,述说克服软件危机的方法
软件危机,是早期计算机科学用于描述在规定时间内编写实用而高效计算机程序困难性的专业术语。
软件危机的本质表现
软件危机是由于计算机能力的迅速增长和无法解决的问题的复杂性造成的。随着软件复杂度的增加,由于现有方法的不足,出现了很多软件问题。
软件危机的表现
软件危机的原因与硬件和软件开发过程的总体复杂性有关。危机表现在几个方面:
- 超支项目
- 项目超时运行
- 软件效率很低
- 软件质量低劣
- 软件往往不符合要求
- 项目无法管理,代码难以维护
- 软件从未交付
软件危机的克服方法
在过去的几十年中,开发了各种各样的过程和方法来改进软件质量管理,例如过程编程和面向对象编程。而软件的发展不仅需要编程问题,更需要系统的软件工程方法。
软件生命周期
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。但随着新的面向对象的设计方法和技术的成熟,软件生命周期设计方法的指导意义正在逐步减少。 生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。软件工程要求每一周期工作的开始只能必须是建立在前一个周期结果“正确”前提上的延续;因此,每一周期都是按“活动 ── 结果 ── 审核 ── 再活动 ── 直至结果正确”循环往复进展的。
SWEBoK的15个知识域
软件需求
软件需求知识领域涉及软件需求的引出、协商、分析、规范和验证。软件行业普遍认为,当这些活动执行得很差时,软件工程项目是非常脆弱的。软件需求表达了对软件产品的需求和约束,这些需求和约束有助于解决一些实际问题。
软件设计
设计被定义为定义系统或组件的体系结构、组件、接口和其他特性的过程,以及[该]过程的结果(IEEE 1991)。软件设计知识领域包括设计过程和最终产品。软件设计过程是软件工程生命周期的活动,在此过程中,软件需求被分析,以产生对软件内部结构及其行为的描述,并作为其构建的基础。软件设计(结果)必须描述软件体系结构——也就是说,软件如何分解和组织成组件以及这些组件之间的接口。它还必须在支持其构造的详细级别上描述组件。
软件构造
软件构造是指通过详细设计、编码、单元测试、集成测试、调试和验证相结合,对工作软件进行详细的创建。软件构建知识领域包括与软件程序开发相关的主题,这些软件程序将满足其需求和设计约束。此知识领域涵盖软件构建基础;管理软件建设;施工技术;实际问题;以及软件构建工具。
软件测试
测试是一种通过识别缺陷来评估产品质量和改进产品质量的活动。软件测试包括在有限的测试用例集中,根据预期的行为对程序的行为进行动态验证。这些测试用例是从(通常非常大的)执行域中选择的。软件测试知识包括软件测试的基础知识;测试技术;人机界面测试与评价;任何跟考试有关的措施;和实际的考虑。
软件维护
软件维护包括增强现有的功能,使软件适应新的和修改过的操作环境,以及纠正缺陷。这些类别被称为完善的、自适应的和纠正的软件维护。软件维护知识领域包括软件维护基础知识(维护的性质和需要、维护的类别、维护的成本);软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护度量);维护过程;软件维护技术(程序理解、再工程、逆向工程、重构、软件退役);灾难恢复技术和软件维护工具。
软件配置管理
系统的配置是硬件、固件、软件或它们的组合的功能和/或物理特征。它还可以看作是根据特定的构建过程组合的特定版本的硬件、固件或软件项的集合,以满足特定的目的。因此,软件配置管理(SCM)是在不同的时间点识别系统配置的规程,目的是系统地控制配置的变更,以及在整个软件生命周期中维护配置的完整性和可跟踪性。软件配置管理知识领域包括对SCM过程的管理;软件配置识别、控制、状态核算、审计;软件发布管理和交付;以及软件配置管理工具。
软件工程管理
软件工程管理包括计划、协调、度量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理KA包括初始化和范围定义(确定和协商需求、可行性分析、需求评审和修订);软件项目规划(过程规划、工作量估算、成本和进度、资源分配、风险分析、质量规划);软件项目制定(测量、报告、控制;采购和供应商合同管理);产品验收;检讨及分析项目表现;项目关闭;以及软件管理工具。
软件工程过程
软件工程知识领域涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。所涵盖的主题包括过程实现和变更(过程基础结构、过程实现和变更的模型以及软件过程管理);过程定义(软件生命周期模型和过程、过程定义符号、过程适应和过程自动化);过程评估模型和方法;测量(过程测量、产品测量、测量技术、测量结果质量);以及软件处理工具。
软件工程模型和方法
软件工程模型和方法知识领域处理包含多个生命周期阶段的方法;特定于特定生命周期阶段的方法由其他知识领域覆盖。涵盖的主题包括建模(软件工程模型的原理和属性;语法、语义和不变量;(前置条件、后置条件和不变量);模型的类型(信息、结构和行为模型);分析(正确性、完整性、一致性、质量和交互性分析;可追溯性;和权衡分析);以及软件开发方法(启发式方法、形式化方法、原型方法和敏捷方法)。
软件质量
软件质量是一个普遍存在的软件生命周期问题,许多SWEBOK V3 ka都解决了这个问题。此外,软件质量知识领域还包括软件质量的基础知识(软件工程文化、软件质量特征、软件质量的价值和成本、软件质量改进);软件质量管理过程(软件质量保证、验证和验证、评审和审核);以及实际的考虑(缺陷描述、软件质量度量和软件质量工具)。
软件工程专业实践
软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以便以专业、负责任和合乎道德的方式实践软件工程。软件工程专业实践知识领域涵盖专业(专业行为、专业社团、软件工程标准、雇佣合同、法律问题);伦理准则;群体动力学(团队合作,认知问题复杂性,与利益相关者互动,处理不确定性和模糊性,处理多元文化环境);和沟通能力。
软件工程经济学
软件工程经济学知识领域关注的是在业务上下文中做出决策,使技术决策与组织的业务目标保持一致。涵盖的主题包括软件工程经济学的基本原理(建议、现金流、金钱的时间价值、规划范围、通货膨胀、折旧、替换和退休决定);非营利性决策(成本效益分析、优化分析);评估、经济风险与不确定性(评估技术、风险与不确定性下的决策);多属性决策(价值和度量尺度、补偿和非补偿技术)。
计算基础
计算基础知识领域涵盖了为软件工程实践提供必要的计算背景的基本主题。主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信。
数学基础
The Mathematical Foundations KA covers fundamental topics that provide the mathematical background necessary for the practice of software engineering. Topics covered include sets, relations, and functions; basic propositional and predicate logic; proof techniques; graphs and trees; discrete probability; grammars and finite state machines; and number theory.
工程基础
工程基础知识领域涵盖了为软件工程实践提供必要的工程背景的基本主题。主题包括经验方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。
简单解释CMMI的五个级别。例如:Level 1 - Initial:无序、自发生产模式
- Level 1 Initial 无序,自发生产模式
- Level 2 Managed 程序用于描述项目特征,并且通常具有反应性
- Level 3 Defined 程序用于描述组织特征,并且通常具有积极主动性
- Level 4 Quantitatively Managed 程序测量与控制过程
- Level 5 Optimizing 关注程序改进
摘自 (https://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration)[维基百科]
用自己语言简述SWEBoK或CMMI
SWEBoK,即软件工程知识体,是一个有关软件工程的国际标准,被用于促进世界范围内对软件工程的一致性观点,阐明软件工程与计算机科学等学科的区别,并刻画软件工程的学科内容和知识体系,为开发课表和个人认证提供基础。SWEBoK同时将软件工程组织为10个知识域,包括软件需求、软件设计等,指导软件工程人才的培养和学科建设。