65.9K
CodeProject 正在变化。 阅读更多。
Home

Scoping、分析和估算

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.60/5 (11投票s)

2005 年 3 月 29 日

8分钟阅读

viewsIcon

38901

一种非传统的方法来处理范围界定、分析和估算 - 适合初学者。

引言

目标

我们所有人在工作中都会在某个时候做这件事。事实上,我们在生活中时时刻刻都在做。试图弄清楚我们需要多少资源(例如时间、金钱、精力)才能实现我们的目标。这可能是一次计算预期支出,或将一张纸屑扔进几英尺外的垃圾桶,或编写代码所需的时间,或任何需要时间的事情。

为了更好地了解完成一项工作所涉及的内容,我们需要进行估算。估算本身取决于我们对工作范围的分析。如果工作范围没有得到清晰的解释,分析就无法正确进行。理解、解释和记录工作范围是相当困难的。这通常是由于领域知识不足、业务复杂性、每个客户的特定需求以及工作流程和流程展示不佳。本文从开发人员的视角而非分析师的视角,着重于范围界定、分析和估算,同时牢记上述不足。

提案

在本文中,我将尝试解释如何创建一个资源管理工具。我将使用 **对象层次结构树** 来识别我应用程序中的业务对象,创建一些简单的流程来理解需要做什么,并识别应用程序的用户。

1.1 愿景

“开发一个易于使用、通用、资源管理工具。”

1.2 用例

  • **请求** 资源:授权人员向相关部门发出资源请求。
  • **识别** 资源:资源经理然后搜索是否有任何匹配资源的可用性。
  • **评估** 资源:授权人员对资源进行评估。
  • **分配** 资源:资源被分配给个人或部门。

1.3 每个工作流程的需求

1.3.1 资源请求

  • 提供资源的 **名称**。
  • 提供资源的 **类型**。
  • 提供资源的 **描述**。
  • 提供想要资源的 **原因**。
  • 提供请求的 **日期**。
  • 提供预计资源可用 **日期**。
  • 提供预计资源的近似 **成本** 范围。
  • 提供资源的 **重要性**。

Sample screenshot

1.3.3 识别资源

  • **搜索** 所需资源。
  • **显示** 搜索结果。
  • **查看** 可用资源的详细信息。

Sample screenshot

1.3.4 评估资源

Sample screenshot

1.3.5 分配资源

Sample screenshot

1.4 识别业务实体。

现在到了我喜欢的部分。利用上述有限的文档,我们可以通过一点思考涵盖很多内容。我们首先尽可能地识别业务对象,然后创建一个对象层次结构树来更好地理解它们。

首先,让我们从一个代表我们正在开发的工具的通用对象开始。我称之为“Rap”。然后,通过阅读提供的文档,我识别了可能的业务对象,并将其字体更改为粗斜体橙色。

除了业务实体之外,还有一些实用对象,例如数据访问对象、自定义异常处理、日志记录、数据格式化程序、安全、常量和外部接口。同时也要注意常规对象,如用户、表单、错误和其他消息文本。

因此,通过结合经验和现有文档,我得出了以下对象树。现在这还不是最终版本,根据我们进一步的理解,我们可以修改对象树。

Sample screenshot

对象树让我对开发应用程序所涉及的内容有了更好的认识,并且比数千行的文档更容易理解。虽然这不是一个面向对象的继承树,但它确实涉及类似的思考方式。因此,当我们进行范围界定和分析时,这个树会不断扩展,最终我们会得到许多对象。

1.5 将对象映射到工作流程

范围界定和分析的这一部分更多地用于可追溯性。它帮助我们理解对象是如何与提供的工作流程相关联的,并证明它们存在的合理性。这与 UML 中使用的活动图有相似之处。对象是“流”,工作流程的节点是“活动”。

Sample screenshot

我们可以争论具体哪个工作流程节点属于哪个对象。这正是提高我们对应用程序理解所需要的。我们越努力地将事物纳入对象树和工作流程图,我们就越能识别出为了满足需求我们还需要做什么。我们越努力地将事物纳入对象树和工作流程图,我们就越能理解需求是否还有差距或是否不言自明。它有助于我们认识到我们是否正确理解了客户的需求。例如,直到我试图完成映射,我才识别出“数据”对象。而且我仍然不确定“填写请求表单”工作流程节点应该放在“请求”对象还是“表单”对象。但我仍然觉得上面的映射让我对这里涉及的内容有了更清晰的认识。

1.6 估算工作量。

我写过两篇关于我的估算方法的文章。它们是 如何估算软件项目如何按人时估算软件项目

在估算时,请考虑以下一般要点

  • 识别所需的体系结构、窗体、类、组件和支持文档。
  • 定义所有项目的结构和目的。
  • 编写测试用例。
  • 编码、代码优化、单元测试和集成测试。
  • 回归测试、性能测试。
  • 部署问题和验收测试。
  • Beta 测试和保修。

我将重点关注本文中识别的两个对象如下

1.6.1 表单

从对象和工作流程图,我们现在可以进一步分解细节,几乎达到 GUI 级别。图中的表单对象/工作流程将是请求和原因表单。请求的详细信息在第 1.3.1 节中提供。使用这些,我们可以得出每个表单所需的控件类型。

例如,

  • 提供资源的名称 -> 标签和文本框。
  • 提供资源的类型 -> 标签和下拉列表。
  • 提供资源的描述 -> 标签和多行文本框。
  • 提供想要资源的理由 -> 标签和多行文本框。
  • 提供请求的日期 -> 标签和日历控件。
  • 提供预计资源可用的日期 -> 标签和日历控件。
  • 提供预计资源的近似成本范围 -> 两个标签和两个文本框。
  • 提供资源的 গুরুত্ব -> 标签和下拉列表。

大多数表单都放在一个模板内,该模板由顶部、左侧、右侧、底部和中央部分组成。这些部分中的每一个都可能包含需要单独估算的内容。再次,描述表单、控件和内容位置的文档、人体工程学投入、获得各个利益相关者批准表单所需的时间和精力,都属于估算的一部分。

根据我的经验,从概念到客户批准,这个表单需要至少两天的人工。

1.6.2 验证器

验证器通常实现数据完整性规则和业务规则。数据完整性意味着数据包含可接受的字符。一个简单的例子是数值数据通常不包含非数值字符。业务规则将是验证在过程计算的值或限制规则,例如“用户每次请求不能选择超过一个资源”。因此,我定义了两个特定的验证对象来执行特定类型的验证,“业务规则”对象和“有效数据类型”对象。现在,验证可能分布在应用程序的不同层中。例如,在部署在 LAN 上的 Windows 窗体应用程序中,数据类型验证可能只发生在客户端。但业务规则通常会发生在数据库层和业务层(如果有的话)。因此,在估算“验证器”对象的投入时,请记住它可能被不同的层使用。根据表单或一组表单,可能需要开发更具体的验证器类。

我认为对于上述需求,(有效的)验证包括,

  • 资源名称是必填项。
  • 请求者姓名是必填项。
  • 接受或拒绝资源的评估理由是必填项。
  • 文本框值的长度限制。
  • 日期格式和范围要正确。
  • 资源类型应匹配预定义值。

根据我的经验,提供这些验证(再次)需要至少两天的人工(包括设计、编码、测试和客户批准)。

对于 1.6.1 和 1.6.2,我们已经确定了一些在开发过程中可能需要完成的工作,而我们甚至还没有完成范围界定和分析。因此,发现还有多少工作要做的情况会越来越多,而且是在更容易判断所需工作量的一个非常低的层面上。这是一种简单且不那么粗糙的估算工作量的方法。

1.7 谁可以被认为是初学者?

对于任何估算、范围界定或分析,对所有开发阶段的实际知识都起着重要作用。并且,如果一个人具有开发、设计和测试的经验,以及完成过几个端到端项目的经验,那么本文提到的步骤会更容易理解。这种方法的优势在于,即使您不知道任何行业公认的估算方法(如功能点分析),您也可以估算应用程序和模块。*而且您可以获得一石三鸟的效果,即估算、范围界定和分析可以同时进行*。将此视为成为分析师、架构师甚至项目经理的中间阶段。

© . All rights reserved.