软件工程导论课程笔记与详解②

第一章 软件工程概述(下)

目录:

1、 软件工程介绍

2、 软件生命周期

3、 软件过程

 


 

1、 软件工程的介绍

① 软件工程的来源:1968年,北约组织NATO召开计算机科学会议。会议中首次提出了“软件工程”的概念和克服“软件危机”的策略,强调按照工程化原则和方法组织软件开发工作。软件工程技术领域由此应运而生。

 

②工程的含义

(1) 工程的含义:工程师将理论和所学的知识应用于实践的科学,一遍经济有效地解决实际问题。

(2) 工程的特征:平衡与决策、度量与验证、运用工具、团队协同工作、角色分工、最佳实践、强调重用(重复使用)

 

③ 软件工程的定义

(1) 典型定义:软件工程是指导计算机软件开发维护的一门工程学科,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考研儿整明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

(2) 软件工程的本质特征:

  • 关注于大型程序的构造;
  • 软件工程的中心课题是控制复杂性;(将软件解决的复杂问题进行分解
  • 软件经常变化;
  • 开发软件的效率非常重要;(寻求更好更有效的方法和工具
  • 和谐地合作是软件开发的关键;
  • 软件必须有效地支持它的用户
  • 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

(3) 软件工程的七条基本原则

  1. 分阶段的生命周期计划严格管理;
  2. 坚持进行阶段评审;(可以尽早在软件开发过程中发现错误
  3. 实行严格的产品控制;(实行基准配置管理,即修改要有审查)
  4. 采用现代程序设计技术;
  5. 结果能清楚地审查;(根据目标规定组织责任和标准,便于审查)
  6. 开发小组的人员应该少而精;
  7. 承认不断改进软件工程实践的必要性。(主动采纳新的软件技术,不断总结经验

 

④ 软件工程方法学

 

 

 技术:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(Methodology),也称为范型(Paradigm)。

管理:通过计算,组织和控制等一系列活动、合理地配置各种资源,以达到既定目标的过程。

方法:完成软件开发的各项任务的计划方法,回答“怎么做”的问题

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

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

 

(1) 传统方法学:这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。

  • 方法:结构化程序设计方法、瀑布模型螺旋模型
  • 编程语言:Fortran语言、Pascal语言、C语言等

 

(2) 面向对象方法学:把数据对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程;

 

⑤ 软件生命周期

定义:指软件从提出到最终被淘汰的这个存在其

过程:软件定义(需求分析:问题定义、可行性研究、需求分析)-->软件开发(总体设计、详细设计、编码和单元测试、综合测试) -->运行维护(主要任务是使软件持久地满足用户的需求)

 

(1) 软件生命周期八个阶段

  1. 问题定义:回答要解决的问题是什么
  2. 可行性研究:确定项目是否值得做,是否有好方案
  3. 需求分析:准确地确定目标系统必须做什么
  4. 总体设计(概要设计):概括的说应该怎样实现目标系统,确定程序由哪些模块组成及其之间的关系
  5. 详细设计(模块设计):应该怎样具体实现这个系统,确定实现模块功能所需要的算法和数据结构
  6. 编码与单元测试:写出正确容易理解、容易维护的程序模块、并仔细测试这些模块。
  7. 综合测试:通过各种类型的测试使软件达到预定的要求
  8. 维护:通过各种必要的维护活动使系统持久的满足用户需要。(分为:5%预防性维护、20%改正性维护、25%适应性维护、50%完善性维护)

⑥ 软件过程

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

 

目标:开发出客户满意的软件

  • 什么人(who)
  • 什么时候(when)
  • 做什么事(what)
  • 怎么做(how)

 

(1) 软件过程定义:使用资源将输入转化为输出的活动所都成的系统。

过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各阶段任务完成的里程碑.

 

(2) 过程模型简介

通常我们使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各阶段执行顺序,也叫过程模型,是对实际过程的抽象描述。

过程模型有:瀑布模型、快速原型模型、增量模型、螺旋模型等。

 

(3) 瀑布模型

特点:

  • 阶段间具有顺序性和依赖性。(前一阶段结束 后一阶段开始,前一个阶段输出文档,后一个阶段输入文档)
  • 推迟实现的观点。(推迟程序的物理实现)
  • 质量保证的观点(文档生成,文档评审)

优点:

  • 迫使开发人员采用规范的方法
  • 每个阶段必须提交文档(文档驱动)
  • 每个极端的产品都必须质量验证

缺点:

  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。(文档多,写的多)
  • 开发过程中很难响应客户的变更要求。(流程是死的)
  • 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

适用范围:

  • 需求稳定,变化小且开发人员能够一次性获取全部需求的项目。(要提前规划好进度)
  • 软件开发人员有丰富经验,对于应用领域非常熟悉。(要保证质量)
  • 软件项目本身的风险很低
  • 适用于功能、性能明确、完整无变化的软件系统开发。(和第一点类似)

 

(4) 快速模型

简介:快速建立原型,原型的功能是最终产品功能的子集(也就是部分功能)。用户对该模型所展示的部分功能和性能进行评定与意见,开发人员后续修改直至完成所有功能且获得用户满意。

特点:

  • 线性开发模型,不带反馈环开发的系统能够满足用户真实的需求。

优点:

  • 快速构建,容易修改(从名字就能看出来)
  • 容易适应需求的变化;
  • 用户参与用户驱动
  • 能够处理模糊需求

缺点:

  • 原型系统的内部结构可能不好;
  • 开发人员需要掌握建立快速原型的开发技术和工具。

适用范围:

  • 适用于需求快速变化(可以后续增加)
  • 小型或中等规模的交互式系统
  • 大型系统的某些部分,例如用户界面
  • 生命周期较短的系统(比较快)
 
 
(5) 增量模型
简介:每次开发一点点,把软件产品作为一系列的增量构件来设计、编码、继承和测试。每个构建分别开发再合在一起。
特点:
  • 系统模块化和构件化构件驱动

优点:

  • 将待开发的软件系统模块化,可以分批次地提交软件产品
  • 以构件为单位进行开发,降低了软件开发的风险
  • 开发顺序灵活

缺点:

  • 新的模块集成时,必须不能破坏已经开发出来的产品。

适用范围:

  • 待开发系统能够被模块化(前提)
  • 软件产品可以分批次交付(看甲方爸爸要求)
  • 软件开发人员对应用领域不熟悉,或一次性开发的难度很大
  • 项目管理人员把握全局的水平不高

特殊情况:风险更大的模型

可能在增量模型开发过程中会产生这种情况:在确定用户需求后,多个构建可能会并行开发。这样一种情况可以一定程度上加快工程进度,但是这种方法很可能导致构件无法集成到一起的风险。所以说要把握好整个开发过程或指定一定的规范。

 

(6) 螺旋模型

简介:螺旋模型是将瀑布模型快速原型模型结合起来,强调了其它模型所忽视的风险分析。可以将其看作在每个阶段之前都增加风险分析的快速原型模型。

特点:

  • 风险驱动

优点:

  • 风险分析
  • 质量保证

 缺点:

  • 需要开发人员具有丰富的风险评估经验

适用范围:

  • 适用于复杂的,高风险的大型软件项目(内部开发)

额外:迭代模型

迭代是实现软件的每项功能反复求精的过程,是从模糊到清晰的开发过程,每次迭代是从功能的深度和细化程度来划分的。最适合使用与前期需求不稳定、需求多变的项目。

我感觉增量模型和螺旋模型都属于迭代模型,还有下面的喷泉模型。

 

(7) 喷泉模型

简介:是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

特点:

  • 迭代(求精,系统某部分被重复工作多次,相关功能在每次迭代中逐渐加入演进系统)
  • 无间隙(分析、设计、编码各阶段间不存在明显边界)

优点:

  • 无缝,可以同步开发,提高软件项目的开发效率
  • 节省开发时间

缺点:

  • 可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。

适用范围:

  • 适用于面向对象的软件开发。

 

(8) Rtional统一过程

简介:RUP是Rational公司提出的基于UML的一种面向对象软件开发过程模型。它解决了螺旋模型的可操作性问题,采用迭代和增量的开发策略,以用例为驱动,继承了多种软件开发过程模型的特点。

 最佳实践(适用场所):
  • 迭代式开发
  • 管理需求
    • RUP描述了如何提取、组织系统的功能性需求和约束条件,并把他们文档化。
  • 使用基于构件的体系结构
  • 可视化建模
    • 使用可视化建模语言UML
  • 软件质量验证
  • 控制软件变更

 

RUP软件开发生命周期:

 

RUP软件开发生命周期是一个二维的生命周期模型 。

核心过程工作流:业务建模、需求、分析设计、实施、测试、部署

核心支持工作流:配置与变更管理、项目管理、环境

 

生命周期具体解析:

  • 需求:捕获客户需求,并且使开发人员和用户达成对需求描述的共识(需求分析)
  • 分析与设计:把需求分析的结果转化成分析模型与设计模型(需求转化为分析与设计)
  • 实施:把设计模型转换成实现结果(实现设计)
  • 测试:检查各子系统交互集成,验证所有需求是否都被正确的实现了,识别确认缺陷并确保在软件部署前消除缺陷。
  • 部署:成功的生成目标系统的可执行版本,并把软件移交给最终用户
  • 配置与变更管理:跟踪并维护在软件开发过程中产生的所有制品的完整性和一致性。(资产统一)
  • 项目管理:提供项目管理框架,为软件开发项目制定计划、人员配备、执行和监控等方面的实用准则,并为风险管理提供框架
  • 环境:向软件开发机构提供软件开发环境,包括过程管理和工具支持。

 

工作过程:

  • RUP把软件生命周期划分为4个连续的阶段,每个阶段都有明确的目标,并且定义了用来评估是否达到这些目标的里程碑,每个阶段通过一次或多次迭代完成。
  • 每个阶段结束之前都要一个里程碑评估该阶段的工作成果,如果未能通过评估,则决策者应该做出决定,要么终止项目,要么重做该阶段的工作。

 

 

RUP迭代式开发

  • RUP强调采用迭代和渐增的方式来开发软件,整个项目开发过程由多个迭代过程组成
  • 在每次迭代中只考虑系统的一部分需求,针对这部分需求进行分析、设计、实现、测试和部署等工作,每次迭代都是在已经完成部分的基础上进行的,每次给系统增加一些新的功能,如此循环往复进行下去,直至完成最终项目。

特点:

  • 不断的版本发布成为一种团队日常工作的真正驱动力
  • 迭代开发,降低风险
  • 能够有效提高开发效率

适用范围:

  • 适用于大型软件项目。
 
(9) 敏捷过程与极限编程
敏捷过程:具有高效、快速响应变化的开发过程,由四个简单的价值观组成:
  1. 个体和交互
  2. 可以工作的软件
  3. 客户合作
  4. 响应变化

极限编程:属于敏捷过程中的一种,指把好的开发实践运用到极致,多应用于软件需求模糊的场合。其特点为:对变化和不确定性的更快速、更敏捷的反应特性,而且在快速的同时仍然能够保持可持续的开发速度。

 

 

 

(10)微软过程

简介:从规划阶段到发布阶段的一系列过程

5个阶段:

  • 规划阶段:开展市场调查研究,结合公司战略形成产品的远景目标
  • 设计阶段:根据产品远景目标完成功能规格说明和总体设计,确定产品开发的主要进度。
  • 开发阶段:完成产品中所有构件的开发工作
  • 稳定阶段:实行全面的内部和外部测试,最终形成可发布的RTM版本
  • 发布阶段:确定产品质量符合发布标准后,发布产品及相关消息

 

(11) 开发过程小结:

 

 

 

 
 
posted @ 2022-11-01 12:39  柒城小柒  阅读(208)  评论(0)    收藏  举报