SE Unit-1
SE Unit-1
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.
It is a rapidly evolving field, and new tools and technologies are constantly being developed to
improve the software development process.
By following the principles of software engineering and using the appropriate tools and
methodologies, software developers can create high-quality, reliable, and maintainable software
that meets the needs of its users.
Software Engineering is mainly used for large projects based on software systems rather than single
programs or applications.
The main goal of Software Engineering is to develop software applications for improving quality,
budget, and time efficiency.
Software Engineering ensures that the software that has to be built should be consistent, correct,
also on budget, on time, and within the required requirements.
Components of Software
1. Program: A computer program is a list of instructions that tell a computer what to do.
2. Documentation: Source information about the product contained in design documents,
detailed code comments, etc.
3. Operating Procedures: Set of step-by-step instructions compiled by an organization to help
workers carry out complex routine operations.
1. Code: the instructions that a computer executes in order to perform a specific task or set of
tasks.
2. Data: the information that the software uses or manipulates.
3. User interface: the means by which the user interacts with the software, such as buttons,
menus, and text fields.
4. Libraries: pre-written code that can be reused by the software to perform common tasks.
5. Documentation: information that explains how to use and maintain the software, such as
user manuals and technical guides.
6. Test cases: a set of inputs, execution conditions, and expected outputs that are used to test
the software for correctness and reliability.
7. Configuration files: files that contain settings and parameters that are used to configure the
software to run in a specific environment.
8. Build and deployment scripts: scripts or tools that are used to build, package, and deploy
the software to different environments.
9. Metadata: information about the software, such as version numbers, authors, and copyright
information.
All these components are important for software development, testing and deployment.
Software is defined as a collection of computer programs, procedures, rules, and data. Software
Characteristics are classified into six major components. Software engineering is the process of
designing, developing, testing, and maintaining software. In this article, we will look into the
characteristics of Software in detail. We have also discussed each component of Software
characteristics in detail.
Software Crisis is a term used in computer science for the difficulty of writing useful and efficient
computer programs in the required time. The software crisis was due to using the same workforce,
same methods, and same tools even though rapidly increasing software demand, the complexity of
software, and software challenges. With the increase in software complexity, many software
problems arose because existing methods were insufficient.
Suppose we use the same workforce, same methods, and same tools after the fast increase in
software demand, software complexity, and software challenges. In that case, there arise some
issues like software budget problems, software efficiency problems, software quality problems,
software management, and delivery problems, etc. This condition is called a Software Crisis.
The cost of owning and maintaining software was as expensive as developing the software.
At that time Projects were running overtime.
At that time Software was very inefficient.
The quality of the software was low quality.
Software often did not meet user requirements.
The average software project overshoots its schedule by half.
At that time Software was never delivered.
Non-optimal resource utilization.
Challenging to alter, debug, and enhance.
The software complexity is harder to change.
Software processes in software engineering refer to the methods and techniques used to develop
and maintain software. Some examples of software processes include:
Waterfall: a linear, sequential approach to software development, with distinct phases such
as requirements gathering, design, implementation, testing, and maintenance.
Agile: a flexible, iterative approach to software development, with an emphasis on rapid
prototyping and continuous delivery.
Scrum: a popular Agile methodology that emphasizes teamwork, iterative development, and
a flexible, adaptive approach to planning and management.
DevOps: a set of practices that aims to improve collaboration and communication between
development and operations teams, with an emphasis on automating the software delivery
process.
Each process has its own set of advantages and disadvantages, and the choice of which one to use
depends on the specific project and organization.
Software Engineering Process is an engineering process that is mainly related to computers and
programming and developing different kinds of applications through the use of information
technology.
Software Quality shows how good and reliable a product is. To convey an associate degree example,
think about functionally correct software. It performs all functions as laid out in the SRS document.
But, it has an associate degree virtually unusable program. even though it should be functionally
correct, we tend not to think about it to be a high-quality product.
Another example is also that of a product that will have everything that the users need but has an
associate degree virtually incomprehensible and not maintainable code. Therefore, the normal
construct of quality as “fitness of purpose” for code merchandise isn’t satisfactory.
The modern read of high-quality associates with software many quality factors like the following:
SDLC is a process followed for software building within a software organization. SDLC consists of a
precise plan that describes how to develop, maintain, replace, and enhance specific software. The
life cycle defines a method for improving the quality of software and the all-around development
process.
SDLC specifies the task(s) to be performed at various stages by a software engineer or developer. It
ensures that the end product is able to meet the customer’s expectations and fits within the overall
budget. Hence, it’s vital for a software developer to have prior knowledge of this software
development process. SDLC is a collection of these six stages, and the stages of SDLC are as follows:
The information from this analysis forms the building blocks of a basic project. The quality of the
project is a result of planning. Thus, in this stage, the basic project is designed with all the available
information.
In this stage, all the requirements for the target software are specified. These requirements get
approval from customers, market analysts, and stakeholders.
This is fulfilled by utilizing SRS (Software Requirement Specification). This is a sort of document that
specifies all those things that need to be defined and created during the entire project cycle.
SRS is a reference for software designers to come up with the best architecture for the software.
Hence, with the requirements defined in SRS, multiple designs for the product architecture are
present in the Design Document Specification (DDS).
This DDS is assessed by market analysts and stakeholders. After evaluating all the possible factors,
the most practical and logical design is chosen for development.
After the development of the product, testing of the software is necessary to ensure its smooth
execution. Although, minimal testing is conducted at every stage of SDLC. Therefore, at this stage, all
the probable flaws are tracked, fixed, and retested. This ensures that the product confronts the
quality requirements of SRS.
After detailed testing, the conclusive product is released in phases as per the organization’s strategy.
Then it is tested in a real industrial environment. It is important to ensure its smooth performance. If
it performs well, the organization sends out the product as a whole. After retrieving beneficial
feedback, the company releases it as it is or with auxiliary improvements to make it further helpful
for the customers. However, this alone is not enough. Therefore, along with the deployment, the
product’s supervision.
The waterfall model is a software development model used in the context of large, complex
projects, typically in the field of information technology. It is characterized by a structured,
sequential approach to project management and software development.
The waterfall model is useful in situations where the project requirements are well-defined and the
project goals are clear. It is often used for large-scale projects with long timelines, where there is
little room for error and the project stakeholders need to have a high level of confidence in the
outcome.
1. Clarity and Simplicity: The linear form of the Waterfall Model offers a simple and
unambiguous foundation for project development.
2. Clearly Defined Phases: The Waterfall Model phases each have unique inputs and outputs,
guaranteeing a planned development with obvious checkpoints.
3. Documentation: A focus on thorough documentation helps with software comprehension,
maintenance, and future growth.
4. Stability in Requirements: Suitable for projects when the requirements are clear and stable,
reducing modifications as the project progresses.
5. Resource Optimization: It encourages effective task-focused work without continuously
changing contexts by allocating resources according to project phases.
6. Relevance for Small Projects: Economical for modest projects with simple specifications and
minimal complexity.
1. Requirements: The first phase involves gathering requirements from stakeholders and
analyzing them to understand the scope and objectives of the project.
2. Design: Once the requirements are understood, the design phase begins. This involves
creating a detailed design document that outlines the software architecture, user
interface, and system components.
3. Development: The Development phase include implementation involves coding the
software based on the design specifications. This phase also includes unit testing to
ensure that each component of the software is working as expected.
4. Testing: In the testing phase, the software is tested as a whole to ensure that it meets
the requirements and is free from defects.
5. Deployment: Once the software has been tested and approved, it is deployed to the
production environment.
6. Maintenance: The final phase of the Waterfall Model is maintenance, which involves
fixing any issues that arise after the software has been deployed and ensuring that it
continues to meet the requirements over time.
Prototyping is defined as the process of developing a working replication of a product or system that
has to be engineered. It offers a small-scale facsimile of the end product and is used for obtaining
customer feedback. The Prototyping concept is described below:
The Prototyping Model is one of the most popularly used Software Development Life Cycle Models
(SDLC models). This model is used when the customers do not know the exact project requirements
beforehand. In this model, a prototype of the end product is first developed, tested, and refined as
per customer feedback repeatedly till a final acceptable prototype is achieved which forms the basis
for developing the final product.
In this process model, the system is partially implemented before or during the analysis phase
thereby allowing the customers to see the product early in the life cycle. The process starts by
interviewing the customers and developing the incomplete high-level paper model. This document is
used to build the initial prototype supporting only the basic functionality as desired by the customer.
Once the customer figures out the problems, the prototype is further refined to eliminate them. The
process continues until the user approves the prototype and finds the working model to be
satisfactory.
Steps of Prototyping Model
Step 1: Requirement Gathering and Analysis: This is the initial step in designing a prototype model.
In this phase, users are asked about what they expect or what they want from the system.
Step 2: Quick Design: This is the second step in the Prototyping Model. This model covers the basic
design of the requirement through which a quick overview can be easily described.
Step 3: Build a Prototype: This step helps in building an actual prototype from the knowledge
gained from prototype design.
Step 4: Initial User Evaluation: This step describes the preliminary testing where the investigation of
the performance model occurs, as the customer will tell the strengths and weaknesses of the design,
which was sent to the developer.
Step 5: Refining Prototype: If any feedback is given by the user, then improving the client’s
response to feedback and suggestions, the final system is approved.
Step 6: Implement Product and Maintain: This is the final step in the phase of the Prototyping
Model where the final system is tested and distributed to production, here the program is run
regularly to prevent failures.
There are four types of Prototyping Models, which are described below.
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 accepted
prototype.
Customer feedback helps prevent unnecessary design faults and hence, the final prototype
developed is of better quality.
2. 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 that saves time
as well as effort.
This is because developing a prototype from scratch for every iteration of the process can
sometimes be very frustrating for the developers.
3. Incremental Prototyping
In this type of incremental prototyping, the final expected product is broken into different
small pieces of prototypes and 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.
It’s a very efficient approach that reduces the complexity of the development process,
where the goal is divided into sub-parts and each sub-part is developed individually.
The time interval between the project’s beginning and final delivery is substantially reduced
because all parts of the system are prototyped and tested simultaneously.
Of course, there might be the possibility that the pieces just do not fit together due to some
lack of ness in the development phase – this can only be fixed by careful and complete
plotting of the entire system before prototyping starts.
4. Extreme Prototyping
This method is mainly used for web development. It consists of three sequential independent
phases:
In this phase, a basic prototype with all the existing static pages is presented in HTML
format.
In the 2nd phase, Functional screens are made with a simulated data process using a
prototype services layer.
This is the final step where all the services are implemented and associated with the final
prototype.
The Spiral Model is a risk-driven model, meaning that the focus is on managing risk through multiple
iterations of the software development process. It consists of the following phases:
1. Objectives Defined: In first phase of the spiral model we clarify what the project aims to
achieve, including functional and non-functional requirements.
2. Risk Analysis: In the risk analysis phase, the risks associated with the project are
identified and evaluated.
3. Engineering: In the engineering phase, the software is developed based on the
requirements gathered in the previous iteration.
4. Evaluation: In the evaluation phase, the software is evaluated to determine if it meets
the customer’s requirements and if it is of high quality.
5. Planning: The next iteration of the spiral begins with a new planning phase, based on
the results of the evaluation.
The evolutionary model is a combination of the Iterative and Incremental models of the software
development life cycle. Delivering your system in a big bang release, delivering it in incremental
process over time is the action done in this model. Some initial requirements and architecture
envisioning need to be done. It is better for software products that have their feature sets redefined
during development because of user feedback and other factors. This article focuses on discussing
the Evolutionary Model in detail.
1. Feedback is provided by the users on the product for the planning stage of the next cycle
and the development team responds, often by changing the product, plan, or process.
2. Therefore, the software product evolves with time.
3. All the models have the disadvantage that the duration of time from the start of the project
to the delivery time of a solution is very high.
4. The evolutionary model solves this problem with a different approach.
5. The evolutionary model suggests breaking down work into smaller chunks, prioritizing them,
and then delivering those chunks to the customer one by one.
6. The number of chunks is huge and is the number of deliveries made to the customer.
7. The main advantage is that the customer’s confidence increases as he constantly gets
quantifiable goods or services from the beginning of the project to verify and validate his
requirements.
8. The model allows for changing requirements as well as all work is broken down into
maintainable work chunks.
Software development uses a dynamic and adaptable method called the iterative enhancement
Model. The iterative enhancement model encourages a software product's ongoing evolution and
improvement. This methodology is noticeable due to its concentration on adaptability, flexibility and
change responsiveness. It makes it easier for a product to evolve because it gives developers the
freedom to progressively enhance the software, making sure that it complies with evolving
specifications, user demands, and market demands. This helps products evolve more easily.
The Iterative Enhancement Model creates an environment where development teams can more
effectively adjust to changing requirements by segmenting the software development process into
smaller, more manageable parts. Every iteration improves on the one before it, adding new features
and fixing problems found in earlier stages. Members of the team, stakeholders and end users are
encouraged to collaborate and communicate continuously to make sure the software meets
changing needs and expectations. Until the software is finished being built, the iteration process is
carried out, which involves giving the user the increments.
Especially in larger projects, managing several iterations at once can add complexity.
Higher cost
Due to constant changes, there may be delays in documentation, making it more difficult to
maintain comprehensive documentation.
Continuous customer engagement may not be possible in all scenarios, which impacts the
effectiveness of the model.
1. Mobile app developement: Updates and improvements are often needed for mobile
apps to stay current with new devices, operating system versions and user preferences.
By using an iterative process developers can release the beta versions of their apps, get
user feedback and then improve functionality of those iterations in future release.
2. Web Application Development: The requirements for developing web applications
frequently change as a result of shifting user demand and advancements in technology.
The Iterative Enhancement Model makes it possible to developed features
incrementally and guaranteeing that the application can be modified to satisfy changing
user and market demands. In later iterations it also makes it easier to incorporate new
features based on input from users.
3. E-commerce Platforms: Developement in e-commerece field often involves constant
updates. Implementing an iterative approach enables the introduction of new
functionality.