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:
- Native Way: Ask the client to describe everything the need. This is not good approach for the complex system.
- 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
Post a Comment