Java 建模: 子整体软件开发,第二部分
| Java 建模: 子整体软件开发,第二部分 | ||||
Granville Miller(rmiller@togethersoft.com) Granville Miller 继续他关于子整体软件开发的讨论,并在概念上对需求收集作了概括。 让我们看看四个最常见的需求收集过程 — 功能特性、用户情景、用例和传统的软件需求规范 — 怎样适应灵活的软件开发过程更广阔的环境。 请在讨论论坛与作者和其他读者分享您关于本文的想法。 在上一个专栏中,我开始讨论子整体软件开发,它是一种注重对过程进行革新的开发方法。 这是我的信仰,正如我在上个月的宣言中所述,子整体软件开发有潜力让开发者取得非凡的成就。但是,这并不意味着我鼓吹完全排除过程。我看待过程的哲学可以总结如下:
过程太少,非凡的人能做平凡的事; 这个月,我将讨论子整体软件开发和过程的应用。尤其是,我们将谈到需求收集 — 任何软件开发周期的基础,还将谈到子整体方法 — 一种在开发周期中动态实现大量过程和方法的手段 — 如何能够增强您的需求收集过程。 软件不可见性问题 Frederick Brooks 把那些难以概念化和描述的新软件应用程序的属性称为软件不可见性。虽然其它如硬件之类的领域存在物质表现形式,但软件领域没有。我们可以看得见或者评测出软件应用程序的效果,不过其系统表现形式本质上却是思维的。这就是我们创建并依赖于软件模型的许多原因之一。模型赋予软件物理维度使我们得以更好的了解和表达它的方向。 任何软件建模工作的中心是需求收集。实现需求收集过程的选择依赖于开发项目更大的环境。 这个环境可以在需求收集过程自身中找到,也可以在另一个受到好评的模型中找到。在某些情况下,这个环境甚至可以在可交付使用的过程中找到。通过对我们探讨的不同需求可能性的地方进行考察,我们总能够辨别出系统的需求环境驻留在什么地方。需求环境是我们与软件不可见性对抗的领域。 恰当工作过程的选择 这里将探讨的需求收集过程抽象自三个一流的软件开发方法:“Rational 统一过程”( Rational Unified Process(RUP)),“功能驱动开发”(Feature-Driven Development(FDD))和“极端编程”( Extreme Programming(XP))。每种方法都提供大量极好的工具以协助需求收集工作。为符合子整体开发方法,我们将更多的着眼于必要的部分 — 与每种方法相关的需求收集过程 — 而不是整个方法自身。 除此之外,我们还会看看是否能够组织起一个更动态更可变的需求收集过程。继续讨论前,请用一些时间阅读这篇补充文章“子整体软件开发的十项准则”,看看子整体方法在理论上如何包含我们已知的东西。 四种最常见的需求收集过程是传统的软件收集规范(software requirements specification,SRS)、用例(use cases)、功能特性(features)和用户情景(user stories)。在随后的几个小节,我们将考虑每个过程,请特别注意需求环境 — 就是说,每个过程提供的用于将价值最大化的恰当情况和每个过程给开发项目带来的独特动力。有关以下概括的每个过程的应用的详细信息,请参阅参考资料。 软件需求规范 SRS 背后的思想是创建一个解决方案空间 — 也就是这样一个空间,其中开发小组已经设定了目标,但是,实现这些目标的行动的秩序和本质可以非常自由。因此,SRS 通常不试图指定单个解决方案,而是指定一系列可行的解决方案。然后,开发小组有足够的灵活性对解决正被创建系统问题的有效方法进行革新。 灵活性对于 SRS 来说,是缺点,也是优点。如果一个软件开发小组精通他们为之创建系统的这个领域,这个小组就可以轻松使用 SRS 最大限度的对这个领域进行革新。但是,在开发小组在他们不熟悉的领域进行日常工作的时代,传统的 SRS 作为需求收集过程可能有所欠缺。典型用户试图处理给定领域中的正常情况时,他们采取的步骤很可能是小组成员不了解的。因此,小组成员确定并创建的系统对于用户社区来说,可能不是最优的。 传统的 SRS 最适用于已被充分了解的领域和非常了解自己所处工作领域的开发小组 — 或者领域之外的专业知识能够很轻松就理解的开发环境。SRS 允许几乎不需任何技术就可以调整解决方案空间以管理系统中的更改。 用例 用例反应我们试图使用软件系统以达到目的时可能出现的所有事件。因为大部分软件系统支持多个目的,大部分用例模型由多个用例组成。例如,“支付逾期费”(Pay Late Fee)用例描述了录像带出租系统的用户遇到要支付逾期费这种情况时会发生的事。 用例中信息正确的水平是成功建立应用程序的必要条件。它根据环境不同而不同。如果领域的专家参与开发过程,用例就可以只勾画系统的路线。如果领域专家不参与项目,用例就有必要提供更多信息。用例是交流需求的最佳过程。但是,就像传统的 SRS,用例更适合已被很好了解的领域。用例可以经受一定程度的更改,但其它过程更能适应更改。
功能特性
一个示例功能特性可以是:
在每个功能特性保持在最小状态时,基于功能特性的方法效果最好。一个小组能在两星期或更少时间内实现的功能特性就是理想的功能特性。 用名为功能集(feature set)的组将功能特性组织起来。功能集包含描述给定目的或领域的功能特性。功能集和它的功能特性仅对需求进行了概述。作为描述需求的机制,功能特性必需和额外的环境相结合。 在“功能驱动开发”方法中,环境被精心设计成介于功能集和一个被称为“领域中立组件”(domain neutral component)的色彩标记类图表之间。 领域中立组件是个描述跨领域公共关系的语义模板。领域中立组件由瞬间间隔(moment-interval)、角色(role)、主题(subject)(当事人(party)、地点或事务)以及描述(description)组成。瞬间间隔是那些领域的短时间要素,如处于订货执行系统的一个订单。角色是个用户,系统和他交互并必须能识别出他。主题是形成领域的要素。描述是一种抽象,它集合了这些对象的元信息。图 1 是个录像带出租的领域中立组件。 作为一种需求收集过程,“功能驱动开发”非常灵活,它有助于在开发周期中更改管理。这一过程让您在项目进行过程中轻松检查并记录新的、更改的和已除去功能特性的数目。因为一般来说功能特性小, 更改现存功能特性或添加新功能特性不大可能要求在项目级上大量的返工。功能特性还有助于挑战软件不可见性,因为作为跟踪领域中立组件中的系统实体间交互结果的新功能特性可能被揭示。 功能特性可以用于熟悉给定领域的个体间的需求交流。以这种方式使用,基于功能特性的方法很可能是最节约的需求收集过程。但是,这些功能特性可能太依赖领域专业知识了,这是许多开发小组都没有的奢侈品。 用户情景 用户情景包含的信息往往比功能特性包含的信息多,尽管这不是必要条件。“极端编程”方法中,用户情景要求一个现场的客户提供部分环境。现场客户向开发小组描述理想的系统。然后,这个小组一点一点建立系统,给客户充分的机会定期查看结果。客户“监督着”这个可交付使用过程,并且在新用户情景中提出对系统的修改建议。整个环境由现场客户的反馈和递增的过程及交付相结合。 用户情景对于处理软件不可见性风险最高的项目来说,是最佳的方法。像功能特性一样,它们都足够小,能被轻松更改。 因为它们的环境基于运作的系统和客户,一经实现或不再有效都会被丢弃。但是,并不是每个项目都可以引入现场客户,因此用户情景并不适用于每个项目。这种方法因其缺少客户交互而丧失了它的优势。 结论 补充文章“子整体软件开发的十项最佳准则”讨论了模块性。模块性允许两种目的相同的活动可以互相代替。当用一种需求收集活动代替另一种时,重要的是把需求环境考虑在内。开发周期中途更改活动很可能会引入一组新的动力到项目。如果没有考虑到环境,这种行动可能会成为灾难。但是,仔细的计划和执行后,引入新活动就能帮助创建新的动力,从而促进了项目的成功。 下个月,我们来谈 Web 服务基础架构的建模。随着我们调查这个软件开发中新兴的领域,我将提供更多具体的技术示例和上两个专栏一直在讨论的最佳准则,所以,请别离开!
| |||||||||||||||||||||||||||||||||||||||


Granville 对于面向对象社区已经有十几年的经验了。他是
浙公网安备 33010602011771号