文章目录

  • 软件工程
  • 第一章 绪论
  • 1.1 软件与软件危机
  • 1.2 软件工程学的范畴
  • 传统的软件工程
  • 结构化开发方法
  • Jackson方法
  • 原型化方法
  • HIPO法
  • 面向对象软件工程
  • 两类软件工程方法
  • 1.3 软件工程的应用
  • 软件的分类
  • 按软件功能划分
  • 按软件规模划分
  • 按软件工作方式划分
  • 按软件服务对象的范围划分


软件工程

第一章 绪论

1.1 软件与软件危机

软件工程的发展阶段:面向过程的软件工程-》面向对象的软件工程-》基于构件的软件工程(软件复用)

面向过程的程序=算法+数据结构
面向对象的程序=对象+消息
面向构件的程序=构件+框架

软件的定义:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述软件开发过程及其管理、程序的操作和使用的有关文档。

软件=程序+数据+文档

软件危机:计算机软件的开发和维护过程所遇到的一系列严重问题。
表现:

  • 对软件开发成本和进度的估算不准确
  • 用户不满意
  • 只想不可靠
  • 没有适合的文档
  • 软件成本比重上升
  • 供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势

原因:

  • 客观:软件本身特点
  • 逻辑部件
  • 规模庞大
  • 主管:不正确的开发方法
  • 忽视需求分析
  • 错误认为软件开发=程序编写
  • 轻视软件维护

解决途径:

  • 组织管理
  • 系统工程项目管理方法
  • 技术措施
  • 软件开发技术与方法
  • 软件工具

1.2 软件工程学的范畴

传统的软件工程

传统的软件工程也称为面向过程或结构化软件开发方法,这类开发方法都典型地包含了分析、设计、实现、确认(测试)、演化(维护)等活动。

典型的传统软件开发方法有:Jackson方法、结构化开发方法、原型化方法、HIPO法、IDEF法等。

结构化开发方法

是一种面向数据流的开发方法,是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然和方便。

结构化方法总的指导思想是自顶向下、逐步求精,以数据流,数据的封闭性准则来逐层分解的,它的基本原则是功能的分解与抽象。

结构化方法强调结构的合理性。提出了一组提高软件结构质量的准则,如功能的分解与抽象、模块独立性、信息屏蔽等。

Jackson方法

是一种面向数据结构的设计方法。强调程序结构与问题结构相对应。

Jackson方法由两部分构成:JSP、JSD。

原型化方法

原型是软件开发过程中,软件的一个早期可运行的版本,它反映了最终系统的部分重要特征。

原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会,原型化方法又称速成原型法。强调的是软件开发人员与用户的不断脚湖,通过原型的眼睛不断适应用户任务改变的需求。将维护和修改阶段的工作今早进行,使用户验收提前,从而使软件产品更加适用。

HIPO法

是以功能、功能完备性准则逐层分解的,由直观目录表、概要HIPO图,详细IPO图三部分组成。

面向对象软件工程

其基本思想是:对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模仿,从而使设计的软件更直接地表现问题的求解过程。面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心。

软件复用是指将已有的软件成分用于构造新的软件系统。该技术是提高软件生产率和质量、降低成本的有效方法。

复用方式:

  • 复用程序:包括目标代码和源代码的复用,可通过连接、绑定、包含等功能支持及对象链接及嵌入技术实现。
  • 复用设计:设计结果比源程序的抽象级别高,因此复用受环境影响小。可以通过从现有系统中提取全部或者不同粒度的设计构件,或者独立于具体应用开发设计软件。
  • 复用结构:复用模块结构或者数据结构。

可复用构件的特性:

  • 独立性:解决相对独立的问题,与外界联系尽量少。
  • 完整性:既要包括完整的解决方案,还定义相应操作。
  • 通用性:在同类应用中具有一般性。
  • 可标识性:通过合适的命名,构件所解决的问题是可标识的。
  • 可适应性:适应环境变化。
  • 可靠性:对各个使用它的系统都具有高的可靠性。

程序设计的两次飞跃:结构化程序设计-》面向对象程序设计。

两类软件工程方法

传统软件工程:软件分析-》总体设计-》详细设计-》面向过程的编码-》测试-》运行与维护。

面向对象软件工程:软件分析与对象抽取-》对象详细设计-》面向对象的编码-》测试-》运行与维护。

1.3 软件工程的应用

软件的分类

按软件功能划分
  • 系统软件:操作系统、设备驱动程序。
  • 支撑软件:协助用户开发的工具软件,如编辑程序、程序库、图形软件包等。
  • 应用软件。
按软件规模划分

微型、小型、中型、大型、甚大型、极大型。

按软件工作方式划分

实时处理软件、交互式软件、批处理软件。

按软件服务对象的范围划分

项目软件:由客户委托开发的软件。

产品软件:由软件开发机构开发,提供给市场的。