软件过程(上)

学习时间

2021-03-16

学习内容

软件过程概述

软件过程思想:软件生产的一组互相连贯的活动。
软件过程是一组引发软件产品生产的活动。

软件过程的4种基础活动

  1. 软件描述
    客户和工程师定义所要成产的软件以及对其操作的一些约束。
  2. 软件开发
    软件得以设计和编程实现。
  3. 软件有效性验证
    软件经过检查,以保证他就是客户所需要的
  4. 软件进化
    软件随不同的客户和变化的市场需求而进行修改。

软件过程的其他方面

  1. 产品,也就是软件过程的结果。
  2. 角色,反映了人在软件过程中的职责。
  3. 牵制和后置条件。

我们知道整个软件过程是复杂的,它可以分为计划驱动过程敏捷过程

软件过程模型

软件过程模型是软件过程的简化表示。每一个过程模型都是从一个特定的侧面表现软件过程。我们将对一下三个模型作为例子进行解读:

  1. 瀑布模型
    瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
  2. 增量式开发
    其中增量是指在软件开发过程中,先开发主要功能模块,再开发次要功能模块,逐步完善,最终开发出符合需求的软件产品。
  3. 面向复用的软件工程
    将软件看成是由不同功能部分的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具,这样,如果完成各种工作的组件被建立起来以后,编写一特定软件的工作就变成了将各种不同组件组织连接起来的简单问题,这对于软件产品的最终质量和维护工作都有本质性的改变。

这三个模型相互不排斥,且经常结合使用。

瀑布模型

主要阶段直接映射基本的开发活动:
  1. 需求分析和定义:
    通过咨询系统用户建立系统的服务、约束和目标,并对其详细定义形成系统描述。
  2. 系统和软件设计:
    将总体分为硬件需求和软件需求。软件设计包括和描述一些基本的软件系统抽象以及之间的关系。
  3. 实现和单元测试:
    将软件设计实现1为一组程序或者程序单元。
  4. 继承和系统测试:
    集成单个的程序单元或一组程序,并对系统整体进行测试以确保其满足了软件的需求。
  5. 运行和维护:
    在一般情况下,这是一个漫长的过程。系统被安装并且投入实际的使用中。维护和改正那些在早期各阶段没有被发现的问题。
净室软件工程

由IBM公司提出,在净室过程中每一个软件增量都要给出行时化描述,然后此描述经过变换得以实现。
该净化系统的目标是生产零缺陷软件,是的教父的系统具有高度的可靠性。

净室软件工程在百度百科中的解释:净室软件工程

增量式开发

思想就是先开发出一个初始的实现,再给用户并听取用户的使用意见和建议,通过对多个版本的不断修改知道产生一个充分的系统。
增量式开发

图源:百度百科
增量式开发的主要优点
  1. 进展的可见性
    利用增量式开发,每一步增量实现了一个或多个最终用户功能。每一步增量包含所有早期的已开发的功能集加上一些新的功能;系统在逐步累积的增量中增长。例如,在早期增量结束时,开发者很有信心地说:系统的20%已100%完成了,而不是推测系统已完成了20%。
  2. 智能控制
    增量式开发通过引用透明性,实现了整个系统开发过程中的智能控制。当在后续增量待实现的函数的子规范被嵌入当前增量流程逻辑中时,这种特性,即等式的等量替换令人满意。当拥有引用透明性时,一个系统的部件无需回溯就能根据其子规范得以实现。无需重做前期增量。这里策略有利于在一个完整系统中对每个增量进行正确性验证。
  3. 增量系统集成
    净室增量式开发允许在整修开发生命期引用透明的用户函数增量的连续集成。因为每一步增量设计基于一个已验证的子规范和前期增量已测试的接口,因此几乎没有更深的设计和接口错误。较好的定义增量贯穿于整修系统开发过程,系统在良好定义的增量中深化。测试和验证工作始于开发周期早期。
    连续质量反馈贯穿统计过程控制
  4. 已在净室中实践的增量式开发为统计过程控制提供了基础。每一个净室增量都是过程的一个完整周期,包含规范、开发和新的用户函数的验证,加上所有已工作的测试。作为统计过程控制的典型,把过程的每一次反复的性能度量与性能目标相比较,以决定是否过程一直在控制之下(即:是否正如所期望的那样发生)。
  5. 净室软件小组常使用在测试中的开发性能度量作为过程控制的标准。通常使用的度量包括每千行代码的错误数、失效的间隔时间(MTTF)、可靠性及可信性。其他过程控制方法或许依赖于所管理的事务,而不是产品的质量。进度一致性一、预算一致性瑟整体计划的一致性等等,都是按增量的实际性能与目标性能相比较而言。净室增量度量依据的标准描述了过程控制的具体级别,要按计划继续该项目,开发小组要求此级别。如果标准不符合,开发小组能从增量中检测执行数据,确定问题所在,必要时调整项目计划,修改软件开发过程,避免此类问题的再次发生。例如,如果增量的测试提示过程失去控制(如:质量标准不符合),开发者们应停止测试,返回设计阶段,如果过程是在控制之下,下一歨增量工作才能继续。
  6. 统计过程控制(Statistical Process Control ,SPC)是为数据悼念和分析提供较好的开发技术的成熟的工程实践。丰富的方法和工具支持是希望从事更高实践的设计者可利用的。然而,SPC的基本实践要求少量的投资和努力就能产生充足的回报。统计过程控制应用的基本任务很简单:每一过程周期的性能度量,比较实际性能与预先定义的目标性能,确定不可接受偏差的原因,以及通过过程改变改进将来的性能。
  7. 用户使用中不断的功能反馈
    增量式开发有助于用户对一个进货系统的执行功能做出尽早的不断的反馈,必要时允许改变。因为增量执行于系统环境并代表了用户功能的子集,早期的增量能通过用户对系统功能性和实用性的检测来反馈。这种反馈有助于避免开发出失效的系统和建立用户可接受的最终产品。
  8. 变更的适应性
    在系统需求和项目环境中增量式开发允许不可避免变更的系统适应性。在每一步增量完成时,系统需求的积累变更所产生的影响能根据当前规范和增量设计来评估。如果变更与将来增量想到独立,则通常与现已存在的增量开发计划相合并,并对进度和资源进行可能的调整。如果变更影响已完成的增量,自顶向下修改系统开发,通常重用绝大多数已存在的增量代码(通常是全部),按照要求的进度和资源来进行相应调整。
  9. 进度与资源管理
    项目资源在增量式开发全过程中能在可控制的方式下分配。可用进度是决定待开发的增量数据和其规模的一个因素。在短进度中,小规模增量将有助于在增量交付与认证组之间维持充分的时间段,允许一个有序的测试过程。然而,这将给项目开发小组设计和实现更大、更复杂的增量带来更多负担。进度和复杂性的折衷能够反映增量式开发计划。另外,从后续增量得到的反馈,为过程和产品性能的目标度量提供了管理,以允许在开发和测试中对不足和意外收获的适应。
增量式开发带来的问题

增量式开发的主要问题是,大型机构的办事程序较为僵化,不容易轻易改革,而这些办事的过程与非形式化的迭代和办事效率不匹配。有时也会因为涉及法律法规问题导致必须按照某些规章制度进行。

从管理的角度的来看,会存在以下问题:

  1. 过程不可见。因为管理者一般是通过文档的交付来了解和控制软件的生产进度,所以会导致进度不可控问题。
  2. 伴随着新的增量增加,系统结构会不可控的逐渐退化。

所以我们需要尽量避免在大型的或者生命周期很长的系统中使用增量式开发,而是要提前制订计划。从而根据体系结构明确职责,按照计划完成开发过程。

面向复用的软件工程

我们在生活中不难发现,许多东西会重复利用,而不是仅仅使用一次。在使用面向对象思想进行编程的过程中,也采用了许多这种方法:比如Java语言中采用的封装和继承的思想。
我们通过封装和继承,就不用再每一次都编写一些重复度很大的代码,从而节省了人力物力和时间。

软件复用也是采用这样的一种思想:软件复用是一种计算机软件工程方法和理论。60年代的“软件危机”使程序设计人员明白难于维护的软件成本是极其高昂的,当软件的规模不断扩大时,这种软件的综合成本可以说是没有人能负担的,并且即使投入了高昂的资金也难以得到可靠的产品,而软件重用的思想是解决这一问题的根本方法 。

在这里插入图片描述

图源:百度百科
需求工程过程的四个主要阶段
  1. 可行性研究
  2. 需求导出和分析
  3. 需求描述
  4. 需求有效性验证
复用级别

按抽象程度的高低,可以划分为如下的复用级别:

  1. 代码的复用
    包括目标代码和源代码的复用。其中目标代码的复用级别最低,历史也最久,当前大部分编程语言的运行支持系统都提供了连接(Link)、绑定(Binding)等功能来支持这种复用。源代码的复用级别略高于目标代码的复用。
  2. 设计的复用
    设计结果比源程序的抽象级别更高,因此它的复用受实现环境的影响较少,从而使可复用构件被复用的机会更多,并且所需的修改更少。这种复用有三种途径,第一种途径是从现有系统的设计结果中提取一些可复用的设计构件,并把这些构件应用于新系统的设计;第二种途径是把一个现有系统的全部设计文档在新的软硬件平台上重新实现,也就是把一个设计运用于多个具体的实现;第三种途径是独立于任何具体的应用,有计划地开发一些可复用的设计构件。
  3. 分析的复用
    这是比设计结果更高级别的复用,可复用的分析构件是针对问题域的某些事物或某些问题的抽象程度更高的解法,受设计技术及实现条件的影响很少,所以可复用的机会更大。复用的途径也有三种,即从现有系统的分析结果中提取可复用构件用于新系统的分析;用一份完整的分析文档作输入产生针对不同软硬件平台和其它实现条件的多项设计;独立于具体应用,专门开发一些可复用的分析构件。
  4. 测试信息的复用
    主要包括测试用例的复用和测试过程信息的复用。

声明:

本文参考:

  1. 《软件工程》(原书第9版)机械工业出版社
  2. 《软件项目管理》(中文版第5版)机械工业出版社

关于转载:

允许非商业用途转载,注明出处和链接即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值