INTERNAL ASSIGNMENT
SESSION NOVEMBER 2024
PROGRAM MASTER OF COMPUTER APPLICATION (MCA)
SEMESTER III
COURSE CODE & NAME DCA7103 – ADVANCED SOFTWARE ENGINEERING
NAME DARSHAN SHEKARA POOJARY
ROLL NO 2314515632
SET – 1
1) Software Development Life Cycle (SDLC) is a methodical process applied to create,
develop, test, and deploy quality software. SDLC is a systematic process that helps
achieve efficient software development that satisfies customer requirements. SDLC
comprises various phases that contribute to the success of the software development
process. These phases enable organizations to manage risk, costs, and project manage-
ment more effectively.
Phases of SDLC:
a. Planning
Planning is the backbone of SDLC. It is the process of understanding project
goals, scope definition, risk identification, cost estimation, and resource alloca-
tion. Stakeholders, business analysts, and project managers work together to
determine project feasibility. This phase ensures that all requirements are
properly documented, minimizing uncertainties in subsequent stages.
b. Requirement Analysis
In this stage, detailed requirements are collected from end-users, customers, or
stakeholders. Business analysts interact with clients to capture functional and
non-functional requirements and document them. Methods such as brainstorm-
ing sessions, interviews, and surveys are employed to capture all user expecta-
tions. A Software Requirement Specification document is produced to be used
as a guideline by the development team.
c. Design
Once requirements are complete, the system architecture is planned. System ar-
chitects and developers prepare high-level and low-level design documents.
This stage determines software structure, technology stack, database schema,
user interface design, and data flow. The design stage ensures that the software
is optimized for performance, scalability, and security.
d. Development (Implementation)
This is where the actual coding is done. Code is written by developers in ac-
cordance with design documents and project specifications. The programming
language, frameworks, and development tools are selected based on project re-
quirements. Coding standards and best practices guide the development stage to
make code efficient and easier to maintain. Agile, waterfall, or DevOps meth-
odologies are used by teams to facilitate development.
e. Testing
Once developed, software is tested thoroughly to detect and rectify defects.
Quality Assurance (QA) teams carry out different types of tests like unit testing,
integration testing, system testing, and user acceptance testing (UAT). Auto-
mated and manual testings are conducted to ensure that the software works as
expected and according to user requirements. This stage makes sure that the end
product is free from bugs and stable.
f. Deployment
Once testing is done and software is stabilized, it is put into the production en-
vironment. Deployment strategies such as phased rollout, blue-green deploy-
ment, and continuous deployment reduce risks to a minimum. This phase in-
volves software installation, configuration, and training users if necessary.
g. Maintenance
The last phase is software maintenance and support. Bugs are corrected, soft-
ware is enhanced with new features, and system security is maintained. Updates
and patches are periodically released to maintain the software operational and
compatible with changing technologies.
All SDLC phases are important in producing quality software while reducing risks and
achieving business objectives.
2) The Prototyping Model is a software development method in which a working model
or prototype of the system is developed prior to final development. The prototype is an
initial version of the software that enables stakeholders to comprehend system func-
tionality, receive feedback, and make requirements more precise. The model is espe-
cially effective when the project has ambiguous requirements or when the user interface
is an important part of development.
In this method, a prototype is designed, tested, and iteratively improved through user
feedback. The process is repeated until the end product is satisfactory with regard to all
user requirements. Once the prototype is complete, it is used as a starting point for
actual system creation.
Phases of the Prototyping Model:
a. Requirement Gathering and Analysis
During this stage, initial requirements are gathered from stakeholders. In con-
trast to the classical Software Development Life Cycle (SDLC), requirements
are not completely elaborated at this point. Rather, a preliminary idea of the
system is recorded to develop the first prototype.
b. Quick Design
A rudimentary and straightforward design of the system is established based on
the requirements obtained. Key features are emphasized, but no complete func-
tionality. Visualization of the system and realization of user requirements are
achieved through this phase.
c. Prototype Development
This phase involves the creation of a prototype by employing little coding, rep-
licating primary functionalities. This is not the final product but a preliminary
working model. The prototype can be interactive where users can test features.
d. User Evaluation and Feedback
The prototype is shown to users and stakeholders for feedback. They assess the
functionality, interface, and usability of the system. Depending on their feed-
back, required changes and improvements are determined.
e. Refinement and Enhancement
The prototype is enhanced based on user feedback. This process is iterative, so
several refinements can be done before users are content. Each iteration incor-
porates more detail and functionality into the system.
f. Final Product Development
Once the prototype satisfies all the requirements and is user-validated, the final
system is created. The improved prototype is used as a blueprint for the actual
software development, with the assurance of having a clearly defined and user-
approved system.
g. Testing and Deployment
The final system is thoroughly tested prior to deployment. After testing, the
software is deployed for use.
Advantages of the Prototyping Model:
a. Improved Requirement Understanding: Users can observe a working model
early, assisting in clarifying and defining requirements.
b. Early User Involvement: Users actively participate in development, ensuring
the system meets expectations.
c. Less Development Time and Expense: Early detection of issues avoids expen-
sive changes in future stages.
d. Enhanced User Satisfaction: Ongoing feedback guarantees the end product
meets user requirements.
e. Higher System Usability: Interactive prototypes improve the interface and over-
all experience.
Disadvantages of the Prototyping Model:
a. Time-Consuming Process: Multiple iterations may extend the development
timeline.
b. High Resource Utilization: Prototyping and prototyping refinement take more
effort and expense.
c. Scope Creep: Users can continue to request changes, resulting in uncontrollable
changes.
d. Misleading Prototype: Users might confuse the prototype with the final system,
which creates unrealistic expectations.
e. Poor Documentation: As development takes center stage, formal documentation
is often overlooked.
3) a) Prototyping is an important methodology in software development that serves to im-
prove system requirements prior to large-scale development. It comes in two forms:
Closed-ended prototyping and Open-ended prototyping.
Closed-ended prototyping is the development of a prototype with a specified scope and
certain requirements. The prototype is constructed with a defined goal, and once it has
fulfilled its intention, it is abandoned or converted into the end system. This kind of
prototyping comes in handy if the intention is to test particular features, evaluate usa-
bility, or prove functionality to stakeholders. It keeps development under control and
in the planned framework, eliminating avoidable changes. It might restrain flexibility
because it does not provide room for incessant alterations except for first-time require-
ments.
Open-ended prototyping, conversely, is about iterative development with the prototype
in constant evolution with feedback from the users. There is no set endpoint, enabling
developers to improve the system dynamically. This method is effective for projects
with undefined requirements or requirements likely to alter several times. It offers more
flexibility and accommodates user-centric design, allowing the end product to fulfill
shifting needs. It can cause scope creep, since stakeholders are likely to continue re-
questing alterations, prolonging development time and cost.
Both prototyping techniques are used for different reasons. Closed-ended prototyping
is appropriate for well-defined projects where rapid validation is needed, whereas open-
ended prototyping is best for projects where iterative refinement and flexibility in re-
quirements are needed. The appropriate technique to use is based on project complexity,
budget, and stakeholder expectations.
3) b) Requirement management is an important process in software development that cap-
tures all the project requirements, documents them, analyzes them, and follows them
throughout the development life cycle. It is responsible for providing software that sat-
isfies business goals and user needs.
Phases of Requirement Management
a. Requirement Gathering: Business analysts, stakeholders, and customers work
together to define functional and non-functional requirements. Interviews,
brainstorming, and document analysis are involved in the process.
b. Requirement Documentation: Captured requirements are written in a formal
style, e.g., a Software Requirement Specification (SRS) document. Effective
documentation facilitates clear understanding of project scope and expectations
among teams.
c. Requirement Analysis: Requirements are assessed for feasibility, completeness,
and consistency. Inconsistent or ambiguous requirements are reworked through
dialogue.
d. Requirement Prioritization: Requirements are ranked in order of priority based
on business value, criticality, and feasibility to enable efficient development.
e. Requirement Traceability: Traceability matrices are used to track the require-
ments over different phases so that no important requirements are left behind.
f. Requirement Change Management: In case of any changes, a formal change
management process will ensure that the changes are thoroughly reviewed and
incorporated.
Effective requirement management helps reduce project risks, improve communication,
and ensure a smooth development process by keeping requirements well-defined and
controlled.
SET – 2
4) Code Verification Methods:
Code verification is a fundamental process in software development that guarantees the
correctness, quality, and efficiency of code. A number of methods are used to confirm
code functionality, detect defects, and guarantee that it fulfills the given requirements.
These methods enable developers to detect errors early and enhance code maintainabil-
ity.
a. Unit Testing
Unit testing is the most widely applied technique of code verification. It's a pro-
cess where individual units or parts of the code are tested separately to ensure
they function correctly. Unit tests are coded to verify the correctness of small
bits of code, usually functions or methods, and are automated. This technique
catches bugs early during development, makes code more reliable, and offers
instant feedback to developers.
b. Integration Testing
Once individual parts are tested using unit testing, integration testing ensures
how the parts interact with each other. This method ensures that various com-
ponents of the system communicate properly when integrated. It identifies in-
terface faults and inter-module communications properly, ensuring that the sys-
tem functions as an entity.
c. Static Code Analysis
Static code analysis is checking the source code without running it. Tools scan
the code for issues, such as vulnerabilities, violations of coding standards, and
so on, like memory leaks, race conditions, and security holes. Static analysis
aids in ensuring that code meets industry standards through early problem iden-
tification and verification.
d. Code Reviews
Code reviews are where peer developers review one another's code to detect
bugs, enhance code quality, and make sure that coding guidelines are in place.
This process assists in finding bugs and design issues that automated testing
might fail to catch. It also shares knowledge and encourages improved coding
practices among teams.
e. Regression Testing
Regression testing is conducted to verify that new changes or additions to the
code do not introduce new bugs or destroy current functionality. This method is
important when developing an existing system or when making changes since
it confirms that the system remains stable following changes. Automated re-
gression testing can be utilized to check a large quantity of test cases efficiently
and speedily.
f. Acceptance Testing
Acceptance testing ensures that the code complies with the business needs and
operates as expected by the users. It consists of testing the system using real or
dummy data to make sure it operates in the correct way under various situations.
This is usually the last check prior to the software deployment in a live environ-
ment.
Coding Tools:
Coding utilities are computer programs that are intended to help developers write, test,
and maintain good-quality code. They improve productivity, simplify development pro-
cesses, and enhance code quality.
a. Integrated Development Environments (IDEs)
IDEs, like Visual Studio, Eclipse, or IntelliJ IDEA, are integrated development
environments that offer a range of features such as code completion, syntax col-
oring, debugging, and integration with version control. They cover a wide vari-
ety of programming languages and include an easy-to-use interface for coding
and managing code. IDEs frequently include testing and profiling tools to assist
developers in coding optimized, bug-free code.
b. Version Control Systems
Version control tools such as Git and SVN enable developers to track changes
made to the codebase over a period of time. These platforms monitor changes,
support branching and merging, and facilitate collaboration from multiple de-
velopers. Version control protects code changes as they are stored, enabling the
developer to reverse changes if any issues arise.
c. Linters and Formatters
Linters are pieces of software that, automatically, scan code for syntax errors,
formatting, and possible bugs. Software such as ESLint for JavaScript or Pylint
for Python scan code against established rules to check for consistency and fol-
lowability with coding standards. Formatters like Prettier enforce that code is
always formatted in a clean, readable way, which makes it easier to understand
and maintain.
d. Debugging Tools
Debugging tools like GDB or the integrated debuggers in IDEs enable develop-
ers to detect and correct runtime errors. These tools support step-by-step execu-
tion, variable examination, and memory management analysis, which facilitates
the detection and correction of problems in the code.
e. Automated Testing Tools
Automated testing software, such as JUnit for Java or Selenium for web appli-
cations, is utilized to author and run test scripts automatically. Automated test-
ing software assists in confirming the code functionality using unit, integration,
and UI tests, enhancing code reliability and minimizing manual testing effort.
f. Code Coverage Tools
Code coverage utilities like Istanbul or JaCoCo provide the percentage of code
being run during the test. The tools ensure all important paths of the code are
covered, thus enhancing the test efficiency and revealing the areas to be tested
more.
By utilizing these programming tools and checking mechanisms, the developers can
make their code of higher quality, eliminate bugs, and enhance the productivity of the
software development process.
5) (a) Black Box Testing
Black box testing is one of the testing techniques for software that aims at testing the
functionality of the application without having an idea of what is inside, i.e., its internal
processes or code design. Here, the tester acts like an end-user and performs inputs and
receives outputs. The main aim here is to confirm that the software behaves as specified
in its requirements, without care about how such outputs are achieved internally.
Black box testing tests the system from a functional standpoint, with an eye on the
following important aspects:
Input and Output Validation: The testers input various sets of inputs and observe
whether the correct outputs are generated by the system. This detects problems
with data processing and handling.
User Interface Testing: Owing to the fact that black box testing incorporates
interacting with the application via its interface, it guarantees that the user in-
terface (UI) is responsive, intuitive, and error-free.
Requirement-based Testing: Test cases are developed against the system's func-
tional requirements, guaranteeing that the software performs as per the set ex-
pectations.
Regression Testing: Black box testing is frequently employed to ensure that new
changes or features do not negatively impact existing functionality.
This testing method is very effective at detecting functional faults, but it is possible that
it does not reveal internal code-level problems like memory leaks, unhandled excep-
tions, or performance bottlenecks, since the testers have no visibility into the internal
behavior of the application.
(b) White Box Testing
White box testing, also known as clear-box or structural testing, is a testing technique
in which the internal code and logic of the system are fully known by the tester. In this
technique, testing is aimed at checking the internal structures, code paths, and logic
flow of the software. White box testing is done with access to the source code and is
intended to check that the program works correctly at the code level.
Critical aspects of white box testing are:
Code Coverage: White box testing assures that every path of code, branch, loop,
and condition is tested. This is accomplished by creating test cases that cause
all possible paths of execution through the application code.
Logic and Algorithm Testing: The testers concentrate on ensuring the correct
functioning of algorithms, logic operations, and computation employed in the
code.
Security Testing: White box testing identifies possible vulnerabilities, e.g., SQL
injection or buffer overflow, by analyzing how the code handles data and com-
municates with other parts.
Code Optimization: As the source code is available to the testers, they can also
evaluate areas for optimization in terms of efficiency, readability, and maintain-
ability.
Whereas white box testing can capture problems within the internal structure and logic
of an application with considerable success, it will involve time and effort and also
demands a high level of understanding of the system's codebase.
(c) Validation Testing
Validation testing is a kind of software testing that confirms that the software accom-
plishes the designed business requirements and fulfills the requirements of the target
users. Unlike verification testing, which considers whether the product was developed
as per its specifications, validation testing considers whether the correct product has
been developed for user expectations.
The most significant points of validation testing are:
User Requirements Verification: Testing for validation checks that the software
behaves as it should from the user's point of view, meeting all the user require-
ments and use cases.
Functional Validation: Testers determine whether the software gives the ex-
pected outcome under actual circumstances and whether it acts as it should in
different situations.
End-to-End Testing: End-to-end system testing is a common form of validation
testing in which the whole application is tested within an integrated environ-
ment, mimicking the mode of end user interaction with the system.
Acceptance Testing: Another central component of validation testing is user ac-
ceptance testing (UAT) where real users or clients are involved in testing the
software before release for deployment.
Validation testing is important because it guarantees that the software not only works
but also meets business objectives and customer requirements. It minimizes the risk of
producing software that falls short of customers' expectations, leading to general prod-
uct quality and customer satisfaction.
6) Software Quality Assurance (SQA) is a process of ensuring that software products are
of required quality and specifications throughout the entire software development cy-
cle. SQA involves a list of activities intended to find and avoid defects in software
programs so that the final product is of high quality, reliable, and as per the expectations
of the end-user. It focuses not only on the product itself but also on the processes in-
volved in its development, emphasizing continuous improvement, compliance with in-
dustry standards, and the effective management of resources.
SQA is necessary to obtain software quality and includes systematic measures to avoid
errors early, find defects early, and make the software development process efficient
and effective. The prime objective is to provide a product that is solid, secure, and scal-
able.
Activities Throughout the Project Lifecycle
a. Requirement Analysis
At the project initiation, SQA starts with requirement analysis. The quality as-
surance teams cooperate very closely with stakeholders, business analysts, and
customers to make certain that the software requirements are well defined,
achievable, and testable. They check the feasibility of the requirements and
make sure that all the requirements are adequate to meet the needs of the user.
This phase prevents ambiguities that may result in defects later during develop-
ment.
b. Design Phase
SQA checks in the design phase that the design and architecture are according
to the requirements. Review meetings and design inspections are performed to
check for potential faults or loopholes early in the design. SQA teams also check
whether the design follows industry best practices and quality standards and is
scalable and maintainable.
c. Development Phase
As the development stage goes on, SQA continuously monitors that coding
standards and guidelines are adhered to. There is frequent code review, static
code analysis, and automated testing that identifies defects at an early stage of
the development process. This stage makes sure that the codebase is clean, op-
timized, and integrated-ready.
d. Testing Phase
Testing is a fundamental part of SQA. Different testing strategies, including unit
testing, integration testing, system testing, and acceptance testing, are per-
formed to ensure that the software is satisfying its functional as well as non-
functional requirements. SQA further ensures that there is thorough testing, in-
cluding negative, boundary, and edge-case testing. Defects are aimed to be dis-
covered and corrected prior to the software release.
e. Deployment Phase
Prior to installing the software into a production system, SQA ensures that the
testing has all been successfully accomplished and that the system is in a releas-
able state. It includes deployment testing to ensure that the software functions
properly within the live system. Quality assurance also ensures user documen-
tation and training materials are thorough and accurate.
f. Post-Deployment and Maintenance
After the software is installed, SQA processes go on with post-deployment mon-
itoring, including performance monitoring, bug fixing, and maintaining the sta-
bility of the system. SQA makes sure that any problem that is detected in the
production environment is fixed quickly and effectively, keeping the quality of
the software intact throughout its life cycle. Improvements are constantly being
made based on feedback from the users, and updates or patches are tested prior
to release.
During the entire project life cycle, SQA focuses on process control, prevention of de-
fects, and ongoing improvement so that the delivered product exceeds or meets the ex-
pectations of users, adheres to applicable standards, and performs effectively in the
production environment.