《实践者的研究方法》—— 第2章 软件工程 2.3 软件工程实践

2.3 软件工程实践

在2.2节中,曾介绍过一种由一组活动组成的通用软件过程模型,建立了软件工程实践的框架。通用的框架活动——沟通、策划、建模、构建和部署——和普适性活动构成了软件工程工作的体系结构的轮廓。但是软件工程的实践如何融入该框架呢?在以下几节里,读者将会对应用于这些框架活动的基本概念和原则有一个基本了解。

 

2.3.1 实践的精髓

在现代计算机发明之前,有一本经典著作《How to Solve it》,在书中,George Polya[Pol45]列出了解决问题的精髓,这也正是软件工程实践的精髓:

1.理解问题(沟通和分析)。

2.策划解决方案(建模和软件设计)。

3.实施计划(代码生成)。

4.检查结果的正确性(测试和质量保证)。

在软件工程中,这些常识性步骤引发了一系列基本问题(与[Pol45]相对应):

理解问题。虽然不愿承认,但生活中的问题很多都源于我们的傲慢。我们只听了几秒钟就断言,好,我懂了,让我们开始解决这个问题吧。不幸的是,理解一个问题不总是那么容易,需要花一点时间回答几个简单问题:

谁将从问题的解决中获益?也就是说,谁是利益相关者?

有哪些是未知的?哪些数据、功能和特性是解决问题所必需的?

问题可以划分吗?是否可以描述为更小、更容易理解的问题?

问题可以图形化描述吗?可以建立分析模型吗?

策划解决方案。现在你理解了要解决的问题(或者你这样认为),并迫不及待地开始编码。在编码之前,稍稍慢下来做一点点设计:

以前曾经见过类似问题吗?在潜在的解决方案中,是否可以识别一些模式?是否已经有软件实现了所需要的数据、功能和特性?

类似问题是否解决过?如果是,解决方案所包含元素是否可以复用?

可以定义子问题吗?如果可以,子问题是否已有解决方案?

能用一种可以很快实现的方式来描述解决方案吗?能构建出设计模型吗?

实施计划。前面所创建的设计勾画了所要构建的系统的路线图。可能存在没有想到的路径,也可能在实施过程中会发现更好的解决路径,但是这个计划可以保证在实施过程中不至迷失方向。需要考虑的问题是:

解决方案和计划一致吗?源码是否可追溯到设计模型?

解决方案的每个组成部分是否可以证明正确?设计和代码是否经过评审?或者采用更好的方式,算法是否经过正确性证明?

检查结果。你不能保证解决方案是最完美的,但是可以保证设计足够的测试来发现尽可能多的错误。为此,需回答:

能否测试解决方案的每个部分?是否实现了合理的测试策略?

解决方案是否产生了与所要求的数据、功能和特性一致的结果?是否按照项目利益相关者的需求进行了确认?

不足为奇,上述方法大多是常识。但实际上,有充足的理由可以证明,在软件工程中采用常识将让你永远不会迷失方向。

2.3.2 通用原则

原则这个词在字典里的定义是“某种思想体系所需要的重要的根本规则或者假设”。在本书中,我们将讨论一些不同抽象层次上的原则。一些原则关注软件工程的整体,另一些原则考虑特定的、通用的框架活动(比如沟通),还有一些关注软件工程的动作(比如架构设计)或者技术任务(比如编制用例场景)。无论关注哪个层次,原则都可以帮助我们建立一种思维方式,进行扎实的软件工程实践。因此,原则非常重要。

David Hooker[Hoo96]提出了7个关注软件工程整体实践的原则,这里复述如下。

第1原则:存在价值

一个软件系统因能为用户提供价值而具有存在价值,所有的决策都应该基于这个思想。在确定系统需求之前,在关注系统功能之前,在决定硬件平台或者开发过程之前,问问你自己:这确实能为系统增加真正的价值吗?如果答案是不,那就坚决不做。所有的其他原则都以这条原则为基础。

第2原则:保持简洁

软件设计并不是一种随意的过程,在软件设计中需要考虑很多因素。所有的设计都应该尽可能简洁,但不是过于简化。这有助于构建更易于理解和易于维护的系统。这并不是说有些特性(甚至是内部特性)应该以“简洁”为借口而取消。的确,优雅的设计通常也是简洁的设计,但简洁也不意味着“快速和粗糙”。事实上,它经常是经过大量思考和多次工作迭代才达到的,这样做的回报是所得到的软件更易于维护且错误更少。

第3原则:保持愿景

清晰的愿景是软件项目成功的基础。没有愿景,项目将会由于它有“两种或者更多种思想”而永远不能结束;如果缺乏概念的一致性,系统就好像是由许多不协调的设计补丁、错误的集成方式强行拼凑在一起……如果不能保持软件系统体系架构的愿景,就会削弱甚至彻底破坏设计良好的系统。授权体系架构师,使其能够持有愿景,并保证系统实现始终与愿景保持一致,这对项目开发的成功至关重要。

第4原则:关注使用者

有产业实力的软件系统不是在真空中开发和使用的。通常软件系统必定是由开发者以外的人员使用、维护和编制文档等,因此必须要让别人理解你的系统。在需求说明、设计和实现过程中,牢记要让别人理解你所做的事情。对于任何一个软件产品,其工作产品都可能有很多用户。需求说明时应时刻想到用户,设计中始终想到实现,编码时想着那些要维护和扩展系统的人。一些人可能不得不调试你所编写的代码,这使得他们成了你所编写代码的使用者,尽可能地使他们的工作简单化会大大提升系统的价值。

第5原则:面向未来

生命周期持久的系统具有更高的价值。在现今的计算环境中,需求规格说明随时会改变,硬件平台几个月后就会淘汰,软件生命周期都是以月而不是以年来衡量的。然而,真正具有“产业实力”的软件系统必须持久耐用。为了成功地做到这一点,系统必须能适应各种变化,能成功做到这一点的系统都是那些一开始就以这种路线来设计的系统。永远不要把自己的设计局限于一隅,经常问问“如果出现……应该怎样应对”,构建可以解决通用问题的系统,为各种可能的方案做好准备,这很可能会提高整个系统的可复用性。

第6原则:提前计划复用

复用既省时又省力。软件系统开发过程中,高水平的复用是很难实现的一个目标。曾有人宣称代码和设计复用是面向对象技术带来的主要好处,然而,这种投入的回报不会自动实现。为达到面向对象(或是传统)程序设计技术所能够提供的复用性,需要有前瞻性的设计和计划。系统开发过程中的各个层面上都有多种技术可实现复用……提前做好复用计划将降低开发费用,并增加可复用构件以及构件化系统的价值。

第7原则:认真思考

这最后一条规则可能是最容易被忽略的。在行动之前清晰定位、完整思考通常能产生更好的结果。仔细思考可以提高做好事情的可能性,而且也能获得更多的知识,明确如何把事情做好。如果仔细思考过后还是把事情做错了,那么,这就变成了很有价值的经验。思考就是学习和了解本来一无所知的事情,使其成为研究答案的起点。把明确的思想应用在系统中,就产生了价值。使用前六条原则需要认真思考,这将带来巨大的潜在回报。

如果每位工程师、每个开发团队都能遵从Hooker这七条简单的原则,那么,开发复杂计算机软件系统时所遇到的许多困难都可以迎刃而解。

时间: 2024-08-17 16:13:04

《实践者的研究方法》—— 第2章 软件工程 2.3 软件工程实践的相关文章

《实践者的研究方法》—— 导读

前 言 如果有这样一款计算机软件,它能满足用户的需求,能在相当长的时间内无故障地运行,修改起来轻松便捷,使用起来更是得心应手,那么,这款软件必定是成功的,它切实改善了我们的生活.但是,如果有这样一款软件,它令用户失望,错误频出,修改起来困难重重,使用起来更是举步维艰,那么,这必定是一款失败的软件,它使我们的生活一团糟.谁都希望开发出优秀的软件,为我们的生活带来便利,而不是把自己陷入失败的深渊.要想使软件获得成功,在设计和构建软件时就需要有规范,需要采用工程化的方法. 自本书第1版问世以来的近35

《实践者的研究方法》—— 3.6 小结

3.6 小结 一个软件工程通用过程模型包含了一系列的框架和普适性活动.动作以及工作任务.每一种不同的过程模型都可以用不同的过程流来描述,工作流描述了框架活动.动作和任务是如何按顺序组织的.过程模式用来解决软件过程中遇到的共性问题. 习题与思考题 3.1 在本章的介绍中,Baetjer说过:"软件过程提供了用户与设计人员之间.用户与开发工具之间以及设计人员与开发工具之间的互动."对以下四个方面各设计五个问题:(1)设计人员应该问用户的:(2)用户应该问设计人员的:(3)用户对将要构建的软

《实践者的研究方法》—— 第2章 软件工程 2.4 软件开发神话

2.4 软件开发神话 软件开发神话,即关于软件及其开发过程的一些被人盲目相信的说法,这可以追溯到计算技术发展的初期.神话具有一些特点,让人觉得不可捉摸.例如,神话看起来是事实的合理描述(有时的确包含真实的成分),它们符合直觉,并且经常被那些知根知底的有经验的从业人员拿来宣传. 今天,大多数有见地的软件工程师已经意识到软件神话的本质--它实际上误导了管理者和从业人员对软件开发的态度,从而引发了严重的问题.然而,由于习惯和态度的根深蒂固,软件神话遗风犹在. 管理神话.像所有领域的经理一样,承担软件职

《实践者的研究方法》—— 第2章 软件工程 2.6 小结

2.6 小结 软件工程包含过程.方法和工具,这些工具使得快速构建高质量的复杂计算机系统成为可能.软件过程包括五个框架活动:沟通.策划.建模.构建和部署,这些活动适用于所有软件项目.软件工程实践遵照一组核心原则,是一项解决问题的活动. 尽管我们关于构建软件所需的软件知识和技能增长了,但仍有大量的软件神话将管理者和从业人员诱入歧途.随着对软件工程理解的深化,你就会逐渐明白,为什么无论何时遇到这些神话,都要不遗余力地揭露. 习题与思考题 2.1 图2-1中,将软件工程的三个层次放在了 "质量关注点&q

《实践者的研究方法》—— 第3章 软件工程 3.1 通用过程模型

第3章 Software Engineering: A Practitioner's Approach, Eighth Edition 软件过程结构 要 点 浏 览 概念:在开发产品或构建系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品.软件开发中所遵循的路线图就称为"软件过程". 人员:软件工程师及其管理人员根据需要调整开发过程,并遵循该过程.除此之外,软件的需求方也需要参与过程的定义.建立和测试. 重要性:软件过程提高了软件工程活动的稳定性.可控

《实践者的研究方法》—— 第2章 软件工程 2.2 软件过程

2.2 软件过程 软件过程是工作产品构建时所执行的一系列活动.动作和任务的集合.活动(activity)主要实现宽泛的目标(如与利益相关者进行沟通),与应用领域.项目大小.结果复杂性或者实施软件工程的重要程度没有直接关系.动作(action,如体系结构设计)包含了主要工作产品(如体系结构设计模型)生产过程中的一系列任务.任务(task)关注小而明确的目标,能够产生实际产品(如构建一个单元测试). 在软件工程领域,过程不是对如何构建计算机软件的严格的规定,而是一种具有可适应性的调整方法,以便于工作

《实践者的研究方法》—— 第2章 软件工程 2.5 这一切是如何开始的

2.5 这一切是如何开始的 每个软件工程项目都来自业务需求--对现有应用程序缺陷的纠正,改变遗留系统以适应新的业务环境,扩展现有应用程序功能和特性,或者开发某种新的产品.服务或系统. 在软件项目的初期,业务需求通常是在简短的谈话过程中非正式地表达出来的.以下这段简短谈话就是一个典型的例子. SafeHome 如何开始一个软件项目   [场景] CPI公司的会议室里.CPI是一个虚构的为家庭和贸易应用生产消费产品的公司. [人物] Mal Golden,产品开发部高级经理:Lisa Perez,营

《实践者的研究方法》—— 第3章 软件工程3.2 定义框架活动

3.2 定义框架活动 尽管第2章描述了5种框架活动,并给出了每种活动的基本定义,但是软件团队要在软件过程中具体执行这些活动中的任何一个,还需要更多信息.因此,我们面临一个关键问题:针对给定的问题.开发人员和利益相关者,哪些动作适合于框架活动? 对于由个人负责的小型软件项目(可能远程),其需求简单明确,沟通活动也许仅仅是与合适的利益相关者的一个电话或一封邮件.因此,主要的动作是电话交流,这个动作所包括的主要工作任务(任务集)有: 1.通过电话与利益相关者取得联系. 2.讨论需求并做记录. 3.将笔

《实践者的研究方法》—— 第3章 软件工程 3.3 明确任务集

3.3 明确任务集 我们再来看图3-1,每一个软件工程动作(如需求获取以及与沟通活动相关的动作)都由若干个任务集(task set)构成,而每一个任务集都由软件工程工作任务.相关工作产品.质量保证点和项目里程碑组成.需要选择最能满足项目需要并适合开发团队特点的任务集.这就意味着软件工程动作可以根据软件项目的特定需要和项目团队的特点做适当的调整. 信息栏 任务集 任务集定义了为达到一个软件工程动作的目标所需要完成的工作.例如,需求获取(通常称为"需求收集")就是发生在沟通活动中的一个重要