软件工程学基础

第一章 软件工程学概述

第一节 软件危机

一. 软件· 定义

  • 软件: 软件包括程序·相关数据·说明文档;
  • 程序:按事先设计的功能和性能要求执行的指令序列;
  • 数据:是使程序能正常操纵信息的数据结构;
  • 文档:是与程序开发、维护和使用有关的图文材料。

二. 软件· 特点

  • 软件是一种逻辑实体,具有抽象性;
  • 软件是开发的,而不是制造的;
  • 在软件的运行和使用期间,没有硬件那样的机械磨损,老 化问题;(理想中软件失效曲线会一直降低,但由于软件不断被修改,导致失效率升高)
  • 软件的开发至今尚未完全摆脱手工作坊式的开发方式,生
    产效率低;(软件技术的发展落后于需求)
  • 软件具有复杂性;
  • 软件的成本相当昂贵;(软件所占成本比例不断提高)
  • 软件对硬件和环境有着不同程度的依赖性;
  • 软件工作牵涉到很多社会因素。

三.软件· 危机

1.两方面问题:

  • 如何开发软件,以满足不断增长,日趋复杂的需求;
  • 如何维护数量不断膨胀的软件产品。

2.主要表现:

  • 对软件开发成本和进度的估计常常不准确。开发成本超出预 算,实际进度比预定计划一再拖延的现象并不罕见。
  • 用户对“已完成”系统不满意的现象经常发生。
  • 软件产品的质量往往靠不住。
  • 软件的可维护程度非常低。
  • 软件通常没有适当的文档资料。
  • 软件成本在计算机系统总成本中所占的比例逐年上升。
  • 软件开发生产率的提高赶不上硬件的发展和人们需求的增长。

3.产生软件危机的原因:

  • 软件是逻辑部件,开发管理困难
  • 软件的规模庞大,结构复杂
  • 软件开发技术、工具落后
  • 采用错误的开发和维护方法

4.消除软件危机的途径:

  • 对计算机软件有一个正确的认识(软件≠程序);
  • 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而
    应该是一种组织良好、管理严密、各类人员协同配合、共同 完成的工程项目;
  • 推广使用在实践中总结出来的开发软件的成功技术和方法;
  • 开发和使用更好的软件工具。

第二节· 软件工程
一.软件工程· 含义
将科学和数学原理应用于软件设计、开发以获得有效的和经济的软件、软件开发过程和软件系统

二.软件工程· 本质特征

  • 软件工程关注于大型程序(系统)的构造
  • 软件工程的中心课题是控制复杂性
  • 软件经常变化
  • 开发软件的效率非常重要
  • 和谐的合作是开发软件的关键
  • 软件必须有效的支持它的用户
  • 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

三.软件工程·基本原理

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

四.软件工程 ·方法学

  1. 软件工程方法学· 三要素
  • 软件工程的方法:为软件开发提供 “如何做”的技术,当前有传统的 软件开发方法和面向对象的软件开 发方法。
  • 软件工程的过程:是管理和控制产 品质量的关键,实现在规定的时间 和预算内开发高质量软件的目标。
  • 软件工程的工具:为软件工程方法提供了自动的或半自动的软件支撑 环境,辅助软件开发任务的完成。
  1. 传统方法学:(也称生命周期方法学/结构化范型)
    采用结构化技术(结构化分析,设计,实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。从上而下,顺序地完成软件开发的各阶段任务。

  2. 面向对象的方法学:
    出发点和基本原则是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识实践解决问题的方法与过程,从而使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。(将数据和行为看成是同等重要的,以数据为主线,把数据和对数据的操作紧密结合起来的方法)
    四个要点
    (1)把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
    (2)把所有对象划分成类。
    (3)按照父类与子类的关系,将若干个相关类组成一个层次结构的系统。(继承)
    (4) 对象彼此间只能通过发送消息相互联系。(封装)

第三节· 软件生命周期(SDLC)

软件工程学基础
软件开发的生命周期包括可行性分析、需求分析、系统设计、编码、测试、部署和维护等不同阶段