软件工程笔记(一)


软件和软件危机

软件定义:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。 通常分为系统软件、应用软件。
软件危机:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了这样两方面的问题:一是如何开发软件以满足多软件日益增长的需求;二是如何维护数量不断增长的已有软件。


软件工程

软件工程:软件工程是指导计算机软件开发和维护的一门工程学科,采用工程的概念、原理、技术和方法来开发和维护软件。

软件工程的主要研究内容是指软件开发技术和软件开发过程管理两个方面。

软件工程的基本原理

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

软件过程和软件的生存周期

软件过程是为了获得高质量所需要完成的一系列任务的框架,它规定了完成多项任务的工作步骤。框架包括用来获取、供应、开发、操作和维护软件所用的基本的、一致的要求。
软件开发过程是把用户要求转化为软件需求,把软件需求转化为设计,用代码来实现设计,对代码进行测试,完成各阶段的文档编制并确认软件可以投入运行使用的过程。

软件生存周期是借用工程中产品生存周期的概念而得来的,是指某一软件项目被提出来并着手实现开始直到该软件报废或停止使用为止

软件的生存周期一般分为软件计划、软件开发和软件运行三个时期。
软件工程笔记(一)
软件计划时期(1)问题定义(2)可行性研究
软件开发时期(1)需求分析(2)概要设计(3)详细设计 (4)编码(5)测试
软件运行维护时期 (1) 维护


软件开发模型

软件开发模型,就是为整个软件建立的模型,模型是为了理解事物而做出的抽象。

瀑布模型

瀑布模型也称生存周期模型线性顺序模型。这种模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。以文档为驱动,适合于需求很明确的软件项目开发的模型。

软件工程笔记(一)
瀑布模型的特点
(1)阶段的顺序性和依赖性:首先必须等前一阶段的工作完成之后,才能开始后一阶段的工作;其次前一阶段的输出文档就是后一阶段的输入文档。
(2)推迟实现的观点
(3)质量保证的观点: ①每一个阶段都必须完成所规定的相应文档; ②每一个阶段结束之前都必须对已完成的文档进行评审
(4)存在的问题:是一种理想的线性开发模式,缺乏灵活性。特别是无法解决软件需求不明确或不准确的问题。

快速原型模型

主要思想:首先快速建立一个能够反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践让用户了解未来目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进,用户会提出许多改进意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用……,反复改进,最终建立完全符合用户需求的新系统。是一种迭代化的模型

软件工程笔记(一)

增量模型

增量模型也称为渐增模型,是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物,是一种非整体开发的模型
软件在模型中是“逐渐”开发出来的,把软件产品作为一系列的增量构件来设计、编码、组装和测试。开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题。
软件工程笔记(一)
第一个构件的规格说明文档完成后,规格说明组转向构建二的规格说明,同时设计组设计第一个构件,不同的构件将并行构建,有可能加快工程,但会有可能所有构件集成不到一起,因此必须严密监控整个开发过程。适用于软件要求不明确,设计方案有一定风险的软件项目

螺旋模型

螺旋模型是目前实际开发中常用的一种开发模型,螺旋模型加入了瀑布模型与增量模型都忽略了的风险分析,即将两种模型结合起来,弥补了两种模型的不足。它是一种风险驱动的模型

螺旋模型是一种迭代模型,它把开发过程分为几个螺旋周期,每迭代一次,螺旋线就前进一周

软件工程笔记(一)
它的基本思想是:使用原型及其他方法来尽量降低风险,当项目按照顺时针沿螺旋移动时,每一个螺旋周期均包含了风险分析,可看做是每个阶段都增加了风险分析的快速原型模型。
它适合于大规模高风险的软件项目开发,是以风险驱动的模型,使用该模型需要有相当丰富的风险评估技术。

喷泉模型

喷泉模型是一种典型的面向对象软件开发模型,以用户需求为动力,以对象为驱动的模型,适合面向对象的开发方法。使开发过程具有迭代性和无间隙性。系统某些部分常重复多次,相关功能在每次迭代中随之加入演进的系统,无间隙是指分析、设计和实现之间不存在明显边界。
软件工程笔记(一)

基于构件的开发模型

经过一定的设计和实现的类可称为构件,它们可以有不同的计算机软件系统中复用,在某个领域具有一定的通用性。基于构件的开发模型是利用预先封装的软件构件来构造应用软件系统,从而提高软件的重用性和可靠性。

统一过程(RUP)模型

软件统一开发过程是经过近40多年的发展形成的,它是基于面向对象统一建模语言UML(Unified Modeling Language)的一种面向对象的软件过程模型
RUP(Rational Unified Process)是一个通用的过程框架,可以用于各种不同模型的软件系统,各种不同的应用领域和不同规模的项目。RUP的特点是由用例驱动,以构架为中心,采用迭代和增量的开发策略。RUP软件生存周期是一个二维的软件开发模型。

基于形式化的开发模型

变换模型和净室模型是两种比较典型的适合于形式化开发的模型。
变换模型是结合形式化软件开发方法和程序自动生成技术的一种软件开发模型。它采用严格的、数学的表示体系来表示软件规格说明,从软件需求形式化说明开始,经过一系列变换,最终的得到了系统的目标程序。
净室模型是一种形式化的增量开发模型。其基本思想是力求在分析和设计阶段就消除缺陷,却保正确,然后在无错误或“净室”的状态下实现软件的开发。

不同软件开发模型模型对比

软件工程笔记(一)


传统的软件工程和面向对象的软件工程

传统的软件工程开发过程采用结构化技术来完成软件开发各项任务,与瀑布模型紧密结合。

面向对象的开发方法的重点是放在软件生存周期的分析阶段
面向对象开发过程的特点是,开发阶段界限模糊,开发过程逐步求精,开发活动反复迭代。通常开发活动是在分析、设计和实现阶段的反复迭代。

与面向过程的软件工程的开发思想相比,面向对象开发方法不再是以功能划分为导向,而是以对象作为整个问题分析的中心,围绕对象展开系统的分析与设计工作。
在开发过程方面,面向对象软件工程和传统软件工程一样也是把软件开发划分为分析、设计、编码和测试等几个阶段,但各个阶段的具体工作不同。