软件工程

1.软件工程概述

1968年,北大西洋公约组织的计算机科学家在西德召开国际会议,讨论软件危机问题

1.1.软件危机

1.1.1软件危机的介绍

软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题

软件危机主要包括

  1. 如何开发软件,以满足对软件日益增长的需求

  2. 如何维护数量不断膨胀的已有软件

典型表现:

  1. 对软件开发成本和进度的估计不准确

  2. 用户对“已完成的”软件系统不满意的现象经常发生

  3. 软件产品的质量往往靠不住

  4. 软件常常是不可维护的

  5. 软件通常没有适当的文档资料

  6. 软件成本在计算机系统总成本中所占的比例逐年上升

  7. 软件开发跟不上计算机应用迅速普及深入的趋势

1.1.2产生软件危机的原因

  1. 客观原因

    1. 软件是计算机系统中的逻辑部件而不是物理部件

    2. 软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升

  2. 主观原因

    1. 对软件开发和维护有不少糊涂概念,采用了错误方法和技术

    2. 存在与软件开发和维护有关的许多错误认识和做法

    3. 对用户要求没有完整准确的认识就匆忙着手编写程序

    4. 一个软件从定义、开发、使用和维护,知道最终被放弃,要经历一个漫长的生命周期

    5. 一个软件产品必须由一个完整的配置组成,主要包括程序、文档和数据等成分

    6. 在软件开发的不同阶段进行修改需要付出的代价是不同的

    7. 轻视维护是一个最大的错误

1.1.3.消除软件危机的途径

  1. 应该对计算机软件有一个正确的认识,软件是程序、数据及相关文档的完整集合。程序是能完成预定功能和性能的可执行的指令序列,数据时使程序能够适当的处理信息的数据结构,文档是开发、使用和维护程序所需要的图文资料

  2. 应该认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该充分吸取和借鉴人类长期以来的研究和开发的经验

  3. 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早起发展阶段形成的一些错误概念和做法

  4. 应该开发和使用更好的软件工具

1.2.软件工程

1.2.1.软件工程的介绍

软件工程就是从管理和技术两方面研究更好的开发和维护计算机软件的一门新兴学科。采用工程的==概念、原理、技术和方法==来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济的开发出高质量的软件并有效的维护它,这就是软件工程

  • 软件工程的本质特性

    1. 软件工程关注于大型程序的构造

    2. 软件工程的中心课题是控制复杂性

    3. 软件经常变化

    4. 开发软件的效率非常重要

    5. 和谐的合作是开发软件的关键

    6. 软件必须有效的支撑它的客户

    7. 在软件工程领域中通常由具有一种文化背景的人替有另一种文化背景的人创造产品

1.2.2.软件工程的基本原理

  1. 用分阶段的生命周期计划严格管理

  2. 坚持进行阶段评审

  3. 实现严格的产品控制

  4. 采用现代化程序设计技术

  5. 结果应能清楚的审查

  6. 开发小组人员应该小而精

  7. 承认不断改进软件工程实践的必要性

1.2.3.软件工程方法学

软件工程方法学三要素:

  1. 方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题

  2. 工具:是为了运用方法而提供的自动或半自动的软件工程支撑环境

  3. 过程:是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤

  4. 传统方法学

    • 也被称为生命周期方法学或结构化范型

    • 采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用

    • 优点:

      • 把软件生命周期划分若个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而减低整个软件开发工程的困难程度

      • 在软件生命周期的每个阶段都采用科学的管理技术和良好的技术方法,且在每个阶段结束之前都进行严格的审查,使得软件开发工程的全过程以一致有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性

      • 采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高

  5. 面向对象方法学

    • 把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密的结合起来的方法

    • 尽量模拟人类习惯的思维方式,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致

    • 要点:

      • 把对象作为融合了数据及在数据上的操作行为的软件结构

      • 把所有对象都划分为类(多态)

      • 继承性

      • 对象彼此间仅能通过发送消息互相联系(封装特性)

1.3.软件生命周期

软件生命周期由软件定义、软件开发和运行维护三部分组成

  • 软件定义

    • 分为:问题定义,可行性研究和需求分析

    • 总任务:

      1. 确认软件开发工程必须完成的总目标

      2. 确认工程的可行性

      3. 导出实现工程目标应该采用的策略及系统不许完成的功能

      4. 估计完成该工程需要的资源和成本,并且制定工程进度表

  • 软件开发

    • 分为:总体设计、详细设计、编码和单元测试,综合测试

    • 前两个阶段为系统设计,后两个阶段为系统实现

  • 运行和维护

    • 软件运行和维护的主要任务就是使软件持久的满足用户的需要

    • 三种情况:

      • 当软件在使用过程中发现错误时应该加以改正

      • 当环境改变时应该修改软件以适应新的环境

      • 当用户有新要求时应该及时改进软件以满足用户的新需要

  • 生命周期详细:

    1. 问题定义

      • 需要解决的问题是什么

    2. 可行性研究

      • 探索这个问题是否值得去解,是否有可行的解决办法

    3. 需求分析

      • 为了解决这个问题,目标系统必须做什么

      • 用正式文档准确记录对目标系统的需求,软件需求规格说明书(SRS)

    4. 总体设计(概要设计)

      • 概括的说,应该怎么实现目标系统

    5. 详细设计(模块设计)

      • 应该怎么具体实现目标系统

    6. 编码和单元测试

      • 写出正确的容易理解。容易维护的程序模块

    7. 综合测试

      • 通过各种类型的测试使软件达到预定的要求

      • 最基本的的测试使集成测试和验收测试

    8. 软件维护

      • 通过各种必要的维护活动使系统持久的满足用户的需要

      • 四类维护活动:

        1. 改正性维护:即诊断和改正在使用过程中发现的软件错误

        2. 适应性维护:即修改软件以适应环境的变化

        3. 完善性维护:即根据用户的要求改机或扩充软件使它更完善

        4. 预防性维护:即修改软件,为将来的维护活动预先做准备

1.4.软件过程

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤

1.4.1.典型软件过程模型

  1. 瀑布模型

    • 特点:

      1. 阶段间具有顺序性和依赖性

      2. 推迟实现的观点

      3. 质量保证的观点

  • 实际的瀑布模型

    • 优点:

      1. 可强迫开发人员采用规范的方法

      2. 严格的规定了每个阶段必须提交的文档

      3. 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证

      4. 对文档的约束,使软件维护变得容易一些,且能减低软件预算

  1. 增量模型

    • 把软件产品作为一系列的增量构件来设计、编码、集成和测试

    • 把软件产品分解成增量构件时:当把新构件集成到现有软件中时,所形成的产品必须是可测试的

    • 优点:

      • 适应需求的变更

      • 能在较短时间内向用户提交可完成部分工作的产品

      • 逐步增加产品功能可以使用户有较充裕的世界学习和适应新产品

  2. 螺旋模型

    • 使用原型及其他方法来尽量减低风险,可以把它看做在每个阶段之前都增加了风险分析过程的快速原型模型

    • 优点:

      • 减少了过多的测试或测试不足带来的风险

      • 对可选方案和约束条件的强调有利于已有软件的重用,有助于吧软件质量作为软件开发的一个重要目标

4.喷泉模型

面向对象方法学

2.可行性研究

2.1.可行性研究的任务

最后更新于