软件工程概述

软件危机

软件危机包含两方面问题:如何开发软件、如何维护规模越来越大的软件。

软件危机的原因:与软件本身特点有关、开发和维护不正确。

开发和维护不正确具体表现为:忽视软件需求分析的重要性,认为软件开发就是写程序,轻视软件维护等。

软件开发的过程:定义问题、进行可行性研究、需求分析、开发和测试、维护。

软件产品的组成:程序、文档和数据。

软件工程

软件工程的目标

  1. 提高软件的可维护性
  2. 减少软件维护的代价。

软件工程方法学

  1. 传统方法学:将软件生命周期的全过程一次划分为若干个阶段,顺序地完成每个阶段的任务。
  2. 面向对象方法学:既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。

软件生命周期

软件生命周期由三个阶段组成

  1. 系统分析: 问题定义、可行性研究、需求分析。

  2. 软件开发:总体设计、详细设计、编码和单元测试、综合测试。

  3. 运行维护

软件生命周期每个阶段的基本任务

  1. 问题定义:“做什么项目?”。通过对客户的调查,系统分析师扼要地写出关于问题性质、工程目标和工程规模的书面报告,得到客户的确认。

  2. 可行性研究:“值不值得做?”系统分析师在较高的抽象层次上进行研究,不是具体解决问题,而是研究问题的范围,是否有解决方案,客户确认是否继续工程。

  3. 需求分析:“项目需要哪些功能?”仍然不是具体地解决问题,系统分析师确定目标系统必须具备哪些功能,形成需求规格说明书,得到客户的确认。

  4. 总体设计:“大体上怎么实现?”软件工程师设计出几种可能的方案,再利用适当的表达工具分析每种方案的优缺点,推荐一个最佳方案,指定出实现最佳方案的详细计划。得到客户的确认。

  5. 详细设计:“具体怎么实现?”软件工程师设计出具每个模块并确定实现模块功能所需要的算法和数据结构,形成详细的规格说明,交给程序员,使程序员根据它们写出实际代码。

  6. 编码和单元测试:程序员根据软件工程师提供的详细规格说明书写出正确的容易理解、维护的程序模块,并仔细测试每个模块。

  7. 综合测试:测试工程师通过集成测试和验收测试使软件达到预定的要求。

  8. 软件维护:通过改正性维护、适应性维护、完善性维护、预防性维护等维护活动时系统持久地满足用户的需要。

软件过程

软件过程的定义

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

软件过程的三层含义

  1. 个体含义,即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程,软件管理过程等
  2. 整体含义,即指软件产品或系统在所有上述含义下的软件过程的总体
  3. 工程含义,即指解决软件过程的工程,它应用软件工程的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件生产率,降低成本

软件过程模型

软件过程模型是软件开发全部过程、活动和任务的结构框架也称软件开发模型,或软件生存周期模型。

典型的软件过程模型

瀑布模型(waterfall model)
演化模型(evolutionary model)

适用于对软件需求缺乏准确认识的情况,典型的演化模型有增量模型(incremental model)、原型模型(prototyping model)、螺旋模型(spiral model)

喷泉模型(water fountain model)
基于构件的开发模型(component-based development model)
形式方法模型(formal methods model)

瀑布模型(waterfall model)

特征

    接受上一阶段的结果作为本阶段的输入
    利用这一输入实施本阶段应完成的活动
    对本阶段的工作进行评审
    将本阶段的结果作为输出,传递给下一阶段
 缺点

    缺乏灵活性,难以适应需求不明确或需求经常变化的软件开发
    开发早期存在的问题往往要到交付使用时才发现,维护代价大

增量模型(incremental model)

特征

    增量模型融合了瀑布模型的基本成分(重复地应用)和演化模型的迭代特征
    增量模型强调每一个增量都发布一个可运行的产品

使用场景

    需求经常变化的软件开发
    市场急需而开发人员和资金不能在设定的市场期限之前实现一个完善的产品的软件开发
    增量模型能有计划地管理技术风险,如早期增量版本中避免采用尚未成熟的技术

原型模型(prototyping model)

特征

    一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。
    原型方法从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。
    被开发的原型应交付给客户试用,并收集客户的反馈意见,这些反馈意见可在下一轮迭代中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发

使用场景

    需要尽快交付和对软件需求缺乏准确认识的项目

螺旋模型(spiral model)

特征

    是瀑布模型和演化模型的结合,并增加了风险分析
    螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:
    制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
    风险分析:评价所选的方案,识别风险,消除风险
    工程实施:实施软件开发,验证工作产品
    客户评估:评价开发工作,提出修正建议

使用场景

    螺旋模型主要适用于内部开发的大规模需要风险评估的软件项目。

你可能感兴趣的:(软件工程)