SE
SE
Coupling: Coupling refers to the degree of interdependence between software modules, with
high coupling indicating close connections and low coupling indicating independence.
Types of coupling:
Data Coupling: Modules communicate through data, independent of each other. Examples
include customer billing systems.
Stamp Coupling: Modules pass the complete data structure from one to another, involving
tramp data. This choice may be necessary due to efficiency factors.
External Coupling: Modules depend on other modules, external to the software or hardware.
Examples include protocol, external file, device format.
Common Coupling: Modules share shared data, leading to difficulties in reusing modules and
controlling data accesses.
Content Coupling: One module can modify the data of another module. This is the worst form
of coupling and should be avoided.
Temporal Coupling: Two modules depend on the timing or order of events. This can result in
design issues and difficulties in testing and maintenance.
Sequential Coupling: The output of one module is used as the input of another module,
creating a chain of dependencies.
Functional Coupling: Two modules depend on each other’s functionality. This can result in
tightly-coupled code.
Interaction Coupling: This occurs due to methods of a class invoking methods of other classes.
Component Coupling: This refers to the interaction between two classes where a class has
variables of the other class.
Cohesion: Cohesion is the degree to which elements within a module work together for a single
purpose, with high cohesion indicating close relationships and low cohesion indicating looser
relationships.
Types of Cohesion:
Functional Cohesion: Every essential element for a computation is contained in the component.
It performs the task and functions.
Sequential Cohesion: An element outputs data that becomes the input for another element. It
occurs naturally in functional programming languages.
Communicational Cohesion: Two elements operate on the same input data or contribute
towards the same output data. Example: updating a database record and sending it to the
printer.
Procedural Cohesion: Elements ensure the order of execution. Actions are still weakly
connected and unlikely to be reusable.
Temporal Cohesion: Elements are related by their timing involved. Example: Initializing all parts
of the system.
Logical Cohesion: Elements are logically related but not functionally. Example: A component
reads inputs from tape, disk, and network.
Coincidental Cohesion: Elements are not related. Example: Printing next line and reverse the
characters of a string in a single component.
Functional Requirements: These are end user demands basic system facilities, including input,
operation, and output, incorporated into contract. These requirements directly impact final
product, unlike non-functional ones.
Differentiation:
1. Functional Requirements:
2. Non-functional Requirements:
• All transactions must be encrypted and comply with industry security standards.
• The system should be able to handle 100 million users with minimal downtime.
More Information:- https://www.geeksforgeeks.org/functional-vs-non-functional-requirements/#examples-of-functional-and-nonfunctional-
requirements
Goals of Software Implementation:
• Access to Latest Technology: Software implementation allows companies to meet the latest
tech requirements by replacing old apps with new ones.
• Efficiency and Productivity: Automation can eliminate processes, implement tasks, and
increase productivity.
• Maximizing ROI: Well-executed software implementation can yield significant financial returns
through cost savings, increased revenue, or both.
More Information: https://www.geeksforgeeks.org/what-is-software-implementation/#why-is-software-implementation-important
There are three types of SRS (Software Requirements Specifications) described below:
Requirements gathering is a crucial phase in software development life cycle, ensuring accuracy
and completeness of requirements, which are essential for project success.
• Step 1 :- Assigning Roles: Identify and engage with all relevant stakeholders to capture diverse
requirements.
• Step 2 :- Define Project Scope: Outline the project's objectives, boundaries, and limitations to
establish a common understanding.
• Step 3 :- Conducting Stakeholder Interviews: Schedule interviews with key stakeholders to
gather information about their needs, preferences, and expectations.
• Step 4 :- Documenting Requirements: Systematically document requirements, including
functional and non-functional requirements.
• Step 5 :- Verifying and Validating Requirements: Verify and validate requirements to ensure
alignment with stakeholders' intentions and to meet project goals.
• Step 6 :- Prioritizing Requirements: Prioritize requirements based on their importance to
project goals and constraints, creating a development roadmap.
1. Problem Recognition :
Requirement analysis aims to understand objectives, value, benefits, and quality to
identify essential business problem solutions.
3. Modeling :
The functional and behavioral models of a system are established after gathering
information from various tasks using a domain model or conceptual model.
4. Specification :
The software requirement specification (SRS) which helps to specify the requirement
whether it is functional or non-functional should be developed.
5. Review :
After developing the SRS, it must be reviewed to check whether it can be improved or
not and must be refined to make it better and increase the quality.
1. Planning and requirements: The initial phase involves defining the project's
scope, objectives, and constraints, and creating a project plan outlining schedule,
resources, and milestones.
2. System design: The high-level architecture phase involves creating the software
system's structure, including major components, their interactions, and data flow
between them.
3. Detailed design: The phase involves creating detailed specifications for each system
component, detailing data structures, algorithms, and interfaces, breaking down the
system design into detailed descriptions.
5. Module code and test: The process involves creating the source code for each module
or component, coding its functionalities, implementing algorithms, and developing
interfaces as per the detailed design.
6. Integration and test: This phase involves integrating individual modules into a
comprehensive system, ensuring they function as intended.
7. Cost Constructive model: The Constructive Cost Model (COCOMO) is a widely used
method for estimating the cost and effort required for software development projects.
Software Risk:
2. Budget Risk: Budget-related risks, primarily due to overruns, require proper financial
management for project success. Mismanagement can lead to budget concerns and
potential project failure. Some reasons for Budget risks –
• Cost overruns
3. Operational Risks : Operational risk refers to procedural risks that occur in daily project
activities due to improper process implementation or external operational risks. Some
reasons for Operational risks –
• Insufficient resources
• Insufficient training
4. Technical Risks : Technical risks are functional or performance risks primarily affecting
the functionality or performance of a product or software component. Some reasons for
Technical risks –
5. Programmatic Risks : Programmatic risks are external, unavoidable risks that are outside
of the control of programs and come from outside sources.Some reasons for
Programmatic risks –
Risk management is a sequence of steps that help a software team to understand, analyze, and
manage uncertainty. Risk management process consists of
• Risks Identification.
• Risk Assessment.
• Risks Planning.
• Risk Monitoring
Risk Identification
Risk analysis
Risk analysis is a crucial process that assesses the potential impact and likelihood of identified
risks on an organization, determining their severity and determining effective management
strategies.
Risk Planning
Risk planning is a strategic approach to effectively manage and mitigate identified risks,
encompassing prevention, mitigation, and contingency measures to safeguard an organization's
objectives and assets.
Risk Monitoring
Risk monitoring is a continuous process of tracking and managing identified risks to assess their
status, effectiveness, and alignment with organizational objectives and adapt to new challenges.
Waterfall Model:
The waterfall model is a popular and effective version of the System Development Life Cycle
(SDLC) for software engineering, ensuring a development phases start after completion of the
previous one.
Requirement Phase: The first phase is the requirement phase. The requirement phase involves
collecting and documenting system requirements, which is crucial for the next phases. The
design phase focuses on preparing the blueprint for the software system, ensuring no problems
arise and finding solutions to requirements.
Implementation Phase: The implementation phase involves installing hardware, software, and
application programs, and implementing database design. This phase is the longest lasting in
the waterfall model.
Verification Phase: The verification phase evaluates the software's quality and effectiveness,
ensuring defects are detected and reducing the risk of software failure.
Maintenance Phase: The maintenance phase is the final phase, where problems are addressed
and the finished software is maintained.
• This is a base model, all the SDLC models that came after this were created keeping this
in mind, although they worked to remove its shortcomings.
• In this model, we can move to the next phase only after the first phase is successfully
completed so that there is no overlapping between the phases.
• In this model, complete and accurate requirements are expected at the beginning of the
development process.
• Working software is not available for very long during the development life cycle.
• We cannot go back to the previous phase due to which it is very difficult to change the
requirements.
• Risk is not assessed in this, hence there is high risk and uncertainty in this model.
• Due to its sequential nature this model is not realistic in today's world.
Definition: The V-Model, also known as the Verification and Validation Model, is a disciplined
SDLC model used in software development, executing each process sequentially, starting after
the previous phase ends.
Phases of V-Model:
Requirement Analysis: The requirements analysis is the first phase of the development cycle,
where the product's requirements are analyzed based on the customer's needs. This phase
determines the next phases and includes acceptance tests.
System Design: The system design phase involves preparing a complete design of the system,
including hardware and technical components.
Architecture Design: Architectural design, also known as high level design (HLD), involves
designing the software's internal and external connections.
Module Design: Module design, also known as low level design (LLD), involves specifying the
internal design of all modules, ensuring they align with the system architecture. Unit tests are
also designed during this phase.
Coding: The coding phase involves coding the design and specification from the previous
phases.
System Testing: System testing checks the system's functionality, with a focus on performance
and regression testing.
Acceptance Testing: Acceptance testing, on the other hand, checks the system's compatibility
with other systems and non-functional issues like load time and performance in the user
environment.
Advantages of V-Model
• Planning, testing and designing tests can be done even before coding.
• This is a very disciplined model, in which phase by phase development and testing goes
on.
• Small and medium scale developments can be easily completed using it.
Disadvantages of V-Model
• This model is not at all suitable for a project which is unclear and in which there are
changes in the requirement.
More Information:- https://www.geeksforgeeks.org/top-8-software-development-models-used-in-industry/#2-vmodel
Incremental Model:
Definition: The Incremental Model divides software development into multiple increments,
following the same phases, allowing complex projects to be developed in multiple modules or
builds.
• Modeling: Preparing and saving module designs in DDS (Design Document Specification).
• Construction: Implementing the module design in coding and testing the code.
• Development of next modules: Combining previous modules to create new functionality. This
process continues until complete modules are developed.
• Important modules/functions are developed first and then the rest are added in chunks.
• Working software is prepared quickly and early during the software development life
cycle (SDLC).
• This model is flexible and less expensive to change requirements and scope.
• The customer can respond to each module and provide feedback if any changes are
needed.
• Business modeling: Designing a business model based on the flow of information and
distribution between business channels.
• Data modeling: Defines data objects required for the business using the prepared business
model.
• Process modeling: Converts data objects to establish the business information flow to achieve
specific business objectives.
• Application generation: Building software based on the output of the previous phases, using
automation tools.
• Testing and turnover: Testing prototypes or components and interfaces separately during
each iteration, reducing testing time in rapid application development.
• It is easy to transfer like scripts because high level abstraction and intermediate codes
are used in it.
• It is cost effective.
• It is not suitable for project that are complex and takes long time.
• In this, feedback from the client is required for the development of each phase.
• This model is suitable only for component based and scalable systems.
Iterative Model:
Definition: The Iterative model involves developing software with specific requirements,
reviewing it, and making necessary changes, repeating the process until the final product is
achieved.
• Testing: Identifies bugs and errors through performance, security, requirement, and stress
testing.
• Maintenance: Addresses customer feedback, solves problems, fixes errors, and updates
software.
Definition: The prototype model involves creating software application prototypes, which are
then used to develop the final product.
Building the Initial Prototype: • Displaying basic requirements and introducing a user interface.
• Used when specific knowledge about input, processing, and output is lacking.
Agile Model:
Definition: Agile model is a combination of iterative and incremental models, that is, it is made
up of iterative and incremental models.
• Small development team size (5-9 people) is recommended for face-to-face communication.
• Two programmers work together: one for coding and the other for review.
• Focuses on teamwork.
• Easy to manage.
Definition: Phase Containment of Errors is the practice of identifying and resolving defects early
in the Software Development Life Cycle (SDLC) to reduce costs and rework.