
- System Analysis and Design Tutorial
- System Analysis and Design - Home
- System Analysis & Design - Overview
- Differences between System Analysis and System Design
- System Analysis and Design - Communication Protocols
- Horizontal and Vertical Scaling in System Design
- Capacity Estimation in Systems Design
- Roles of Web Server and Proxies in Designing Systems
- Clustering and Load Balancing
- System Development Life Cycle
- System Development Life Cycle
- System Analysis and Design - Requirement Determination
- System Analysis and Design - Systems Implementation
- System Analysis and Design - System Planning
- System Analysis and Design - Structured Analysis
- System Design
- System Analysis and Design - Design Strategies
- System Analysis and Design - Software Deployment
- Software Deployment Example Using Docker
- Functional Vs. Non-functional Requirements
- Data Flow Diagrams(DFD)
- Data Flow Diagram - What It Is?
- Data Flow Diagram - Types and Components
- Data Flow Diagram - Development
- Data Flow Diagram - Balancing
- Data Flow Diagram - Decomposition
- Databases in System Design
- System Design - Databases
- System Design - Database Sharding
- System Design - Database Replication
- System Design - Database Federation
- System Design - Designing Authentication System
- Database Design Vs. Database Architecture
- Database Federation Vs. Database Sharding
- High Level Design(HLD)
- System Design - High Level Design
- System Design - Availability
- System Design - Consistency
- System Design - Reliability
- System Design - CAP Theorem
- System Design - API Gateway
- Low Level Design(LLD)
- System Design - Low Level Design
- System Design - Authentication Vs. Authorization
- System Design - Performance Optimization Techniques
- System Design - Containerization Architecture
- System Design - Modularity and Interfaces
- System Design - CI/CD Pipelines
- System Design - Data Partitioning Techniques
- System Design - Essential Security Measures
- System Implementation
- Input / Output & Forms Design
- Testing and Quality Assurance
- Implementation & Maintenance
- System Security and Audit
- Object-Oriented Approach
- System Analysis & Design Resources
- Quick Guide
- Useful Resources
- Discussion
Functional Vs. Non-functional Requirements
Introduction to Requirements in Software Development
Functional Requirements
Define what the system should do. They define specific behaviours, features, and functionalities that the system must have to meet user needs. These requirements are usually expressed as actions or tasks the system should perform.
Examples
User Authentication− The system must allow users to log in with a username and password.
Data Processing− The system must process and validate user inputs in real-time.
Reporting− The system must generate sales reports on a monthly basis.
Non-Functional Requirements
Define how the system should perform. They define the quality attributes, performance standards, and constraints that the system must adhere to. These requirements focus on aspects such as usability, reliability, security, and scalability.
Examples
Performance− The system must handle up to 1000 concurrent users with response times of less than 2 seconds.
Security− The system must ensure data encryption for all sensitive information.
Usability− The system must be user-friendly and accessible to users with disabilities.
Types of Functional Requirements
User Interface Requirements− Requirements related to UI components, layout, and design (e.g., a search bar).
Business Requirements− Describe business rules and policies (e.g., the system should apply a tax rate based on location).
Data Management Requirements− Define how the system should handle data input, storage, and processing.
Administrative Requirements− Features for system administration, like user role management or access control.
Example Use Case
Describe a sample functional requirement and how it helps meet business objectives.
Types of Non-Functional Requirements
Performance Requirements
Response times− the amount of time it takes for a system to react to a given input or request.
Throughput− refers to the rate at which a system can process data or complete tasks within a given period of time.
Latency− refers to the time delay between a user's action and the corresponding response from the system.
Examples
Response Time− The page should load in under 2 seconds for 93% of users.
Scalability Requirements
The systems ability to handle growth in data volume, users, or transactions.
Example− The system should support up to 10,000 concurrent users.
Security Requirements
Requirements for data protection, encryption, and access control.
Example− Passwords must be hashed and salted before storage.
Usability Requirements
Requirements related to the ease of use and learnability of the system.
Example− All core functions should be accessible with no more than three clicks.
Reliability and Availability Requirements
Defines the systems expected uptime and error tolerance.
Example− The system should have 99.9% uptime.
Maintainability and Portability
Requirements for the ease of maintenance, debugging, and migration.
Example− Code should follow documented standards to ensure maintainability.
Legal and Compliance Requirements
Regulations and standards the system must adhere to (e.g., GDPR General Data Protection Regulation)
Example− Users must consent to data usage in compliance with GDPR.
Techniques for Gathering Requirements
Interviews with stakeholders and users to capture expectations.
Surveys and Questionnaires for collecting feedback from a large audience.
Workshops and Brainstorming Sessions for collaborative requirement gathering.
Observation and Job Shadowing to understand real-world user interactions.
Document Analysis of existing systems and policies.
Prototyping and Mock-ups to visualize requirements and gather feedback.
Documenting Functional and Non-Functional Requirements
Requirements Documentation
Software Requirements Specification (SRS) Documents− Used to capture both functional and non-functional requirements in detail.
Agile User Stories and Acceptance Criteria− Defining "done" for each requirement.
Using Diagrams
Use Case Diagrams− Visualizing functional requirements.
Flowcharts and Sequence Diagrams− For process flows and system interactions.
Non-Functional Documentation
Quality Attribute Scenarios− Describing non-functional requirements in scenarios (e.g., "In case of a server failure, the system should recover within 3 minutes").
Best Practices− Ensuring requirements are clear, testable, and prioritized.
Challenges in Managing Functional and Non-Functional Requirements
Ambiguity and Misinterpretation− Vague requirements lead to misunderstandings. Use clear, specific language. Changing Requirements: Requirements may change frequently; use Agile methodologies for flexibility.
Conflict between Functional and Non-Functional Goals− Trade-offs may be required (e.g., security vs. usability).
Prioritization Issues− High-priority non-functional requirements (like security) may be overlooked.
Stakeholder Alignment− Ensuring all stakeholders agree on priorities and definitions.
Best Practices for Managing and Validating Requirements
Involve Stakeholders− Regular stakeholder feedback ensures requirements align with expectations.
Prioritize Requirements− Rank functional and non-functional requirements based on importance to the business.
Tests for Non-Functional Requirements
Load Testing for performance requirements.
Usability Testing for user experience.
Security Audits for security and compliance requirements.
Iterative Review and Refinement, Regularly revisit requirements for completeness and relevancy.
Use Automation, Track requirements in real-time, using tools like JIRA, Confluence, and Trello for traceability.
Summary
A balanced approach to functional and non-functional requirements is essential for building robust, user-centred software systems. This article highlights the definitions, types, and methods for gathering, documenting, and validating these requirements, ensuring software projects align with both user expectations and technical standards.