软件工程概述

Posted by 令德湖周杰伦 on 02-24,2020

一、软件

软件是计算机系统中的‘思想中枢’,在计算机系统中起着剧中轻重的作用。它与计算机应将相互作用相互作用,相互配合,从而实现了特定的系统功能,计算机软件的概念是随着计算机技术的发展而发展的。

软件的概念

在计算机发展的初期,软件就是指程序,即计算机可以识别的源代码或者机器可直接执行的代码。
随着计算机技术的发展,人们开始意识到软件并不仅仅等同于程序,全面的讲,软件由:

  1. 计算机程序,实现特定功能的一组指令集
  2. 数据,程序能处理的具有一定数据结构的信息
  3. 软件文档,如:开发计划书、需求规格说明书、设计说明书、测试分析报告和用户手册等

软件的特点

于硬件相比,计算机软件具有以下一些特点:

  1. 人们无法直接观察计算机软件的物理形态
  2. 人类的逻辑思维、智能活动和技术水平是生产软件产品的关键,而传统上的硬件制造,除了人类的脑力劳动外,还需要大量的体力劳动
  3. 计算机硬件存在磨损和老化的现象,人们可以通过替换一个新的设备。对于软件来说人们不需要担心环境因素的磨损,但是存在着缺陷维护和技术更新的问题。
  4. 可移植性,为了减少依赖性,提出了可移植性。
  5. 可复用性,一旦被开发出来,就可以大量复制。

软件的分类

按照功能的不同:

  1. 系统软件,与硬件结合最紧密的软件,os就是典型的系统软件。
  2. 支撑软件,如:文本编辑器、绘图软件等。
  3. 应用软件,为特定的领域或者服务开发的软件,如航空售票软件。

按服务对象的不同:

  1. 通用软件,面向市场公开的,如wps
  2. 定制软件,面向特定的用户,如某企业定制系统。

按产品规模不同:

  1. 小型软件
  2. 中型软件
  3. 大型软件

按工作方式的不同:

  1. 实时软件
  2. 分时软件
  3. 交互式软件
  4. 批处理软件

二、软件危机

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件的需求,从而导致软件开发与维护过程中出现了一系列严重的问题。

表现

爆发于20世纪60年代中期,表现为:

  1. 开发人员开发的软件无法满足用户的需求,主要因为开发人员于用户之间的交流不够充分,使得软件和需求存在差异。
  2. 软件产品的质量难以得到保证
  3. 开发的周期、开发经费和维护费用很难被准确地估计,给项目管理带来了很多麻烦。
  4. 随着技术更新,软件产品的可维护性、可扩展性和可复用性往往不能满足市场的需要。
  5. 软件文档不完备,存在和产品不符的情况

原因

人们对软件产品认识的不足以及对软件开发的内在规律的理解偏差是软件危机出现的本质原因。
具体来说有:

  1. 软件开发是一项复杂的工程,需要用科学的工程化思想来组织和指导软件开发的各个阶段,而开发人员往往简单地认为软件开发就是程序设计。
  2. 没有完善的质量保证体系
  3. 软件文档的重要性没有得到软件开发人员和用户的足够的重视。
  4. 从事软件开发的专业人员对这个产业认识不够充分,缺乏经验。
  5. 软件独有的特点也给软件的开发和维护带来困难,软件的抽象性和复杂性使得软件在开发之前,很难对开发过程的进展进行估计。

软件工程

为了解决软件危机,软件工程诞生了,1968年,在北大西洋公约组织的一次学术会议上,首次提出了‘软件功能’的概念。
经过几十年的发展,在现代软件工程是指应用计算机科学技术、数学和管理学的原理,运用工程学的理论、方法和技术,研究和指导软件开发和演化的一门交叉学科。它强调按照软件产品的特殊性质,采用工程化的思想来指导软件开发,在高效的软件生产和科学的项目管理的基础上得到高质量的软件产品。

基本内容

软件工程有三要素:过程、方法和工具。软件工程的基本内容主要包括:

  1. 软件工程原理,在发展过程中所遵循的基本原则和普遍规律。
  2. 软件工程过程,是指在软件的生命周期内,为了实现特定目标而进行的一系列相关活动,如开发过程、维护过程、支持过程和管理过程等。
  3. 软件工程方法,通常等同于软件开发方法,包括面向过程的开发方法、面向对象的开发方法、面向数据的开发方法和形式化方法。
  4. 软件工程模型,有领域模型、需求模型、设计模型和测试模型。
  5. 软件工程管理
  6. 软件工程度量
  7. 软件工程环境
  8. 软件工程应用

目标原则

目标:

  1. 达到需求的功能
  2. 取得较好的性能
  3. 开发出高质量软件
  4. 付出较低成本
  5. 需要较低维护费用
  6. 按时完工,及时交付

基于以上目标和经验,著名软件工程专家B. Boehm提出了7条基本原则:

  1. 用分阶段的生命周期设计进行严格的管理
  2. 坚持进行阶段评审
  3. 实行严格的产品控制
  4. 采用现代程序设计技术
  5. 软件工程结果应能清楚地审查
  6. 开发小组的人员应该少而精
  7. 承认不断改进软件工程实践的必要性