<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: FagaoMBSE</title>
    <description>The latest articles on DEV Community by FagaoMBSE (@jiayufagao).</description>
    <link>https://dev.to/jiayufagao</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1837483%2Ff03f28f3-1bdf-4f17-9338-6883d9eee598.png</url>
      <title>DEV Community: FagaoMBSE</title>
      <link>https://dev.to/jiayufagao</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jiayufagao"/>
    <language>en</language>
    <item>
      <title>1.2.1 Modeling Workflow ABCD</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Fri, 13 Sep 2024 13:20:46 +0000</pubDate>
      <link>https://dev.to/jiayufagao/121-modeling-workflow-abcd-1pl4</link>
      <guid>https://dev.to/jiayufagao/121-modeling-workflow-abcd-1pl4</guid>
      <description>&lt;p&gt;1.2 Modeling Workflow&lt;/p&gt;

&lt;p&gt;1.2.1 Modeling Workflow ABCD&lt;/p&gt;

&lt;p&gt;To create good requirements and designs, and thereby produce marketable systems at low cost, it's not enough to just shout slogans. It requires patience to learn and practice necessary modeling skills.&lt;/p&gt;

&lt;p&gt;Software development is incremental and iterative. Each iteration cycle needs to consider the following aspects in sequence:&lt;/p&gt;

&lt;p&gt;A-Business Modeling — Identify the target organization that needs improvement and the most pressing issues that need to be addressed.&lt;/p&gt;

&lt;p&gt;B-Requirements — Describe the overall performance that the information system to be introduced must have to improve the organization's problems.&lt;/p&gt;

&lt;p&gt;C-Analysis — Refine the core domain mechanisms that the information system to be introduced needs to encapsulate to meet functional requirements.&lt;/p&gt;

&lt;p&gt;D-Design — Consider quality requirements and design constraints, mapping core domain mechanisms to selected non-core domains for implementation.&lt;br&gt;
This book refers to the above ABCD as the four modeling workflows of software development.&lt;/p&gt;

&lt;p&gt;If using this book's methodology and UML notation, the ABCD would roughly look like Figure 1-5. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb36trtb11odckv7b5e53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb36trtb11odckv7b5e53.png" alt="Image description" width="800" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1-5 Four Modeling Workflows (This Book's Methodology + UML)&lt;/p&gt;

&lt;p&gt;Various fancy terms in the software world, whether genuinely innovative or pseudo-innovative, can basically be summarized using the above ABCD, for example:&lt;/p&gt;

&lt;p&gt;Product Manager, Requirements Engineer, Requirements Analyst: A+B+partial C.&lt;/p&gt;

&lt;p&gt;Business Architect: Could be A (where "business" means "organization"), or C (where "business" means "core domain").&lt;/p&gt;

&lt;p&gt;System Architect: C+D. Teams often say they want to improve system architecture, but what they actually want to improve is B-Requirements.&lt;/p&gt;

&lt;p&gt;Domain-Driven Design: C+D. Some teams claim they want to learn "Domain-Driven Design," but what they actually want to solve is A-Business Modeling.&lt;/p&gt;

&lt;p&gt;Microservices: C+D&lt;/p&gt;

&lt;p&gt;Design Patterns: C+D&lt;/p&gt;

&lt;p&gt;......&lt;/p&gt;

&lt;p&gt;Readers are welcome to add and update at any time.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Step-by-Step Modeling of WaterDistiller Using EA and SysML (01)</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Fri, 30 Aug 2024 03:55:41 +0000</pubDate>
      <link>https://dev.to/jiayufagao/step-by-step-modeling-of-waterdistiller-using-ea-and-sysml-01-181k</link>
      <guid>https://dev.to/jiayufagao/step-by-step-modeling-of-waterdistiller-using-ea-and-sysml-01-181k</guid>
      <description>&lt;p&gt;For many students learning SysML and MBSE, one of the more challenging issues is that in various tutorials, the diagrams provided are already drawn! How to start from scratch and create the model using a modeling tool is not covered in the tutorials.&lt;/p&gt;

&lt;p&gt;Therefore, I decided to "recreate" the case study models from popular textbooks using popular modeling tools, demonstrating how to gradually model from scratch to achieve the final model of the case study.&lt;/p&gt;

&lt;p&gt;This article recreates the case study from Chapter 16 of the book "A Practical Guide to SysML: The Systems Modeling Language, 3rd Edition", which involves a Water Distiller. The case study covers all 9 types of SysML diagrams.&lt;/p&gt;

&lt;p&gt;Case Study Background:&lt;/p&gt;

&lt;p&gt;A humanitarian organization is dedicated to providing pure drinking water to remote and impoverished areas, and thus wants to develop a simple and inexpensive water distiller. This distiller system does not require electricity (let alone a computer).&lt;/p&gt;

&lt;p&gt;For a complete modeling demonstration video, visit:&lt;br&gt;
&lt;a href="https://fagao.us" rel="noopener noreferrer"&gt;https://fagao.us&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following guide uses Enterprise Architect ( EA ) version 16.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  I. Creating the Model
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1.1 (Optional)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drag the Browser window and dock it on the right side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F001qjl7k1pq2hm8yeods.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F001qjl7k1pq2hm8yeods.png" alt="Image description" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;★ If you have just installed EA, the Browser may initially be on the left by default. My usual practice is to move it to the right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click "click to open project" in the Browser. In the pop-up "Manage Project" dialog, click "Local File" | "New Project."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lve3g048h1vnn5vbsd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lve3g048h1vnn5vbsd6.png" alt="Image description" width="449" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36mc8y03rvuw11kct0te.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36mc8y03rvuw11kct0te.png" alt="Image description" width="715" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the "New Project" dialog, choose the save type as *.qea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeen2p15mskzo2jjrdqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeen2p15mskzo2jjrdqw.png" alt="Image description" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;★ The qea and qeax formats are supported from EA version 16, using SQLite to store model data. qeax is shareable, while qea is not. The earliest save types used by EA were eap and eapx, which use the Microsoft Access database. feap uses the Firebird database. You can use EA's model transformation feature to convert between these formats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enter the name: "WaterDistiller," and click "Save."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs464o2xcxphog4jwvpca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs464o2xcxphog4jwvpca.png" alt="Image description" width="800" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.5 (Optional)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click “Start | Appearance | Preferences" | "Preferences," and in the "Themes" tab of the dialog, choose "Monochrome for printing" under "Diagram Theme."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdrnjs7nz8grclb9msoi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdrnjs7nz8grclb9msoi.png" alt="Image description" width="480" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpivvwihwpfjuqebl70tz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpivvwihwpfjuqebl70tz.png" alt="Image description" width="800" height="606"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In the "Appearance" tab, click "Default Font," and in the "Configure Default Fonts" dialog, choose your preferred font and size.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg6hm9cyxycjr6qlrny9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg6hm9cyxycjr6qlrny9.png" alt="Image description" width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.6&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select "Model" in the Browser, and click "New Package" (the second icon from the left on the Browser toolbar). In the "New Package" dialog, enter "Distiller Project" in the "Name" field, and click "OK."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4cd59uutgt5nvqpgtc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4cd59uutgt5nvqpgtc7.png" alt="Image description" width="489" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8kbnb41qsimc67h5m5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8kbnb41qsimc67h5m5v.png" alt="Image description" width="509" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faim0naj5u1u5cbkzh0te.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faim0naj5u1u5cbkzh0te.png" alt="Image description" width="382" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we will create the package diagram for the project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pvw7qggojqr0xftw9ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pvw7qggojqr0xftw9ea.png" alt="Image description" width="699" height="757"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Single Choice]The purpose of requirements work in software development is to ____.</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Sat, 17 Aug 2024 02:07:18 +0000</pubDate>
      <link>https://dev.to/jiayufagao/single-choicethe-purpose-of-requirements-work-in-software-development-is-to--516c</link>
      <guid>https://dev.to/jiayufagao/single-choicethe-purpose-of-requirements-work-in-software-development-is-to--516c</guid>
      <description>&lt;p&gt;1 [Single Choice]&lt;br&gt;
The purpose of requirements work in software development is to _&lt;strong&gt;&lt;em&gt;.&lt;br&gt;
•  A) Make the system more marketable&lt;br&gt;
•  B) Better guide the design&lt;br&gt;
•  C) Provide an outline description of the system&lt;br&gt;
•  D) Meet the software engineering requirements specifications&lt;br&gt;
2 [Single Choice]&lt;br&gt;
The purpose of design work in software development is to _&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
•  A) Provide a detailed description of the system&lt;br&gt;
•  B) Better guide the coding&lt;br&gt;
•  C) Reduce development and maintenance costs&lt;br&gt;
•  D) Meet the software engineering design specifications&lt;br&gt;
3 [Single Choice]&lt;br&gt;
A developer says, "Based on the client's requirements, our system is divided into the Sales subsystem, Inventory subsystem, Finance subsystem...". What kind of cognitive error does this statement reflect the developer might have?&lt;br&gt;
•  A) The developer has not recognized the importance of object-oriented design.&lt;br&gt;
•  B) The developer is mapping requirements directly from the design.&lt;br&gt;
•  C) The developer is mapping design directly from the requirements.&lt;br&gt;
•  D) The developer did not use UML models to describe the subsystems.&lt;br&gt;
4 [Single Choice]&lt;br&gt;
When opening the requirements specification written by the developer, you find that the use case names are "Student Management," "Question Bank Management," "Course Management..." What is the biggest potential issue hidden behind this?&lt;br&gt;
•  A) The names of the use cases are not in verb-object structure and should be changed to "Manage Students..." etc.&lt;br&gt;
•  B) The use cases are too coarse-grained; each should be broken down into four use cases, such as "Add Student," "Modify Student," etc.&lt;br&gt;
•  C) The developer is mapping design directly from the requirements.&lt;br&gt;
•  D) The developer is mapping requirements directly from the design.&lt;br&gt;
5 [Single Choice]&lt;br&gt;
Among the following terms that are often used in development teams, which one confuses the distinction between requirements and design?&lt;br&gt;
•  A) Functional module&lt;br&gt;
•  B) Detailed design&lt;br&gt;
•  C) User requirements&lt;br&gt;
•  D) Business architecture&lt;br&gt;
6 [Single Choice]&lt;br&gt;
Which of the following statements about requirements and design is correct?&lt;br&gt;
•  A) Requirements focus on the outline, design focuses on the details.&lt;br&gt;
•  B) The purpose of requirements is to better guide the design.&lt;br&gt;
•  C) The purpose of design is to break down the system into modules that can be coded.&lt;br&gt;
•  D) Requirements and design are not one-to-one corresponding.&lt;br&gt;
7 [Multiple Choice]&lt;br&gt;
Some developers lack the ability to analyze complex domain logic, so they introduce distractions such as performance, development time, and the composition of the development team to shift the focus away from the real issue. Which of the following practices are similar to this approach?&lt;br&gt;
•  A) A doctor secretly uses artificial intelligence to assist in treating a cancer patient.&lt;br&gt;
•  B) A doctor tells a cancer patient, "Given your financial situation, you can only afford this drug, so this drug is the most suitable."&lt;br&gt;
•  C) A doctor tells a cancer patient, "Our hospital currently only has this drug, so this drug is the most suitable."&lt;br&gt;
•  D) A doctor sees that a cancer patient is in poor financial condition and only charges $80 for a drug that normally costs $8,000 per box.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>"Subsystems" Are Actually Requirement Packages</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Wed, 07 Aug 2024 14:51:41 +0000</pubDate>
      <link>https://dev.to/jiayufagao/subsystems-are-actually-requirement-packages-25l0</link>
      <guid>https://dev.to/jiayufagao/subsystems-are-actually-requirement-packages-25l0</guid>
      <description>&lt;h2&gt;
  
  
  Common Mistakes 01
&lt;/h2&gt;

&lt;p&gt;"Subsystems" Are Actually Requirement Packages&lt;/p&gt;

&lt;p&gt;We often hear statements like, "This system is divided into eight subsystems, including the sales subsystem, financial subsystem, inventory subsystem..." This is an example of not distinguishing between requirements and design. In fact, the speaker might mean to say, "The functional requirements of this system are divided into eight requirement packages..."&lt;/p&gt;

&lt;p&gt;Requirement packages are based on the stakeholder's perspective to partition the system's functions, whereas subsystems (components in UML terms) are based on the internal perspective to partition according to the coupling and cohesion of system parts. These two are not one-to-one correspondences. The so-called "financial subsystem" might actually be "putting the functions used by financial personnel into one package," as shown in Figure 1-2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yck1ridksrmm6aj1thp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yck1ridksrmm6aj1thp.png" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1-2 "subsystems" are actually rquirement packages&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Software Method-001 Profit = Requirements - Design</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Thu, 01 Aug 2024 03:59:09 +0000</pubDate>
      <link>https://dev.to/jiayufagao/the-software-method-001-profit-requirements-design-4dja</link>
      <guid>https://dev.to/jiayufagao/the-software-method-001-profit-requirements-design-4dja</guid>
      <description>&lt;p&gt;Profit = Revenue - Cost. &lt;/p&gt;

&lt;p&gt;To make a profit, regardless of what you're selling, two conditions are necessary:&lt;/p&gt;

&lt;p&gt;(1) The selling price should be high;&lt;br&gt;
(2) The cost should be low.&lt;/p&gt;

&lt;p&gt;The brilliance lies in the fact that there's no fixed formula between price and cost, which is the very source of innovation.&lt;br&gt;
Applied to the software industry, I've coined a formula:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profit = Requirements - Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Being able to develop and maintain a system at a low cost does not necessarily guarantee that it will sell well. Conversely, even if a system sells well, if the development and maintenance costs are too high, the ultimate profit will still not be substantial.&lt;/p&gt;

&lt;p&gt;In software development, requirements work aims to solve the issue of "increasing sales," while design work aims to solve the issue of "reducing costs." Neither can replace the other. Being able to develop and maintain a system at low cost doesn't necessarily guarantee that it will sell well. Conversely, if a system sells well but has high development and maintenance costs, the final profit still won't be high.&lt;/p&gt;

&lt;p&gt;The "profit," "sales," and "cost" mentioned above are used in a broad sense. They can refer to money, reputation, power, manpower, etc.&lt;/p&gt;

&lt;p&gt;Even if you're making an internal system not publicly sold in the market, or even making a system for your own convenience, the above formula still applies.&lt;/p&gt;

&lt;p&gt;More crucially: There isn't, and shouldn't be, a rigid one-to-one mapping between requirements and design. Fortunately so, otherwise artificial intelligence could easily learn these mapping patterns and replace software developers in completing all tasks. Currently, one of the values of software developers lies in their ability to select the most suitable mapping scheme from many possible options and create better mapping schemes based on their domain knowledge and software development expertise.&lt;/p&gt;

&lt;p&gt;Let's first look at a system that has existed since ancient times: the human body.&lt;/p&gt;

&lt;p&gt;The functions (requirements) of the human body are (the ability to) walk, run, jump, lift weights, throw, swim, etc. However, when designing the structure of the human body, it's not a direct mapping from functions (requirements) to design, resulting in "walking organ," "running organ," "jumping organ"... The organs of the human body are eyes, ears, heart, lungs, liver, stomach, skeleton, skin... These organs do not correspond one-to-one with the functions of the human body. When collaborating to fulfill the system's functions, the relationship between them and the functions is many-to-many.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6d2smd4iqxsm6t64404.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6d2smd4iqxsm6t64404.png" alt="Image description" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k08w5i34061tzo1nx86.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k08w5i34061tzo1nx86.png" alt="Image description" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1-1 the relationship between components and functions is many-to-many.&lt;/p&gt;

&lt;p&gt;In software development, directly mapping requirements to design will result in a large amount of duplicate code, increasing costs; if requirements are defined based on design, it will lead to a bunch of fake "requirements," decreasing sales. In either case, profit will decline.&lt;br&gt;
Many software developers are not aware of this point.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How Many System Use Cases Are Ideal? Just One!</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Sun, 28 Jul 2024 14:15:09 +0000</pubDate>
      <link>https://dev.to/jiayufagao/how-many-system-use-cases-are-ideal-just-one-j0j</link>
      <guid>https://dev.to/jiayufagao/how-many-system-use-cases-are-ideal-just-one-j0j</guid>
      <description>&lt;h2&gt;
  
  
  Question:
&lt;/h2&gt;

&lt;p&gt;The method of transitioning from business sequence diagrams to a system use case diagram is very good. I have a question: to what extent should we make improvements, and how many system use cases are ideal?&lt;/p&gt;

&lt;h2&gt;
  
  
  Answer:
&lt;/h2&gt;

&lt;p&gt;Strictly speaking, the number of system use cases to focus on in each iteration should always be one.&lt;br&gt;
Even if, while improving the business sequence diagrams using the target system, you happen to improve many aspects and map out multiple use cases for the target system. For example, consider the following two sequence diagrams:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1y4n1j5qy8jvscuquqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1y4n1j5qy8jvscuquqf.png" alt="Image description" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sequence Diagram 1&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwnyj62hslmmem8805amy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwnyj62hslmmem8805amy.png" alt="Image description" width="783" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sequence Diagram 2&lt;/p&gt;

&lt;p&gt;From the above two sequence diagrams, we map out System E's use case diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes8u45q5orc2hjqcvv1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes8u45q5orc2hjqcvv1a.png" alt="Image description" width="541" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;System E Use Case Diagram&lt;/p&gt;

&lt;p&gt;However, this is only a preliminary exploration. It doesn't mean that the system must have these use cases in the end, nor does it mean that the system only has these use cases.&lt;/p&gt;

&lt;p&gt;You need to judge which use case should be implemented first based on the vision, then observe the results of the improvements to determine if the vision's goal have been met and if further improvements are needed. If the goal are met, you can stop; if not, continue improving.&lt;/p&gt;

&lt;p&gt;By continuously repeating the above exploration, the number of use cases in the final system does not have a standard answer. The best answer, derived from the vision and stakeholder interests. It could be 1, or it could be 1000.&lt;/p&gt;

&lt;p&gt;Understanding the above knowledge, you'll know how to answer similar questions like:&lt;/p&gt;

&lt;p&gt;• Is modeling more effective for new projects?&lt;br&gt;
• How does modeling differ when improving legacy systems?&lt;br&gt;
• How can we ensure we've identified all the system's use cases?&lt;/p&gt;




&lt;p&gt;These questions don't have fundamental differences.&lt;/p&gt;

&lt;p&gt;It's similar to diagnosing a patient. A doctor examines the patient's current condition, considers the treatment plan, tries the treatment, observes the results, and repeats the process. Whether the patient has been treated by another doctor, brought medical imaging records from another clinic, or has leftover medication from another doctor, does not change this approach. If the medical imaging records or leftover medication can still be used, it just saves some money.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Is "startup software" a use case?</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Fri, 26 Jul 2024 11:42:59 +0000</pubDate>
      <link>https://dev.to/jiayufagao/is-startup-software-a-use-case-55ka</link>
      <guid>https://dev.to/jiayufagao/is-startup-software-a-use-case-55ka</guid>
      <description>&lt;h2&gt;
  
  
  Question:
&lt;/h2&gt;

&lt;p&gt;Can "startup software" be considered a use case? When software starts, it typically needs to instantiate some objects, read some configuration files, etc. So, Are “start software” and “shut down software” use cases? Or are they extensions of other use cases?&lt;/p&gt;

&lt;h2&gt;
  
  
  Answer:
&lt;/h2&gt;

&lt;p&gt;No, it is not.&lt;/p&gt;

&lt;p&gt;Use cases are requirements. Requirements describe the necessary behaviors (functionality, performance, constraints) of a system as a whole (black box) - "it won't work without this."&lt;/p&gt;

&lt;p&gt;Let's break it down:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(1) Is "startup software"  something that stakeholders consider "it won't work without this"?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Actually, it's not.&lt;/p&gt;

&lt;p&gt;Stakeholders are interested in the core value that our system provides. If our system could be used continuously from the moment it faces stakeholders, calculating whatever they need without requiring startup, stakeholders would be delighted. How to achieve this? It's not a matter of requirements. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(2) "Software usually needs to instantiate some objects, read some configuration files (during startup)" - this is likely not a requirement.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Instantiating", "reading", "loading" are actually design assumptions that arise from a design perspective.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo69z9qwptfabtb3j0evg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo69z9qwptfabtb3j0evg.png" alt="Image description" width="800" height="704"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The system is a black box; there's no "instantiating", "reading", "loading". Remove these, then ask "why, what might happen without this?" The answer might be "without this, when performing certain calculations, the time from input to output might be longer, and we'd fall behind competitors" - this is what the system as a whole must satisfy. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(3) Is it relevant to the current system and current use cases?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some might argue that the system needs to start first. However, this is universally understood and doesn't have a specific relationship with the current system or use cases, so it doesn't need to be explicitly stated as a use case.&lt;/p&gt;

&lt;p&gt;Unfortunately, many people are inclined to treat "startup" as a use case, including it in every project without much thought. This can be an easy way to pad project documentation, but it doesn't add value.&lt;/p&gt;

&lt;p&gt;Of course, if "startup" is the core value of the target system, then it is a use case. For example, for software that provides a “remote cross-platform application launch” service.&lt;/p&gt;

</description>
      <category>usecase</category>
      <category>uml</category>
      <category>requirement</category>
    </item>
    <item>
      <title>Is "non-functional requirement" a vague term?</title>
      <dc:creator>FagaoMBSE</dc:creator>
      <pubDate>Thu, 25 Jul 2024 09:11:53 +0000</pubDate>
      <link>https://dev.to/jiayufagao/is-non-functional-requirement-a-vague-term-3i1k</link>
      <guid>https://dev.to/jiayufagao/is-non-functional-requirement-a-vague-term-3i1k</guid>
      <description>&lt;p&gt;"Non-functional requirement" is indeed a vague term, but this vagueness is in expression, stemming from historical convention. Continuing to use it causes less harm than terms like "functional module" or "user requirement".&lt;/p&gt;

&lt;p&gt;The vagueness lies in that, for the set of "requirements," "functional requirements" is a subset, and the literal meaning of "non-functional requirements" is the complement of "functional requirements." Therefore, the union of these two is the universal set. The statement "requirements are divided into functional requirements, non-functional requirements, and design constraints" is not rigorous.&lt;/p&gt;

&lt;p&gt;However, the way of stating functional requirements + non-functional requirements + design constraints has been in use for a long time. I myself started using this expression around 2002. Of course, I must have seen it in textbooks, but I can't remember exactly which one. In fact, many books still express it this way over the years, and some are even more confusing: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oznu5604cbsjvuc2rxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oznu5604cbsjvuc2rxy.png" alt="Image description" width="733" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Software Engineering: Theory and Practice, Shari Lawrence Pfleeger, Joanne M. Atlee, 2009&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F762eg9cyd5cy5u7xpahi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F762eg9cyd5cy5u7xpahi.png" alt="Image description" width="800" height="242"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Requirements Engineering Handbook, Ralph R. Young, 2003&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbdsdpojr2xvnc6ikz70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbdsdpojr2xvnc6ikz70.png" alt="Image description" width="511" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aspect-oriented software development with use cases, Ivar Jacobson, Pan-Wei Ng, 2005&lt;/p&gt;

&lt;p&gt;To be more rigorous in expression, the approaches can be:&lt;/p&gt;

&lt;h2&gt;
  
  
  (1) Design constraints are not requirements.
&lt;/h2&gt;

&lt;p&gt;This is inappropriate. Putting them together indicates they belong to the same category, whether it's called "requirements" or "A Cat" or "A Dog." They all fall under "the system must be this way; otherwise, it will harm stakeholders' interests."&lt;/p&gt;

&lt;h2&gt;
  
  
  (2) Design constraints are a kind of non-functional requirement.
&lt;/h2&gt;

&lt;p&gt;This is acceptable, but conventionally, when "non-functional requirements" are mentioned, speed, reliability, etc., come to mind. This also causes the vague expression.&lt;/p&gt;

&lt;h2&gt;
  
  
  (3) Rename "non-functional requirements".
&lt;/h2&gt;

&lt;p&gt;Such a catch-all naming as "non-functional requirements" is inherently inappropriate. For example, it can be renamed to the expression used in Pfleeger's book  — "quality requirements." However, the term "quality" is also quite vague.&lt;/p&gt;

&lt;p&gt;"Requirements are divided into functional requirements, quality requirements, and design constraints" is still not appropriate. Why do the first two end with the word "requirements" while the last one doesn't? &lt;strong&gt;We could remove the "requirements" suffix altogether - requirements are divided into three types: functionality, performance, and design constraints.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>requirements</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
