Software Development Life Cycle
Software Development Life Cycle
The Software Development Life Cycle (SDLC) is a process used by the software industry to produce high-quality systems that meet or exceed the customer’s expectations. The SDLC looks to produce software that:
Works effectively (performs its task well).
Works efficiently (does not cost too much to operate).
Is inexpensive to maintain.
Is cost-effective to enhance.
Must be produced within time and cost estimates.
Software Development Life Cycle - Phases
Analysis
A - Business Analysis
B - Requirements Analysis
Design
Development / Coding
Testing
Deployment
Maintenance
First Family Home
In order to get a clearer understanding of the SDLC, we will look at what it takes to build a family home
There is a great deal of planning involved in building a home
Business Analysis
Identify the Current State – Where are we now
Understanding the current state allows us to identify the needs that need to be fulfilled by our project
What is the Current State
One bedroom apartment (we now have 2 kids).
Limited closet space.
High rent (more than a mortgage).
Small kitchen (would like more space).
One bathroom servicing 4 people.
No parking space.
No privacy.
No place for the kids to play.
Too many people in neighborhood.
Requirements Analysis
The second half of analysis is the Requirements Analysis or Requirements Gathering
Customer describes what they want and how they want it used
Failure in this stage will result in incomplete or mis-directed work in all following stages
Customers Will ask for What they WANT
We need to have a clear understanding of
What we want to have (desire to have – initial plans).
What we must have (absolutely necessary).
What is just gravy (extra stuff – not expected enhancements).
Design
How do we build it
Architectural Blueprints are created with various considerations:
Hardware.
Software.
Service/Product Availability.
Service/Product Capacity.
Security.
Environmental Considerations.
High-Level Design vs. Low-Level Design
High-Level Design (HLD) - lists the functional aspects of the various modules, along with the final result
Low-Level Design (LLD) - details the logic and execution of each module in an HLD
Development/Coding
Now that we have a clear understanding of how the application is supposed to work, it is time for our team of programming experts to begin coding
Programming tools like compilers, interpreters, and language such as COBOL, C, C++, and Java are used for coding with respect to the type of application
Testing
Software Quality is best determined by how well the software meets the requirements
Difference between Unit Testing and Testing
Testing and Unit Testing are two software development concepts that are often used interchangeably, but they are not the same thing.
Testing is a process of verifying whether the software application meets the customer requirements and works as expected. It is performed on the entire software system, including all the integrated components. Testing is also known as System testing or End-to-End testing.
Unit Testing, on the other hand, is a type of testing in which individual units or components of software are tested in isolation from the rest of the system. It is a white-box testing technique, which means that the tester has knowledge of the code and the internal structure of the software.
Here are some of the key differences between Testing and Unit Testing:
Testing Unit Testing Performs on the entire software system.
Performs on individual units of code.
Tests the software as a whole.
Tests the functionality of each unit of code.
Requires more resources and time.
Requires fewer resources and time.
Checks for integration issues.
Does not check for integration issues.
Can be done manually or automated.
Automated testing is more widely used.
In conclusion, Unit Testing and Testing are two distinct types of software testing that serve different purposes. While Testing focuses on the overall functionality of the software, Unit Testing checks the functionality of individual units of code. Both types of testing are important in ensuring the quality and reliability of software applications.
Validating Functionality
Know how your product/service will perform in a live environment prior to releasing it into the live environment
Other Types of Tests
Software Testing Ability
User Experience Testing
How easily can users utilize this functionality?
Functionality Testing
Does this app perform the work needed as designed?
Security Testing
Does this release meet the customer’s acceptable risk profile?
Load Testing
Will this service be able to support (x) number of users and maintain acceptable levels of performance?
Performance Testing
Will performance in a live environment meet the planned performance from the blueprint?
Compatibility Testing
What effect on the live environment will this service have once it is released?
Will any other live services be adversely impacted by this new introduction?
End-User Preparation/Training
End-users must be trained in how to interact with new systems prior to the new rollout
Not having users ready to interact with the new system is a major risk to a successful implementation
Deployment
Deployment moves the product/service into the “live” environment. Once deployed successfully, customers and users can be allowed to begin utilization of the functionality provided
Example
Once customers and users have access to the functionality in a live environment, any undiscovered issues will show up as incidents, directly affecting the customer/user experience
Incidents may cause customers to have a negative perception of both the service/product and of the organization providing the service/product
Maintenance
The Maintenance phase is an ongoing process, and includes:
Maintenance of Hardware/Software.
Updates.
Upgrades.
New Features
Home Improvements and Repair
A home is never completed. There are always repairs to be made. and because families change (e.g., kids grow up and go away to college or new kids are born), the home changes. We are always thinking of ways to make our home more valuable by making changes and additions
Last updated