系统分析与设计-软件的本质与软件工程科学

本文探讨了软件工程的定义,分析了软件危机的原因和表现,并提出克服危机的方法。介绍了软件生命周期、SWEBoK的15个知识域,以及CMMI的五个级别,旨在理解软件工程的系统性与科学性。
摘要由CSDN通过智能技术生成

系统分析与设计-软件的本质与软件工程科学

软件工程的定义

  • IEEE(普遍使用)
    软件工程是:
    1.将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件
    2.在1中所述方法的研究

  • 美国卡内基梅隆大学软件工程研究所(SEI)
    软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题

  • 最早的定义由F.L. Bauer给出
    软件工程是为了经济地获得能够在实际机器上高效运行的、可靠的软件而建立和应用一系列坚实的软件工程原则

从概念上看,软件工程覆盖了软件生命周期中所有的工程方法、技术和工具,着重体现于在产生软件过程中所采用的方法和管理体系。

软件危机

原因

由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,所以落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。产生软件危机的原因主要如下有两方面:

  • 与软件本身的特点有关
    在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件质量也较难评价,软件质量是根据与每一个组成部分不同实体的质量紧密相关,因此管理和控制软件开发过程十分困难。当人们的应用需求变化发展的时候,往往要求通过改变软件来使计算机系统满足新的需求,维护用户业务的延续性。

  • 软件开发人员的弱点
    软件是开发人员的思维结果所以最后软件的质量与开发人员的水平有关,而且一些大型软件需要多人合作开发,在开发人员之间的沟通和协调也可能导致软件的错误。计算机技术和应用发展迅速,软件开发人员需要不断适应新的硬件更新和扩展自己的知识等。

表现

出现的软件危机主要表现在:

  1. 软件产品质量低劣,可靠性差,系统正确性难以保证。
  2. 软件生产率低,不能满足需要。软件的开发费用或者进度出现失控,费用超支进度拖延等使得软件质量无法保证。
  3. 生产的软件难以维护,因为缺乏相应的文档资料,程序的错误难以定位和修正。
克服软件危机的方法

软件工程从硬件工程和其他工程中吸取了很多成功经验,明确提出了软件生命周期的模型,发展了许多软件开发与维护阶段适用的技巧与方法,并用于实践中。

  1. 在软件开发过程中研制和使用软件工具,用来辅助进行软件项目管理与技术生产,将软件生命周期各阶段使用的软件工具整合为整体,使其能够连续支持软件开发与维护全过程的集成化软件支持环境,从管理和技术两方面解决软件危机。

  2. 人工智能与软件工程的结合使程序设计进一步自动化,基于程序变换、自动生成和可重用软件等新技术也取得一定进展。软件标准化与可重用性也使得减缓软件危机。

软件生命周期

在时间维度,对软件项目任务进行划分,又成为软件开发过程。常见有瀑布模型、螺旋模型、敏捷的模型等。

软件生命周期是按开发软件的规模和复杂程度,从时间上把软件开发的整个过程进行分解,形成相对独立的几个阶段,每个阶段又分解成几个具体的任务,然后按规定顺序依次完成各阶段的任务并规定一套标准的文档作为各个阶段的开发成果,最后生产出高质量的软件。

SWEBoK 的 15 个知识域

为了克服软件危机,IEEE Computer Society 构建软件生产的最佳实践与相关知识的框架,称为 Software Engineering Body of Knowledge。指导软件工程人才的培养与学科建设。
2014 V3 版的 SWEBoK 将知识分为软件工程实践和基础教育两个部分,共 15 个知识域(knowledge areas / KAs)。Software Requirements,Software Design 是其中最重要的两个领域。

2014 V3 版的 SWEBoK 其中包括了11个软件工程实践知识域:

  • 软件需求
    软件需求表示对软件产品的需求和一些约束,有助于解决一些实际问题。

  • 软件设计
    软件设计是定义软件系统或组件的架构,组件,接口和其他特性。需要设计软件架构,例如组件如何分解与组织,以及组件之间的接口。

  • 软件构造
    软件构造是指通过详细设计、编码、单元测试、集成测试、调试和验证的组合来详细构造软件。

  • 软件测试
    软件测试是一项评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试根据有限的测试用例集上的预期行为对程序执行结果进行动态验证。

  • 软件维护
    软件维护包括增强现有的能力,使软件适应新的和修改过的操作环境,以及纠正缺陷。

  • 软件配置管理
    软件配置管理在不同的时刻识别系统配置,目的是系统地控制配置的更改,并在整个软件生命周期中保持配置的完整性和可追溯性。

  • 软件工程管理
    软件工程管理包括计划、协调、测量、报告和控制项目或程序,以确保软件的开发和维护是系统的、有纪律的和可量化的。

  • 软件工程过程
    软件工程过程涉及软件生命周期过程的定义、实现、评估、测量、管理和改进。

  • 软件工程模型与方法
    软件工程模型和方法描述了包含多个生命周期阶段的方法。包括建模、模型类型、分析和软件开发方法等。

  • 软件质量
    软件质量包括软件质量基础(软件工程文化、软件质量特征、软件质量的价值和成本以及软件质量改进),软件质量管理过程以及实用性等。

  • 软件工程职业实践
    软件工程职业实践涉及软件工程师以专业、负责和道德的方式实践软件工程所必须具备的知识、技能和态度。

2014 V3 版的 SWEBoK 其中包括了4个软件工程教育基础知识域:

  • 软件工程经济学
    软件工程经济学主要在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。包括软件工程经济学基础,估算、经济风险和不确定性等。

  • 计算基础
    计算基础为软件工程实践提供必要计算基础知识。包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信等。

  • 数学基础
    数学基础为软件工程实践提供必要数学背景的基本主题。包括集合、关系和函数,基本命题和谓词逻辑,证明技术,图和树,离散概率,语法和有限状态机,以及数论。

  • 工程基础
    工程基础为软件工程实践提供必要工程知识。包括经验方法和实验技术,统计分析,测量和度量,工程设计,模拟和建模等。

简单解释 CMMI 的五个级别

  1. Level 1 - Initial:无序、随机和混乱的,组织通常没有一个稳定的环境,自发生产模式。
  2. Level 2 - Managed:组织中的项目确保需求得到管理,过程已经计划、执行、度量和控制。
  3. Level 3 - Defined:用标准、规程、工具和方法表示了过程,组织级标准过程得到建立并不断改进,软件开发按照定义的过程、标准和方法执行。
  4. Level 4 - Quantitatively Managed:对软件过程和产品质量有详细度量数据,并且都有定量的理解与控制。
  5. Level 5 - Optimizing:过程的量化反馈和先进的新思想、新技术促使过程不断持续和改进。

简述 CMMI

  1. CMMI是能力成熟度模型集成,可以用于指导整个项目、部门或整个组织的流程改进。CMMI为流程定义了五个成熟度级别:初始、管理、定义、定量管理和优化。其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件,一定程度上避免了软件危机。

  2. CMMI为改进组织的各种过程提供了一个单一的集成化框架,该框架消除了各个模型的不一致性,减少了模型间的重复,建立了一个自动的、可扩展的框架。所以能够从总体上改进组织的质量和效率。

  3. 它用不同级别表示开发企业的成熟性,不仅给出了企业能力提升的路径,也给出了企业能力评估的事实标准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值