草庐IT

什么是软件开发业务建模分析和结构化建模分析

靠谱杨 2023-03-28 原文

软件开发业务建模分析

业务建模

三级需求:业务需求、用户需求、系统需求(也叫功能需求)

简单理解:
  • 业务需求:怎么实现盈利,怎么吸引用户。

    • ” OKR(Objectives and Key Results)“目标与关键成果法,业务需求的目标是吸引用户,获得盈利,所以在描述业务需求的时候,需要方法技巧。

      OKR的主要目标是明确公司和团队的“目标”以及明确每个目标达成的可衡量的“关键结果”。

    • SMART原则将目标一共分为五个维度:

      • Specific(具体的):我们的产品具体要做什么,要怎么做。
      • Measurable(可衡量的):我们的产品会给用户带来什么好处,这个好处用什么方式度量。
      • Attainable(可实现的):产品的可实现性,砍掉不切实际。
      • Relevant(相关的):抓住关键目标,砍掉产品的无关目标。
      • Time-Based(有时间限制的):有时间限制的就是砍掉无限拖延。前面确立的项目都很好,但是需要实现的时间太长则没有意义。
  • 用户需求:怎么让用户选择你的产品。

  • 系统需求:你的产品怎么能更好用一点。

    其中系统需求基于用户需求、业务需求基于你的功能如何让用户离不开你的产品。


详细解释:
  • 业务需求:业务需求来自公司、来自老板。业务需求描述的是愿景级的需求,主要描述宏观上产品解决了市场上的哪类人群的痛点和需求,这里会通过描述用户画像等完成产品故事的表达,主要站在整个系统(产品)和公司的角度进行分析,表示组织或客户高层次的目标
  • 用户需求:用户需求来自用户。对用户群体进行分类,从某一类用户的视角分析这一类用户对软件的需求。描述的是用户的目标,或用户要求系统必须能完成的任务
  • 系统需求:系统需求站在了产品的角度,把具体的用户需求,变成软件的功能要求。功能需求是基于业务需求和用户需求进行需求分析的结果。规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求

  • 第一步:构建系统上下范围图(顶层数据流图、0层数据流图),确定系统边界,确定与系统直接交互的外部实体。

  • 第二步:构建第1层数据流图,确定与系统直接交互的外部的相邻系统实体,确定业务事件的发生并引起的进出数据流

    • 业务事件存在系统外部,业务事件是可以引起系统内部一系列活动的外部事件(可以是人、物、时间等等)
    • 业务用例存在系统内部,业务用例可以响应一个业务事件的工作。
    • 外部业务事件触发内部业务用例进行数据交互(进出的数据流),输入的数据由业务事件提供,输出的数据由业务用例提供。
  • 第三步:研究每个业务用例,编写业务用例场景。这里对应用户需求。

  • 第四步:利益相关者决定要构建的最佳产品。

  • 第五步:基于第三步和第四步的结论,通过产品用例分析、站在系统角度编写用例场景。

  • 第六步:分析师为产品编写故事或需求。


系统功能架构图示例:

  • 对应数据流图,通常以3层结构为宜。
  • 其中第1层数据流图(中央监控、病症监控 ...),对应一个个业务用例(功能模块),这里以3 ~ 7个模块为宜。


软件开发结构化建模分析

  • 软件模型:对软件系统在各个开发阶段本质特性的描述,它要反映软件系统的形成过程。
    • 领域模型:也叫业务模型,描述软件所要服务的业务领域的业务状况和业务关系
    • 需求模型:描述软件可向用户提供的外在特性,包括软件的目标、功能、性能等。
    • 设计模型:软件中具体模块的设计方案(GoF23种设计模式),详细设计、界面和数据库等。
    • 实现模型:软件的具体编码实现,软件的实现结构。
    • 测试模型:测试软件的模型描述。
  • 软件建模方法:
    • 面向功能
    • 面向数据
    • 面向对象
  • 结构化分析的模型
    • 数据模型(ERD图 Entity Relationship Diagram)
    • 功能模型(DFD数据流图 Data Flow Diagram)
    • 行为模型:包括交互模型和状态模型。侧重对象之间的交互、状态和活动。(顺序图、状态图、活动图)

数据流图

图片来自:https://www.jianshu.com/p/2bf96cb928b3

业务流程图

有关什么是软件开发业务建模分析和结构化建模分析的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  6. ruby-on-rails - 建模收藏夹 - 2

    我希望将Favorite模型添加到我的User和Link模型。业务逻辑用户可以有多个链接(即可以添加多个链接)用户可以收藏多个链接(他们自己的或其他用户的)一个链接可以被多个用户收藏,但只有一个所有者我对如何为这种关联建模以及在模型就位后如何创建用户收藏夹感到困惑?classUser 最佳答案 下面的数据模型怎么样:classUser:destroyhas_many:favorite_links,:through=>:favorites,:source=>:linkendclassLink:destroyhas_many:favor

  7. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  8. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  9. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  10. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

随机推荐