Saturday, July 16, 2022

NFR : None Functional Requirement in Software Engineering or Application Development : Part 2: Scalability, Performance, Testability

 In my previous post, I had discussed about below points like:

  1. What is NFR
  2. What information should be gathered by Development team from Business team with respect to NFR
  3. Listed down few important NFRs
Link of my NFR related posts:

In the continuation of my previous post about NFR, I am going to discuss about 3 NFR like Scalability, Performance, Testability

Scalability:
Scalability is the measure of a system's ability to increase or decrease in performance and cost in response to changes in application and system processing demands. There are 3 important types scalability:
  1. Horizontal Scaling: New server is added instead of upgrading the existing server.
  2. Vertical Scaling: Existing server is upgraded based by increasing CPU, RAM, Processor
  3. Diagonal Scaling: Here, both horizontal and vertical scaling are done.
Below are few of the ways of implementing scalability in your application:
  1. Setup an alarm like CloudWatch Alarm in AWS that triggers an alarm or event when CPU utilization reaches a thresh hold value
  2. Setup an autoscaling by using cloud autoscale functionality or Kubernates
  3. Load Balancing: Define load balancer to equally distribute load on several servers
  4. Enable clustering if your application technology supports. E.g. if your application is using NodeJs for API creation, we can easily enable clustering as discussed in my below posts like:
            Cluster in Node Js application

Performance:
It represents the application's throughput time. Lower the throughput time, higher is the performance. Below are few of the ways to enhance your application's performance:
  1. Setup proper load balancer
  2. Use auto-scaling to enhance performance based on CloudWatch alarm
  3. Setup caching like Reddish or memcache
  4. Flush the cache data at certain intervals based on frequency of write operation in the application and how early to present the latest data to customers
  5. Always use Asynchronous operations where synchronous behavior is not required
  6. Follow all coding conventions and guidelines
  7. Follow all best practices of DB like SQL query optimization, using Views, Indexes, Stored Procedures and SQL functions where ever required.
  8. Use some code validation tools like Sonar or Eslint
  9. Try to use latest stable and suitable version of libs like NPM packages
Testability:
In software, testability refers to the degree that any module, requirements, subsystem or other component of your architecture can be verified as satisfactory or not. High testability means it is easy to find and isolate faults as part of your team's regular testing process. Our application must have following criteria to be more testable:
  1. Controllability: The degree to which it is possible to control the state of the component under test (CUT) as required for testing.
  2. Observability: The degree to which it is possible to observe (intermediate and final) test results.
  3. Isolateability: The degree to which the component under test (CUT) can be tested in isolation.
  4. Separation of concerns: The degree to which the component under test has a single, well defined responsibility
  5. Understandability: The degree to which the component under test is documented or self-explaining.
  6. Automatability: The degree to which it is possible to automate testing of the component under test.
  7. Heterogeneity: The degree to which the use of diverse technologies requires to use diverse test methods and tools in parallel.
In my next post, I will discuss about NFR related with Application security.

No comments:

Post a Comment

Please provide your precious comments and suggestion