Skip to main content

Software Architecture (Requirement Analysis) - Part 01

Software Architecture
The Software Architecture of a system is a high level description of the system's structure, its different components, and how these components communicate with each other to fulfill the system requirements and constraints.

The Software Architecture impacts

  • Performance and scale of the product
  • Ease of adding new features
  • Response to failure on security attacks.
In SDLC Software architecture is the output of design and input of implementation.

System Requirements:
System requirement format description of what we need to build

Types of Requirements
  • Features of the System (Functional Requirements)
  • Quality Attributes (Non-functional Requirements)
  • System Constraints (Limitation and boundaries)
Features of the System:
Describe the system behavior - What the system must do.

Example: "When a rider logs into the service mobile app, the system must display a map with nearby drivers within 5 miles radius"
the yellow text represent input and the green text represent output of the system.

Qualitive Attributes:
System properties that the system must have.
  • Scalability
  • Availability
  • Reliability
  • Security
  • Performance
  • and many more ... 
the qualitive attributes dictate the software architecture of our system.

System Constraints:
  • Time Constraints - system deadline
  • Financial Constraints - budget
  • Staffing - number of engineers 
Example:
"We would like you to build a system that allows sharing large files between users.

After a user uploads a file they will get a unique link that they can share with other users. Any user with that link can download the file. - Features of the system

The link should become active no later than 1 second after the file was uploaded. Download speeds should be at least 50 Mbit/sec. - Qualitive Attribute

You have to support at least PDF, and JPG file formats, as well as the following web browsers: Google Chrome, Mozilla Firefox, Microsoft Edge." - System Constraints


Methods of Gathering Functional Requirements:
  1. Native Way: Ask the client to describe everything the need. This is not good approach for the complex system.
  2. More Powerful
    • Use Cases: Situation/Scenarios in which our system is used
    • User Flows: A step-by-step or Graphical representation of each use case.
Methods:
  • Identify all the actors/users in our system.
  • Capture and describe all the possible scenarios
  • User Flow - expand each use case through flow of events. Each event contain action and data.
Example: Allow people to join drivers on route who are willing to take passengers for a fee.
Actors: Rider and Driver
Use Cases:
  • Rider first time registration
  • Driver registration
  • Rider login
  • Driver login
  • Successful match and ride
  • Unsuccessful ride
System Qualitive Attributes:
Provides a quality measure on how well our system performs at a particular dimension.
Example: The online store must be available to user request at least 99.9% of time.

Qualitive attributes must be measurable and testable.

When a user clicks on the buy button the purchase confirmation must be displayed quickly to the user.
Here "quickly" is an unmeasurable qualitive attribute.

No single software architecture can provide all the qualitive attributes.

System Constraints:
System Constraints are referred as pillars for software architecture.
  • They provide us with a solid starting point.
  • The rest of the system need to be designed around them.
Types of system constraints
  • Technical Constraints
    • Being locked to a particular hardware/cloud vendor
    • Using particular language
    • Using particular framework etc.
  • Business Constraints
  • Regulatory Constraints
    • Place constraint on accessing data


Comments

Popular posts from this blog

Message Queue using RabbitMQ

Message Queue: A message queue is a form of asynchronous service-to-service communication used in serverless and microservices architectures. Messages are stored on the queue until they are processed and deleted. Each message is processed only once, by a single consumer Image Source: aws.amazon.com RabbitMQ: RabbitMQ is a message broker: it accepts and forwards messages. You can think about it as a post office: when you put the mail that you want posting in a post box, you can be sure that the letter carrier will eventually deliver the mail to your recipient. In this analogy, RabbitMQ is a post box, a post office, and a letter carrier. The major difference between RabbitMQ and the post office is that it doesn't deal with paper, instead it accepts, stores, and forwards binary blobs of data ‒  messages . Advanced Message Queueing Protocol (AMQP): Advanced Message Queuing Protocol (AMQP) is an application layer protocol that focuses on process-to-process communication across IP networ...

The Data Link Layer

  The Data-link layer is the second layer from the bottom in the  OSI  (Open System Interconnection) network architecture model. It is responsible for the node-to-node delivery of data. Its major role is to ensure error-free transmission of information. DLL is also responsible to encode, decode and organize the outgoing and incoming data. This is considered the most complex layer of the OSI model as it hides all the underlying complexities of the hardware from the other above layers.  Ethernet The protocol most widely used to send data across individual links is known as Ethernet.  Ethernet and the data link layer provide a means for  software at higher levels of the stack to send and receive data.  One of the primary purposes of this layer is to essentially abstract away  the need for any other layers to care  about the physical layer and what hardware is in use.  So, for example, your web browser doesn't need to know if it's  runn...