《编程的逻辑》读后感(第5章)领域模型

领域模型,顾名思义,就是需求所涉及的领域的一个建模,更通俗的讲法是业务模型。

在业务对象模型中,业务角色代表雇员将担当的角色,而业务实体则代表雇员将处理的对象。一方面,可以使用业务对象模型来确定业务雇员将如何进行交互,以产生业务主角所期望的结果。另一方面,系统用例模型和设计模型指定了业务的信息系统。业务建模和系统建模解决不同的问题,其抽象程度也不一样。所以一般而言,信息系统不应该直接出现在业务模型中。另一方面,雇员作为业务角色来使用信息系统,实现相互之间的通信、与主角的通信以及对业务实体信息进行访问。所有的链接、关联关系或属性都有某个潜在的信息系统对其进行支持。这两类建模环境有以下关系:作为特定业务角色的雇员与信息系统的一个系统主角相对应。如果建立的信息系统使该雇员在业务用例中的所有工作都得到一个系统用例的支持,则他最有可能得到最好的支持。 另外,如果业务用例规模大、生存期长或者合并了多个独立领域中的工作,信息系统用例将可以支持业务角色的操作。 雇员工作的对象(建模为业务实体)常在信息系统中得到表现。在信息系统的对象模型中,这些业务实体作为实体类出现。业务实体之间的关联关系和聚合关系常常使设计模型中实体类之间产生对应的关联关系和聚合关系。 因此,系统用例访问并操作设计模型中的实体类,这些实体类代表由被支持业务用例访问的业务实体。最后,直接使用业务信息系统的业务主角也成为信息系统的系统主角。 当确定对支持业务的信息系统的需求时,这些关系十分关键。

领域模型设计是需求分析的关键步骤。它帮助用户及需求分析人员建立业务概念,确定用户业务的问题域,系统涉及的业务范围等等。领域模型设计的步骤为:

1. 从业务描述中提取名词;

2. 从提取出来的名词中总结业务实体,区分名词中的属性、角色、实体、实例,形成问题域中操作实体的集合;

3. 从业务实体集合中抽象业务模型,建立问题域的概念(例如在前面的例子中,我们把容易变质的水果称之为“短期保持水果”,当然也可以是其它说法,只要能跟用户达成共识即可);

4. 用UML提供的方法和图例进行领域模型设计、确定模型之间的关系

领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。

《编程的逻辑》读后感(第4章)需求模型

凡事都有一个开头,软件项目也不例外,对于软件项目来说,需求就是项目最开始的一个输入。所以需求很重要,发现客户的问题,并且引导客户将需求调整为更合理的需求,我们要想做好需求分析,要时刻抓住”客户的问题和价值“。

需求是对客户来说有价值的事情,功能是系统为了实现需求而具备的能力,修复需求错误的成本非常高,所以需求分析的目的是挖掘客户的问题,实现客户的价值尤为重要。需求分析步骤总结下来是:5W + 1H + 8C

5W:When、Where、Who、What、Why

1H:How

8C:8个约束和限制,即Constraints,包括性能Performance、成本Cost、时间Time、可靠性Reliability、安全性Security、合规性Compliance、技术性Technology、兼容性Compatibility

(1) 5W

    Who:就是需求利益相关人,我们按照需求的生命周期流程来分类,包括购买者->管理者->使用者->评估者,评估者一般是政府机构、第三方咨询公司、各类组织等”;

    When:就是指需求相关的时间,这里可以指季节,如春夏秋冬;也可以指作息时间,例如白天晚上,所有和时间相关的信息都属于此类”

    Where:就是需求相关的地点,这里可以指国家,如美国和中国;也可以指场所,例如室内、街道等

    What:就是需求的最终输出,即客户希望得到什么东西,例如一份文件、一个报表、一辆车;

    Why:就是需求的驱动力,即客户为什么提这个需求,客户的问题在哪里;

  【一个长颈鹿的实例:5W】:

有一个建筑公司的需求分析人员收到了一个客户需求给我建一栋很大的房子’,于是建筑公司就建了房子,房子是欧式风格,又大又宽敞,全套宜家家居,全木地板,进口电器。。。。。简直是应有尽有,结果客户来收房子的时候说了一句话,让建筑公司吐血,客户说:“先生们,我是要一栋房子给我们的长颈鹿住!”

    对上照上面:

   “Who:这套房子的购买者是动物园、管理者是动物园的饲养员、使用者是长颈鹿、评估者可能是动物管理协会、卫生局等政府部门”

   “When:这个可能要求一年四季了,如果长颈鹿知识运来展览一下,那么就是展览的这几个月。”

   “Where:这个房子要建在动物园,而不是其它居民小区,那么动物园肯定有一些相关的规定”

   “What:要求一套房子,但不是简单意义上的房子,而是长颈鹿住的房子,这就需要考虑高度、围栏等”

   “Why: 这个就可能动物园要临时展览,也可能要引进长颈鹿,也有可能是原来的长颈鹿房子破旧了”

    此外,这5个W中有“Why”是最重要的,如果这个W错了,那么即使其它W都正确了,那么也是一个完美的错误需求,因为这才是需求的驱动力,也是需求的价值所在。

需求最终就是要解决客户的问题的,而Why就是真正的问题所在。

(2) 1H

    How是指需求本身的流程(注意:它不是不是指如何实现需求,那是设计阶段的事情)

    有的需求可能很简单,客户想要的东西也很明确;但有的需求比较复杂,涉及到多次交互,或者多个状态变化等,这种情况就要把需求的流程描述清楚。举个例子,取款是一个需求,但取款本身包含多次交互,要插卡、输入密码、输入金额、打印账单、取钱这些步骤,How就是用来描述这整个流程是如何运行的。也就是说涉及多个动作、多个步骤、多个状态、多个处理的需求要写清楚How 。

(3) 8C

  “性能Performance:主要包括响应时间和吞吐量”

   “成本Cost:就是客户愿意为这个需求花多少钱”

   “时间Time:指客户要求什么时候交付需求”

   “可靠性Reliability:指系统长时间正确运行的能力,银行、证券、电信这些公司,对宕机时间要求很严格的”

   “安全性Security:指对信息安全的保护能力,涉及到钱、身份证、社会保险号等需求对这个要求很高”

   “合规性Compliance:指满足各种行业标准、法律法规、规范等,例如3C、SOX、3GPP、ITUT等”

   “技术性Technology:有的客户可能要求我们采用某种技术,例如客户现在都是Windows的机器,那么就可能要求我们基于Windows平台开发”

   “兼容性Compatibility:指我们的产品与系统与客户其它已有的产品或者系统的兼容能力,要知道现在很少有产品是孤立运行的,特别是在大企业、大公司中,多个系统都是互相交互、互相配合的”

   需求分为功能属性和质量属性,前面的5W+1H是属于功能属性,而8C是属于质量属性,一个需求最终是否被正确的实现了,既要看功能属性是否正确,也要看质量属性是否正确,两者缺一不可。