《软件工程(第4版?修订版)》—第2章2.1节过程的含义

    xiaoxiao2023-12-19  178

    本节书摘来自异步社区《软件工程(第4版?修订版)》一书中的第2章2.1节过程的含义,作者【美】Shari Lawrence Pfleeger , 【加】Joanne M.Atlee,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    第2章 过程和生命周期的建模软件工程(第4版•修订版)本章讨论以下内容:

    过程的含义;软件开发的产品、过程和资源;软件开发过程的若干模型;过程建模的工具和技术。我们在第1章中看到,软件工程既是一个创造的过程,又是一个逐步进行的过程,它涉及很多人员,这些人员生产不同类型的产品。在这一章,我们会详细分析这些步骤,讨论各种活动的组织方式,以便我们能够协调所做的各种活动以及决定什么时候进行这些活动。本章首先定义什么是过程,以便我们能够理解对软件开发建模时必须包含哪些内容。接着讨论几种软件过程模型。在理解了我们想要使用的模型类型后,再详细地讨论静态建模和动态建模这两种技术。最后,把其中一些技术应用到信息系统和实时系统的例子中。

    2.1 过程的含义软件工程(第4版•修订版)当提供一项服务或创建一种产品的时候,无论是开发软件、撰写报告还是进行商务旅行,人们总是遵循一系列的步骤来完成任务。通常,每次都使用同样的顺序来完成任务。例如,在房子的配线安装之前通常不能搭建水泥墙,或者把所有的成分混合之后才能烤制蛋糕。可以将一组有序的任务称为过程(process):它涉及活动、约束和资源使用的一系列步骤,用于产生某种想要的输出。

    正如第1章中定义的那样,一个过程常常涉及一系列的工具和技术。任何过程都应具有如下特性。

    过程规定了所有主要的过程活动。过程遵从一组约束(例如项目进度)使用资源,并产生中间结果和最终产品。过程可以由用某种方式链接起来的子过程构成。过程可以组织成层次结构,以便使每一个子过程具有自己的过程模型。每一个过程活动具有进入和退出标准,这样可以知道活动什么时候开始以及什么时候结束。活动可以按一定的顺序加以组织,这样就可以清楚地知道应当在什么时候执行一个活动(相对于其他活动)。每一个过程都有其指导原则,用于解释每一个活动的目标。约束或控制可以应用于活动、资源或产品。例如,预算或进度可以制约完成活动所需的时间,工具可以限制资源使用的方式。我们有时把涉及产品构建的这种过程称为生命周期(life cycle)。因为软件开发过程描述了软件产品从概念到实现、交付、使用和维护的整个过程,因此,有时把软件开发过程称为软件生命周期(software life cycle)。

    过程之所以重要,是因为它强制活动具有一致性和一定的结构。当我们知道如何把事情做好而且希望其他人以同样的方式做事时,这些特性就特别有用。例如,如果Sam是一个好的瓦工,他可以写下他砌砖过程的说明,这样Sara也就能够学会如何把砖砌得同样好。他可能考虑人们做事方式之间的差别,例如,他可以这样书写相关说明,使得Sara不论用左手还是右手都能够学会砌砖。同样,软件开发过程也能够用灵活的方式加以描述,让人们能够使用自己喜好的技术和工具来设计和构造软件。一个过程模型可能要求在编码之前进行设计,但是它允许采用许多不同的设计技术。因此,过程有助于保持大量不同人员开发的产品和服务之间的一致性和质量。

    过程不仅仅是步骤。从第1章可以看到,步骤就像菜谱,它是把工具和技术组合起来生产产品的一种结构化方式。过程是步骤的集合,它将步骤组织起来使人们能够生产满足一系列目标和标准的产品。实际上,过程可能建议我们从若干步骤中进行选择,只要它能满足人们的目标。例如,过程可能要求在编码开始之前检查设计构件,或者可以通过非正式的评审或正式的审查来完成检查。审查和检查有其各自的步骤,但针对的是相同的目标。

    过程结构允许我们分析、理解、控制和改进组成过程的活动,并以此来指导我们的行动。要了解它如何进行,考虑一下制作巧克力蛋糕的过程。这个过程可能包含若干步骤,例如购买配料和找到合适的烹饪用具。食谱描述了配料及烤制的过程,其中也包含活动(例如,在与其他的配料混合之前要先打鸡蛋)、约束(例如温度要求:在把巧克力与糖调配之前,需要先把巧克力加热到让其融化的温度)和资源(如糖、面粉、鸡蛋和巧克力)。假设Chuck依据这个食谱烤制巧克力蛋糕。当蛋糕做好后,他尝了一下,觉得蛋糕太甜了。他看了一下食谱,了解到蛋糕甜的原因是糖配得太多。然后,他烤制了另一份蛋糕,这次他减少了糖的用量。烤好后他又尝了一下,觉得现在巧克力味道不足。于是,他在再次修订的配料中增加了一定量的可可粉,然后又烤制了一次。经过几次反复之后,其中每一次都改变某些成分或活动(如把烤蛋糕的时间延长一些,或在巧克力与鸡蛋混合之前,先将巧克力冷却下来),Chuck终于烤出了令自己满意的蛋糕。如果没有记录这部分过程的食谱,Chuck就不可能这么容易地做出改变以及对结果进行评估。

    就获取经验并把经验传授给他人而言,过程也是很重要的。就像主厨把他拿手的食谱传授给他的同事和朋友一样,优秀的工匠也能够把记载的过程传授下去。实际上,学员和教师的概念就是基于这样一种思想:共享经验,从而将高级人员的技能传授给初学者。

    同样,我们希望从过去的开发项目中获取经验,记录能够产生高质量软件的最佳实践,遵循这样的软件开发过程,在为客户构建产品的时候,就能够理解、控制和改进开发。我们在第1章看到,软件开发通常包含下面几个阶段。

    需求分析和定义。系统设计。程序设计。编写程序(程序实现)。单元测试。集成测试。系统测试。系统交付。维护。每一阶段本身就可以描述为一组活动的过程(或一组过程)。并且每一个活动都包含约束、输出和资源。例如,需求分析和定义阶段将用户用某种方式表述的功能和特征作为初始输入,这一阶段的最终输出是一组需求。但是,在用户和开发人员之间进行交流之后,有了变更和其他选择时,就有可能会出现中间产品。这个阶段中还包括一些约束,例如,产生需求文档的预算和进度,包含的需求种类的标准以及用于表达需求的表示法。

    本书讨论所有这些阶段。对每一个阶段,我们会仔细研究涉及的过程、资源、活动和输出,我们将了解它们如何影响最终产品(即有用的软件)的质量。处理开发过程中的每一个开发阶段的方式有很多种,活动、资源和输出的每一种配置都构成一个过程,并且过程描述了在每一阶段都发生了什么。例如,设计可能包含一个原型化过程,其中,考虑了很多设计决策,以便开发人员能够选择合适的方法和进行过程复用(该过程的复用使前面产生的设计构件包含在了当前的设计中)。

    每一个过程都可以用不同的方式加以描述,文本、图形或两者结合起来使用。软件工程研究人员提出了各种描述格式,通常组织为包含关键过程特征的模型。本章的剩余部分将研究不同的软件开发过程模型,以便读者能够理解组织起来的过程活动是如何使开发更加有效的。

    本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

    相关资源:用TCP/IP进行网际互联 第三卷:客户-服务器编程与应用(Linux/POSIX套接字版)--详细书签版
    最新回复(0)