Professional Documents
Culture Documents
SE (Software Engineering)
SE (Software Engineering)
SE (Software Engineering)
Software is a program or set of programs containing instructions that provide desired functionality.
Software: Instructions (computer programs) that when executed provide desired features, function, and performance.
Software Engineering is the process of designing, developing, testing, and maintaining software. It is a systematic and disciplined
approach to software development that aims to create high-quality, reliable, and maintainable software. Software engineering
includes a variety of techniques, tools, and methodologies, including requirements analysis, design, testing, and maintenance.
Software engineering is a systematic approach to the design, development, operation, and maintenance of a software system.
• Modularity: Breaking the software into smaller, reusable components that can be developed and tested independently.
• Abstraction: Hiding the implementation details of a component and exposing only the necessary functionality to other
parts of the software.
• Encapsulation: Wrapping up the data and functions of an object into a single unit and protecting the internal state of an
object from external modifications.
• Reusability: Creating components that can be used in multiple projects, which can save time and resources.
• Maintenance: Regularly updating and improving the software to fix bugs, add new features, and address security
vulnerabilities.
• Testing: Verifying that the software meets its requirements and is free of bugs.
• Design Patterns: Solving recurring problems in software design by providing templates for solving them.
• Agile methodologies: Using iterative and incremental development processes that focus on customer satisfaction, rapid
delivery, and flexibility.
• Continuous Integration & Deployment: Continuously integrating the code changes and deploying them into the
production environment.
• System software
• Application software
• Engineering/Scientific software
• Embedded software
• Web Apps (Web applications)
• AI software
1)Requirements Analysis
2)Software Design
3) Coding
• Goal of the coding phase is to translate the design of the system into code in a given programming language.
• Coding phase affects both testing and maintenance.
• Programs must be easy to read and understand.
4) Testing
1. Waterfall model
2. Incremental Process models
• Incremental Development model
• Rapid application development model (RAD)
3. Evolutionary Process models
• Prototype Model
• Spiral Model
• Concurrent Development model
4. Component Based Development Model
5. Agile Development Models
• Programmer typically starts to write the program immediately after he has formed an
informal understanding of the requirements.
• Product is constructed without any specifications or any attempt at design.
• Not a well-defined approach
• Has two phases 1. Build the code 2. fix the code.
• Disadvantage:
• A large no. of code fixes is required.
• Suitable for small projects.
Waterfall Model
• The Waterfall Model is a traditional and linear approach to software development that follows a sequential, phased
progression.
• Each phase in the Waterfall Model must be completed before moving on to the next, and changes to earlier phases are
discouraged once they have been finalized.
• The model is called "waterfall" because it resembles a cascading flow, where progress is unidirectional, much like water
flowing over a waterfall.
• The classical waterfall model divides the life cycle into a set of phases.
• This model considers that one phase can be started after the completion of the previous phase.
• That is the output of one phase will be the input to the next phase.
• Thus, the development process can be considered as a sequential flow in the waterfall. Here the phases do not overlap
with each other.
1. Feasibility Study:
• Goal: Determine financial and technical feasibility of software development.
• Identify possible strategies to solve the problem.
• Analyze solutions for benefits and drawbacks.
• Choose the best solution as the basis for subsequent phases.
2. Requirements Analysis and Specification:
• Aim: Understand customer requirements and document them.
• Requirement gathering and analysis:
• Gather all software requirements from the customer.
• Analyze to remove incompleteness and inconsistencies.
• Requirement specification:
• Document analyzed requirements in a Software Requirement Specification (SRS) document.
• SRS serves as a contract between the development team and customers.
3. Design:
• Goal: Convert SRS requirements into a format for coding.
• Includes high-level and detailed design.
• Develop Software Design Document (SDD) to document design efforts.
4. Coding and Unit Testing:
• Coding phase translates design into source code.
• Each designed module is coded.
• Unit testing checks if each module works correctly.
5. Integration and System Testing:
• Integration: Combine coded modules incrementally.
• System testing:
• Alpha testing by the development team.
• Beta testing by a friendly set of customers.
• Acceptance testing by the customer after software delivery.
6. Maintenance:
• Most important phase, consuming 60% of total effort.
• Types of maintenance:
• Corrective: Fix errors not discovered during development.
• Perfective: Enhance functionalities based on customer requests.
• Adaptive: Modify for new environments (platforms or operating systems).
Disadvantages:
• No feedback path
• Difficult to accommodate change requests.
• Inefficient error corrections
• No overlapping of phases
• Hard to use for real projects.
Advantages:
• Easy to Understand
• Individual Processing
• Properly Defined
• Clear Milestones
• Properly Documented:
• It is almost the same as the classical waterfall model except some changes are made to increase the efficiency of the
software development.
• The iterative waterfall model provides feedback paths from every phase to its preceding phases, which is the main
difference from the classical waterfall model.
• The Iterative Waterfall Model is a software development approach that combines the sequential steps of the
traditional Waterfall Model with the flexibility of iterative design. It allows for improvements and changes to be made at
each stage of the development process, instead of waiting until the end of the project.
• Feedback Path
• Simple
• Cost-Effective
• Well-organized
• Risk Reduction
• Quality Assurance
• Improved Customer Satisfaction: Predictable Outcomes
• Faster Time to Market
• Easy to Manage
Drawbacks of Iterative Waterfall Model:
Prototyping model
• A prototyping model is a software development approach that involves creating a preliminary version of a system or
application to gather feedback, test functionality, and identify potential issues early in the development process.
Build a working prototype of system, before development of the actual software.
• Prototype is a simple or basic implementation.
• It has limited functional capabilities, low reliability, inefficient performance as compared to the actual software.
• It has dummy functions.
• Uses software tools.
Types:
1. Throwaway
2. Evolutionary
3. Incremental
This technique offers a useful method of exploring ideas and getting customer feedback for each of them. In this method, a
developed prototype need not necessarily be a part of the ultimately accepted prototype. Customer feedback helps in
preventing unnecessary design faults and hence, the final prototype developed is of better quality.
Evolutionary Prototyping
In this method, the prototype developed initially is incrementally refined based on customer feedback till it finally gets
accepted. In comparison to Rapid Throwaway Prototyping, it offers a better approach which saves time as well as effort.
Incremental Prototyping
In this type of incremental Prototyping, the final expected product is broken into different small pieces of prototypes and
being developed individually. In the end, when all individual pieces are properly developed, then the different prototypes are
collectively merged into a single final product in their predefined order.
Uses of prototyping model:
• use the prototyping model for development of the graphical user interface (GUI) part of an application.
• useful when the exact technical solutions are unclear to the development team.
• prototyping model can be deployed when highly efficient software is required.
Advantages:
• appropriate for projects that suffer from technical, and requirements risks.
• The customers get to see the partial product early in the life cycle. This ensures a greater level of customer satisfaction
and comfort.
• New requirements can be easily accommodated as there is scope for refinement.
• Missing functionalities can be easily figured out.
Disadvantages:
Spiral model
• This model gets its name from the appearance of its diagrammatic representation that looks like a spiral with many.
• The exact number of loops of the spiral is not fixed and can vary from project to project.
• Each loop of the spiral is called a phase of the software process.
• The exact number of phases through which the product is developed can be varied by the project manager depending
upon the project risks.
• A prominent feature of the spiral model is handling unforeseen risks that can show up much after the project has started.
Requirements are gathered from the customers and the objectives are identified, elaborated, and analysed at the start of every
phase. Then alternative solutions possible for the phase are proposed in this quadrant.
During the second quadrant, all the possible solutions are evaluated to select the best possible solution. Then the risks associated
with that solution are identified and the risks are resolved using the best possible strategy. At the end of this quadrant,
the Prototype is built for the best possible solution.
In the fourth quadrant, the Customers evaluate the so far developed version of the software. In the end, planning for the next
phase is started.
Advantages:
• For projects having many unknown risks that might show up as the development proceeds, the spiral model would be the
most appropriate development model to follow.
• It is much more powerful than the prototyping model.
• Good for large Projects
• Customer Satisfaction
Disadvantages:
• Complex model to follow, since it is risk driven and is more complicated phase structure than the other models.
• Requires knowledgeable and experienced staff in the project.
Incremental Model
Incremental Model is a process of software development where requirements are divided into multiple standalone modules of the
software development cycle. In this model, each module goes through the requirements, design, implementation, and testing
phases. Every subsequent release of the module adds function to the previous release. The process continues until the complete
system is achieved.
• Error reduction
• Incremental resource deployment
Disadvantage:
• The Rapid Application Development Model was first proposed by IBM in the 1980s.
• The critical feature of this model is the use of powerful development tools and techniques.
• A software project can be implemented using this model if the project can be broken down into small modules wherein
each module can be assigned independently to separate teams.
• These modules can finally be combined to form the final product. Development of each module involves the various basic
steps as in the waterfall model i.e analyzing, designing, coding, and then testing, etc.
Requirements Planning – It involves the use of various techniques used in requirements elicitation like brainstorming, task
analysis, form analysis, user scenarios, FAST (Facilitated Application Development Technique), etc. It also consists of the entire
structured plan describing the critical data, methods to obtain it, and then processing it to form a final refined model.
User Description – This phase consists of taking user feedback and building the prototype using developer tools. In other words, it
includes re-examination and validation of the data collected in the first phase. The dataset attributes are also identified and
elucidated in this phase.
Construction – In this phase, refinement of the prototype and delivery takes place. It includes the actual use of powerful
automated tools to transform process and data models into the final working product. All the required modifications and
enhancements are too done in this phase.
Cutover – All the interfaces between the independent modules developed by separate teams have to be tested properly. The use
of powerfully automated tools and subparts makes testing easier. This is followed by acceptance testing by the user.
The process involves building a rapid prototype, delivering it to the customer, and taking feedback. After validation by the
customer, the SRS document is developed and the design is finalized.
1. Business Modelling:
The information flow among business functions is defined by answering questions like what data drives the business process,
what data is generated, who generates it, where does the information go, who process it and so on.
2. Data Modelling:
The data collected from business modeling is refined into a set of data objects (entities) that are needed to support the business.
The attributes (character of each entity) are identified, and the relation between these data objects (entities) is defined.
3.Process Modelling:
The information object defined in the data modeling phase are transformed to achieve the data flow necessary to implement a
business function. Processing descriptions are created for adding, modifying, deleting, or retrieving a data object.
Advantages:
• The use of reusable components helps to reduce the cycle time of the project.
• Feedback from the customer is available at the initial stages.
• Reduced costs as fewer developers are required.
• The use of powerful development tools results in better quality products in comparatively shorter time spans.
• The progress and development of the project can be measured through the various stages.
• It is easier to accommodate changing requirements due to the short iteration time spans.
Disadvantages:
• The use of powerful and efficient tools requires highly skilled professionals.
• The absence of reusable components can lead to the failure of the project.
• The systems which cannot be modularized suitably cannot use this model.
• Customer involvement is required throughout the life cycle.
• It is not meant for small-scale projects as in such cases, the cost of using automated tools and techniques may exceed the
entire budget of the project.
Applications:
• This model should be used for a system with known requirements and requiring a short development time.
• It is also suitable for projects where requirements can be modularized and reusable components are also available for
development.
• The model can also be used when already existing system components can be used in developing a new system with
minimum changes.
• This model can only be used if the teams consist of domain experts. This is because relevant knowledge and the ability to
use powerful techniques are a necessity.
• Component-based architecture focuses on the decomposition of the design into individual functional or logical
components that represent well-defined communication interfaces containing methods, events, and properties.
• It provides a higher level of abstraction and divides the problem into sub-problems, each associated with
component partitions.
What is a Component?
A component is a modular, portable, replaceable, and reusable set of well-defined functionality that encapsulates its
implementation and exporting it as a higher-level interface.
A component is a software object, intended to interact with other components, encapsulating certain functionality or a set of
functionalities. It has an obviously defined interface and conforms to a recommended behavior common to all components within
an architecture.
Characteristics of Components
• Reusability − Components are usually designed to be reused in different situations in different applications. However,
some components may be designed for a specific task.
• Not context specific − Components are designed to operate in different environments and contexts.
• Extensible − A component can be extended from existing components to provide new behavior.
• Encapsulated − A component depicts the interfaces, which allow the caller to use its functionality, and do not expose
details of the internal processes or any internal variables or state.
Advantages
• Ease of deployment − As new compatible versions become available, it is easier to replace existing versions with no impact
on the other components or the system as a whole.
• Reduced cost − The use of third-party components allows you to spread the cost of development and maintenance.
• Ease of development − Components implement well-known interfaces to provide defined functionality, allowing
development without impacting other parts of the system.
• Reusable − The use of reusable components means that they can be used to spread the development and maintenance
cost across several applications or systems.
• Reliability − The overall system reliability increases since the reliability of each individual component enhances the
reliability of the whole system via reuse.
• System maintenance and evolution − Easy to change and update the implementation without affecting the rest of the
system.
• Independent − Independency and flexible connectivity of components. Independent development of components by
different group in parallel. Productivity for the software development and future software development.
Requirements Elicitation:
Requirements elicitation is the process of gathering and defining the requirements for a system. It involves identifying, collecting,
and documenting the needs and expectations of stakeholders, including users, customers, and other relevant parties. The goal is
to ensure a comprehensive understanding of what the system is expected to accomplish. Techniques used in requirements
elicitation include interviews, surveys, workshops, observations, and studying existing documentation. This phase is crucial for
laying the foundation for a successful development process by capturing accurate and complete requirements.
Requirements Specification:
Once requirements are elicited, the next step is requirements specification, which involves documenting and describing the
gathered requirements in a clear and unambiguous manner. The specifications serve as a reference for both the development
team and stakeholders, providing a detailed understanding of what needs to be implemented. This documentation can take
various forms, including textual descriptions, diagrams, use cases, and prototypes. A well-written requirements specification
ensures that all stakeholders have a common understanding of the project's scope and objectives, reducing the likelihood of
misunderstandings or misinterpretations.
Verification and validation are two distinct processes that ensure the correctness and effectiveness of the requirements.
• Requirements Verification: This process involves checking that the documented requirements meet specified criteria for
completeness, correctness, consistency, and clarity. Verification ensures that the requirements align with the intended
scope of the project and adhere to quality standards. Techniques for verification include inspections, walkthroughs, and
reviews.
• Requirements Validation: Validation, on the other hand, focuses on confirming that the specified requirements accurately
represent the stakeholders' needs and that the proposed system will meet those needs when implemented. This process
ensures that the system will be effective in its intended environment. Validation techniques include prototyping,
simulations, and end-user evaluations.
Both verification and validation are iterative processes that occur throughout the development lifecycle. They help prevent errors
and misunderstandings early in the process, reducing the risk of costly changes later on. Successful verification and validation
contribute to the overall quality and success of the software development project.
Requirement management
Requirement management is the process of analyzing, documenting, tracking, prioritizing and agreeing on the requirement and
controlling the communication to relevant stakeholders.
• Interviews
• Brainstorming Sessions
A UML use case diagram is the primary form of system/software requirements for a new software program underdeveloped. Use
cases specify the expected behaviour (what), and not the exact method of making it happen (how).
A key concept of use case modelling is that it helps us design a system from the end user's perspective.
It is an effective technique for communicating system behaviour in the user's terms by specifying all externally visible system
behaviour.
Use Case
• i.e. Do something
• Each Actor must be linked to a use case, while some use cases may not be linked to actors.
A Use Case diagram illustrates a set of use cases for a system, i.e. the actors and the relationships between the actors and use
cases.
The include relationship adds additional functionality not specified in the base use case. The <<Include>> relationship is used to
include common behaviour from an included use case into a base use case in order to support the reuse of common behaviour.
The extend relationships are important because they show optional functionality or system behaviour. The <<extend>>
relationship is used to include optional behaviour from an extending use case in an extended use case. Take a look at the use case
diagram example below. It shows an extend connector and an extension point "Search".
SRS
"SRS" stands for Software Requirements Specification. It is a document that serves as a comprehensive and formal agreement
between the client and the development team regarding the detailed requirements of a software project. The SRS outlines the
functionalities, features, constraints, and other characteristics that the software product is expected to exhibit.
• Class-based modeling represents the objects that the system will manipulate, the operations that will be applied to the
objects to effect the manipulation, relationships between the objects, and the collaborations that occur between the
classes that are defined.
• The elements of a class- based model include classes and objects, attributes, operations, class responsibility, collaborator
(CRC) models, collaboration diagrams, and packages
• Evaluate all use cases to fully understand the sequence of interaction within the system.
• Identify events that drive the interaction sequence and understand how these events relate to specific objects.
• Create a sequence for each use case.
• Build a state diagram for the system.
• Review the behavioral model to verify accuracy and consistency.
Design Engineering
• Software design is an iterative process through which requirements are translated into a “blueprint” for constructing the
software. Initially, the blueprint depicts a holistic view of software.
• That is, the design is represented at a high level of abstraction— a level that can be directly traced to the specific system
objective and more detailed data, functional, and behavioral requirements.
Software Design is also a process to plan or convert the software requirements into a step that are needed to be carried out to
develop a software system
Design Principles
• The design should exhibit uniformity and integration- A design is uniform if it appears that one person developed the
entire thing. Rules of style and format should be defined for a design team before design work begins. A design is
integrated if care is taken in defining interfaces between design components
• Accommodate change –
The software should be designed in such a way that it accommodates the change implying that the software should adjust
to the change that is required to be done as per the user’s need.
• The design should be structured to degrade gently, even when aberrant data, events, or operating conditions are
encountered- Well designed software should never “bomb.” It should be designed to accommodate unusual
circumstances, and if it must terminate processing, do so in a graceful manner.
• Review to discover errors –
The design should be reviewed which means that the overall evaluation should be done to check if there is any error
present or if it can be minimized.
• Design is not coding and coding is not design –
Design means describing the logic of the program to solve any problem and coding is a type of language that is used for
the implementation of a design.
Design Concepts
1. Abstraction:
• It simply means to hide the details to reduce complexity and increases efficiency or quality.
Types of abstraction:
• Procedural
• Data
• Control
2. Refinement
Refinement helps the designer to reveal low-level details as design progresses. Both concepts aid the designer in creating a
complete design model as the design evolves.
3. Modularity
4. Software Architecture:
5. Pattern- a repeated form
6. Structural Partitioning:
7. Information Hiding
Functional Independence
• Software with effective modularity, that is, independent modules, is easier to develop because function may
be compartmentalised and interfaces are simplified (consider the ramifications when development is conducted by a
team).
• Independent modules are easier to maintain (and test) because secondary effects caused by design or code modification
are limited, error propagation is reduced, and reusable modules are possible.
To summarize, functional independence is a key to good design, and design is the key to software quality.
Cohesion Coupling
Cohesion represents the relationship within a module. Coupling represents the relationships between modules.
Increasing cohesion is good for software. Increasing coupling is avoided for software.
Cohesion represents the functional strength of modules. Coupling represents the independence among modules.
Highly cohesive gives the best software. Whereas loosely coupling gives the best software.
In cohesion, the module focuses on a single thing. In coupling, modules are connected to the other modules.
Cohesion is created between the same module. Coupling is created between two different modules.
There are Six types of Cohesion There are Six types of Coupling
• Without measure it is impossible to plan, detect problems, and improve a process and product.
• A software engineer collects measure and develops metrics so that indicators will be obtained.
• An indicator provides insight that enables the project manager or software engineers to adjust the process, the
project, or the product to make things better.
Conventional metrics
• Size‐oriented metrics
• Function‐oriented metrics
• Empirical estimation models
• Function Point Analysis (FPA) is a method or set of rules of Functional Size Measurement. It assesses the
functionality delivered to its users, based on the user’s external view of the functional requirements. It measures the
logical view of an application, not the physically implemented view or the internal technical view.
• The Function Point Analysis technique is used to analyze the functionality delivered by software and Unadjusted
Function Point (UFP) is the unit of measurement.
Objectives of FPA
• The objective of FPA is to measure software development and maintenance independently of the technology used
for implementation.
The Function Point (FP) is thus calculated with the following formula.
and ∑(fi) is the sum of all 14 questionnaires and show the complexity adjustment value/ factor-CAF (where i ranges from 1 to 14).
Usually, a student is provided with the value of ∑(fi)
When ∑(fi) = 70 then CAF = 0.65 + (0.01 * 70) = 0.65 + 0.7 = 1.35
COCOMO 2 MODEL
COCOMO 2 stands for Constructive Cost Model 2, which is a software cost estimation model that estimates the effort, duration,
and size of a software project based on various factors such as the project characteristics, the development environment, and the
personnel capability
● Application composition model: a submodel that estimates the effort and size of a software project based on the number of
object points, which are the units of functionality that are composed using graphical user interface tools or code generators
● Early design model: a submodel that estimates the effort and size of a software project based on the number of function points,
which are the units of functionality that are derived from the user requirements
● Post-architecture model: a submodel that estimates the effort and size of a software project based on the number of source
lines of code, which are the units of functionality that are implemented using a programming language
- Effort = A * Size^E * EM
- where A is a constant, Size is the estimated size of the project in object points, function points, or source lines of code, E is an
exponent that depends on the submodel, and EM is an effort multiplier that reflects the influence of various cost drivers