Ia 2
Ia 2
Ia 2
2 marks:
1.Define the Command pattern in software design.
1.What is the purpose of the Strategy pattern?
2.Explain the Observer pattern briefly.
3.Define the Proxy pattern and its usage.
4.What is a Facade in software architecture?
5.Explain Regression testing
6.Define verification, validation,testing, debugging
7.Compare blackbox testing and whitebox testing
8.Define Unit Testing and its importance in software development.
9.Explain symbolic execution testing
10.List out various factors affect project plan
11.What are the main components of a Deployment Pipeline in DevOps?
12.write about Devops
13.Explain PERT
14. milestone and deliverables
15. Public subscribe design pattern
16. Different architectural design
Big questions:
1.blackbox,integration and system testing where it is used and procedure with example
2.Regression testing
3.Symbloic Execution with example
4.Explain software configuration management
5.Deployment pipeline in Devops
6.Model view controller
7.Different Architectural styles
BIG QUESTIONS:
1&2
Software Testing:
Software testing is a process of identifying the correctness of software by considering its all attributes
(Reliability, Scalability, Portability, Re-usability, Usability) and evaluating the execution of software
components to find the software bugs or errors or defects.
The different types of Software Testing:
The purpose of having a testing type is to confirm the AUT (Application Under Test).
The software testing mainly divided into two parts, which are as follows:
Manual Testing:
Testing any software or an application according to the client's needs without using any automation tool
is known as manual testing.
Classification of Manual Testing
In software testing, manual testing can be further classified into three different types of testing, which
are as follows:
White Box Testing
Black Box Testing
Grey Box Testing
Functional Testing
The test engineer will check all the components systematically against requirement specifications is
known as functional testing.
Functional testing is also known as Component testing.
In functional testing, all the components are tested by giving the value, defining the output, and
validating the actual output with the expected value.
Functional testing is a part of black-box testing as its emphases on application requirement rather than
actual code. The test engineer has to test only the program instead of the system.
Types of Functional Testing
The diverse types of Functional Testing contain the following:
Unit Testing
Integration Testing
System Testing
1. Unit Testing
Unit testing is the first level of functional testing in order to test any software. In this, the test engineer
will test the module of an application independently or test all the module functionality is called unit
testing.
2. Integration Testing
Once we are successfully implementing the unit testing, we will go integration testing.
It is the second level of functional testing, where we test the data flow between dependent modules or
interface between two features is called integration testing.
Types of Integration Testing
Integration testing is also further divided into the following parts:
Incremental Testing
Non-Incremental Testing
Incremental Integration Testing
1. Whenever there is a clear relationship between modules, we go for incremental integration
testing. Suppose, we take two modules and analysis the data flow between them if they are
working fine or not.
2. If these modules are working fine, then we can add one more module and test again.
3. And we can continue with the same process to get better results.
In other words, we can say that incrementally adding up the modules and test the data flow between the
modules is known as Incremental integration testing.
Types of Incremental Integration Testing
Incremental integration testing can further classify into two parts, which are as follows:
Top-down Incremental Integration Testing
Bottom-up Incremental Integration Testing
1. Top-down Incremental Integration Testing
In this approach, we will add the modules step by step or incrementally and test the data flow between
them. We have to ensure that the modules we are adding are the child of the earlier ones.
2. Bottom-up Incremental Integration Testing
In the bottom-up approach, we will add the modules incrementally and check the data flow between
modules. And also, ensure that the module we are adding is the parent of the earlier ones.
3. System Testing
Whenever we are done with the unit and integration testing, we can proceed with the system testing.
In system testing, the test environment is parallel to the production environment. It is also known as
end-to-end testing.
Non-function Testing
The next part of black-box testing is non-functional testing. It provides detailed information on
software product performance and used technologies.
Non-functional testing will help us minimize the risk of production and related costs of the software.
Non-functional testing is a combination of performance, load, stress, usability and, compatibility
testing.
Regression Testing:
Regression testing is a black box testing techniques. It is used to authenticate a code change in the
software does not impact the existing functionality of the product. Regression testing is making sure
that the product works fine with new functionality, bug fixes, or any change in the existing feature.
Types of Regression Testing
The different types of Regression Testing are as follows:
1) Unit Regression Testing [URT]
In this, we are going to test only the changed unit, not the impact area, because it may affect the
components of the same module.
2) Regional Regression testing [RRT]
In this, we are going to test the modification along with the impact area or regions, are called the
Regional Regression testing. Here, we are testing the impact area because if there are dependable
modules, it will affect the other modules also.
3) Full Regression testing [FRT]
During the second and the third release of the product, the client asks for adding 3-4 new features, and
also some defects need to be fixed from the previous release. Then the testing team will do the Impact
Analysis and identify that the above modification will lead us to test the entire product.
● First and foremost, it enables faster time-to-market for new features and
bug fixes by automating and expediting the software delivery process.
● The pipeline allows for early detection and resolution of defects, reducing
the risk of deployment failures and costly rollbacks.
● It fosters collaboration between development, testing, and operations
teams, promoting a culture of shared responsibility and continuous
improvement.
● Automated processes reduce manual interventions, enabling faster and
more frequent releases, accelerating time-to-market for new features and
bug fixes.
● Automation testing at each stage ensures that bugs and issues are
identified early in the development cycle, minimizing the cost and effort
of fixing them.
● The pipeline ensures consistency across all environments, reducing the
chances of configuration errors that may cause discrepancies between
development, staging, and production environments.
● Deployment pipelines encourage collaboration between development,
testing, and operations teams, promoting a culture of shared responsibility
and faster feedback loops.
● Automated testing and validation processes help catch issues before they
reach production, leading to fewer deployment failures and rollbacks.
● Continuous integration and automated security checks ensure that code
meets security and compliance standards before deployment.
4. Production Deployment:
The final stage of the deployment pipeline is the Production Deployment
stage. Once the application has passed all the previous stages and
received approval from stakeholders, it is deployed to the production
environment.
● This stage requires extra caution as any issues or bugs introduced into the
production environment can have significant consequences.
● To minimize risk, organizations often use deployment strategies such as
canary releases, blue-green deployments, or feature toggles to control the
release process and enable easy rollback in case of any problems.
● Continuous production environment monitoring is also essential to ensure
the application’s stability and performance.
● Use a version control system like Git to manage your source code and
track changes.
3. Choose a Build Automation Tool:
● Select a build tool like Jenkins, Travis CI, CircleCI, or GitLab CI/CD to
automate the build and testing process.
4. Setup Continuous Integration (CI)
● Create deployable artifacts (e.g., Docker images, JAR files) from your
codebase after successful testing.
7. Implement Continuous Deployment (CD):
Reference:
MVC Components
Following are the components of MVC −
Model
The Model component corresponds to all the data-related logic that the user works
with. This can
represent either the data that is being transferred between the View and Controller
components or
any other business logic-related data. For example, a Customer object will retrieve the
customer
information from the database, manipulate it and update it data back to the database or
use it to
render data.
ViewThe View component is used for all the UI logic of the application. For example,
the Customer
view will include all the UI components such as text boxes, dropdowns, etc. that the
final user
interacts with.
Controller
Controllers act as an interface between Model and View components to process all the
business
logic and incoming requests, manipulate data using the Model component and interact
with the
Views to render the final output. For example, the Customer controller will handle all
the
interactions and inputs from the Customer View and update the database using the
Customer
Model. The same controller will be used to view the Customer data.
2MARK:
1. **Define the Command pattern in software design.**
- The Command pattern is a behavioral design pattern that encapsulates a request as
an object, thereby allowing parameterization of clients with queues, requests, and
operations. It decouples the sender of a request from the receiver, which executes the
request. This pattern enables the separation of the request for a service from the
execution of that service, providing flexibility, extensibility, and support for undoable
operations.