UNIT 1
Introduction to Software Engineering
School or Dept. Name here 1
Topics Covered
The story of Software development and issues faced, Need for Systematic
process for addressing issues, Products, custom solutions, services, domains,
Technologies, Software life cycle, software development lifecycle, software
release process, source control, versioning, maintenance of software. DevOps.
Software Development Processes: Waterfall, Iterative, Spiral.
School or Dept. Name here 2
Software definition
School or Dept. Name here
Software Engineering definition
School or Dept. Name here
Legacy software
School or Dept. Name here
Examples of Software Development
• Web Development
• Mobile Development
• Software Tool Development
• Application Development
• Data Management Software Development
• Security Software Development
• Embedded Systems Development
• Cloud Computing Software Development
School or Dept. Name here
Work product of SDLC
Requirement gathering SRS
Design ER,DFD,Design document
Coding Source code
Testing Test plan
Maintanence
School or Dept. Name here User manual
Software Characteristics
School or Dept. Name here
Failure curve for Hardware
School or Dept. Name here
Failure curve for Software
School or Dept. Name here
School or Dept. Name here
School or
Ref: Cloud Dept.
Computing: TheoryName here
and Practice. By Dan
12
C. Marinescu
Changes in software over a span of 50
years
Era of computing Software
Early years Batch processing, customized software
Second era Multi users, real time systems
Third era Distributed systems
Fourth era Object oriented systems, expert systems,parallel
computing
School or Dept. Name here
Fifth era Mobile computing
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
Products
There are two kinds of software products:
1.Generic products These are stand-alone systems that are produced by a development organization and sold
on the open market to any customer who is able to buy them. Examples of this type of product include
software for PCs such as databases, word processors, drawing packages, and project-management tools. It
also includes so-called vertical applications designed for some specific purpose such as library information
systems, accounting systems, or systems for maintaining dental records.
2. Customized (or bespoke) products These are systems that are commissioned by a particular customer. A
software contractor develops the software especially for that customer. Examples of this type of software
include control systems for electronic devices, systems written to support a particular business process, and
air traffic control systems.
School or Dept. Name here
Custom Solutions
• Codebase/Source Code: The actual program written in a programming language. This is the core product
of software development.
• Executable/Binaries: Compiled versions of the source code that can be run on specific hardware and
operating systems.
• Documentation: Technical documentation, user manuals, and other written materials that provide
information about the software's design, functionality, and usage.
• Requirements Specification: A document outlining the functional and non-functional requirements of the
software, including features, constraints, and user expectations.
• Design Artifacts: Diagrams, flowcharts, and other design documents that illustrate the architecture and
structure of the software.
• Prototypes: Early versions of the software designed to demonstrate key features and gather feedback
from stakeholders.
• Test Cases and Test Plans: Documents outlining the testing strategy, including test cases and plans for
unit testing, integration testing, system testing, and acceptance testing.
• Bug Reports: Documents reporting issues and defects found during testing or in the production
environment.
School or Dept. Name here
• Release Versions: Different versions of the software released to users, each containing new
features, improvements, and bug fixes.
• User Interfaces (UI) and User Experience (UX) Designs: Designs and mockups for the
graphical user interface and the overall user experience of the software.
• Database Schemas: Definitions of the structure and organization of databases used by the
software.
• Configuration Files: Files that specify the configuration settings for the software, allowing
customization and adaptation to different environments.
• Installation Packages: Software installers or packages that facilitate the installation of the
software on users' machines.
• Maintenance and Support Documentation: Information on how to maintain, troubleshoot,
and support the software after it has been deployed.
• Training Materials: Materials created to train users or administrators on how to use and
manage the software effectively.
• Legal and Licensing Documents: Documents specifying the terms of use, licensing
agreements, and any legal considerations related to the software.
School or Dept. Name here 24
What is Utility Software?
School or Dept. Name here
School or Dept. Name here 26
Configuration services
School or Dept. Name here
School or Dept. Name here 28
Integrated services
School or Dept. Name here
Independent services
School or Dept. Name here
Domains
In software engineering, the term "domains" can refer to different contexts or areas of application where software development is applied.
•Web Development: Designing and building applications that are accessed through web browsers. This includes both front-end development (user interface)
and back-end development (server-side logic).
•Mobile App Development: Creating applications specifically designed for mobile devices, such as smartphones and tablets. This includes both Android
and iOS platforms.
•Desktop Application Development: Developing software applications that run on desktop computers, typically with a graphical user interface (GUI).
•Embedded Systems: Designing software for embedded systems, which are specialized computing systems embedded within other devices or systems.
Examples include firmware for IoT devices or control systems in appliances.
•Database Development: Focusing on designing, implementing, and maintaining databases. This involves creating database structures, optimizing queries,
and ensuring data integrity.
School or Dept. Name here
• Game Development: Creating interactive and immersive software for entertainment purposes. Game
development involves graphics programming, physics simulation, and user interaction design.
• Cloud Computing: Developing applications that leverage cloud services, including Infrastructure as
a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS).
• Artificial Intelligence (AI) and Machine Learning (ML): Building software that uses AI and ML
techniques to analyze data, make predictions, and automate tasks.
• Cybersecurity: Developing software to secure systems and data from unauthorized access, attacks,
and vulnerabilities.
• Networking: Creating software for network management, communication protocols, and data
transmission.
School or Dept. Name here 32
• Healthcare Informatics: Developing software solutions for healthcare systems, including electronic health
records (EHR), medical imaging, and healthcare data analysis.
• Financial Software: Creating applications for financial institutions, including banking software, accounting
systems, and financial analysis tools.
• E-commerce: Building software for online retail and electronic commerce platforms, including shopping cart
systems and payment processing.
• Educational Software: Developing software for educational purposes, such as learning management systems
(LMS), educational games, and interactive learning applications.
• Human-Computer Interaction (HCI): Focusing on designing software with a strong emphasis on user
experience and interface design.
School or Dept. Name here 33
Technologies
Software engineering encompasses a wide range of technologies that are used to design, develop, test, deploy,
and maintain software applications. The choice of technologies depends on various factors, including the type of
application, project requirements, scalability needs, and the preferences of the development team.
Programming Languages: Java, Python, JavaScript, C#, C++, Ruby, PHP, Swift, Kotlin, Go, Rust: Different
programming languages are chosen based on factors such as application type, performance requirements, and
developer preferences.
Web Development: HTML, CSS, JavaScript, TypeScript, React, Angular, Vue.js: These technologies are used
for building interactive and dynamic web applications.
Mobile App Development: Swift, Objective-C, Kotlin, Java, Flutter, React Native: For developing mobile
applications on platforms like iOS and Android.
School or Dept. Name here
Server-Side Development: Node.js, Django, Flask, Ruby on Rails, ASP.NET, Spring: Frameworks and technologies
for building server-side logic and APIs.
Database Management Systems (DBMS): MySQL, PostgreSQL, MongoDB, Oracle, Microsoft SQL Server: Used
for managing and organizing data in databases.
Cloud Computing: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP): Platforms
providing cloud infrastructure, storage, and services for deploying and scaling applications.
Containerization and Orchestration: Docker, Kubernetes: Technologies for packaging, deploying, and managing
applications in containers for improved scalability and portability.
Version Control: Git, GitHub, GitLab, Bitbucket: Tools for version control to track changes in the source code and
facilitate collaboration among developers.
DevOps Tools: Jenkins, Travis CI, CircleCI: Continuous Integration (CI) tools that automate the testing and
integration of code changes.
Code Editors and Integrated Development Environments (IDEs): Visual Studio Code, IntelliJ IDEA, Eclipse:
Software for writing, testing, and debugging code efficiently.
School or Dept. Name here 35
Testing Frameworks: JUnit, Selenium, Jest, pytest: Tools for automating and performing tests to ensure the quality of the software.
Front-End Libraries and Frameworks: React, Angular, Vue.js: Libraries and frameworks for building interactive user interfaces in web
applications.
Backend Frameworks: Express (Node.js), Django, Flask, Ruby on Rails, Spring: Frameworks for building the server-side logic and handling
HTTP requests.
Microservices Architecture: Spring Boot, Flask, Express, .NET Core: Technologies for developing microservices, which are small,
independent, and scalable services that work together.
Artificial Intelligence and Machine Learning: TensorFlow, PyTorch, scikit-learn: Libraries and frameworks for developing AI and machine
learning applications.
Cybersecurity Tools: Wireshark, Metasploit, Nmap: Tools for analyzing and securing network communication and identifying vulnerabilities.
Collaboration and Communication Tools: Slack, Microsoft Teams, Jira, Confluence: Tools for team collaboration, communication, and project
management.
Monitoring and Logging Tools: ELK Stack (Elasticsearch, Logstash, Kibana), Prometheus, Grafana: Tools for monitoring and logging
application performance and health.
School or Dept. Name here 36
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
Waterfall Model: Sequential development with well-defined stages.
Agile Methods: Iterative and incremental development with a focus on
adaptability.
DevOps: Integration of development and operations for continuous delivery
School or Dept. Name here
Waterfall Model
School or Dept. Name here
School or Dept. Name here
School or Dept. Name here
Challenges in Software Engineering
School or Dept. Name here
44
Common challenges faced in software development
Security concerns
Quality assurance
Keeping up with new technologies
Managing changing requirements
Collaboration issues
Time Delays
Dealing with legacy code: Developers often have to work with legacy code.
Balancing short-term and long-term goals: we need to ensure that the software is maintainable and scalable in the long-term.
School or Dept. Name here
45
School or Dept. Name here 46
Software Release Process
School or Dept. Name here
Phases of a Software Release Process
1. Define specific requirements for the release
2. Specify your acceptance criteria
2. Test your software in production
4. Iterate and refine your product
5. Release your product to end-users
School or Dept. Name here
How Does The Software Release Process Typically
Work?
School or Dept. Name here
How Does The Software Release Process Typically
Work?
School or Dept. Name here
School or Dept. Name here
Source control (or version control)
School or Dept. Name here
Version control
School or Dept. Name here
Types of Version Control Systems
School or Dept. Name here
Local Version Control Systems
School or Dept. Name here
Centralized Version Control Systems
School or Dept. Name here
Distributed Version Control Systems
School or Dept. Name here
School or Dept. Name here
Software Maintenance
Software maintenance is a crucial phase in the software engineering life cycle that involves activities to keep a software system
operational, enhance its capabilities, and address issues that may arise during its use. The goal of software maintenance is to ensure that the
software remains effective and efficient throughout its lifecycle.
Corrective Maintenance: This type of maintenance involves fixing defects, bugs, or errors discovered during or after the software
deployment. Corrective maintenance aims to restore the software to a working state and improve its reliability.
Adaptive Maintenance: Adaptive maintenance is performed to adapt the software to changes in its environment, such as operating system
updates, hardware changes, or other external factors. The goal is to ensure that the software remains compatible with evolving
technologies.
Perfective Maintenance: Perfective maintenance focuses on improving the functionality and performance of the software. It includes
enhancements, optimizations, and additions to existing features, often based on user feedback or changing business requirements.
Preventive Maintenance: Preventive maintenance aims to anticipate and address potential issues before they become critical. This
involves activities such as code refactoring, performance tuning, and security updates to proactively enhance the software's maintainability.
School or Dept. Name here
Key Practices in Software Maintenance
Bug Tracking and Resolution: Maintain a systematic approach for identifying, tracking, and resolving software defects. Use bug tracking
systems to prioritize and manage reported issues.
Version Control and Configuration Management: Utilize version control systems to manage changes to the codebase. Configuration
management helps maintain consistency across different environments and configurations.
Documentation: Keep comprehensive documentation for the software, including design documents, user manuals, and API documentation.
This helps new developers understand the system and facilitates easier maintenance.
Testing: Regularly conduct testing, including regression testing, to ensure that new changes do not introduce new defects and that the
existing functionality remains intact.
Code Review: Perform code reviews to ensure code quality, adherence to coding standards, and to catch potential issues early in the
development process.
Monitoring and Logging: Implement monitoring and logging mechanisms to detect and diagnose issues in real-time. This helps identify
performance bottlenecks, errors, and other issues that may arise during runtime.
School or Dept. Name here 60
Security Updates: Stay vigilant about security vulnerabilities and apply timely updates to address them. Regularly review
and update dependencies to ensure a secure software environment.
User Feedback and Communication: Encourage users to provide feedback and promptly address their concerns.
Effective communication channels with users can help in understanding their needs and expectations.
Legacy System Management: If dealing with legacy systems, create a plan for their maintenance and eventual migration
or replacement. Legacy systems may require special attention due to outdated technologies and potential security risks.
School or Dept. Name here 61
DevOps:
• DevOps is a software development approach emphasizing collaboration,
automation, and continuous delivery to provide high-quality products to
customers quickly and efficiently.
• DevOps breaks down silos between development and operations teams to enable
seamless communication, faster time-to-market, and improved customer
satisfaction.
• It allows a team to handle the complete application lifecycle, from development
to testing, operations, and deployment. It shows cooperation between
Development and Operations groups to deploy code to production quickly in an
automated and repeatable manner.
• Every phase of the software development lifecycle, including planning, coding,
testing, deployment, and monitoring, is heavily automated in DevOps.
• This improves productivity, ensures consistency, and lowers error rates in the
development process.
School or Dept. Name here 62
School or Dept. Name here
DevOps: Delivery Pipeline
School or Dept. Name here
School or Dept. Name here
C’s of DevOps
1. Continuous Development
2. Continuous Integration
3. Continuous Testing
4. Continuous Deployment/Continuous Delivery
5. Continuous Monitoring
6. Continuous Feedback
7. Continuous Operations
School or Dept. Name here
Benefits of DevOps
School or Dept. Name here
Benefits of DevOps
School or Dept. Name here
Waterfall Model
School or Dept. Name here 3-69
The Classic Model / The Linear Model
/ the Waterfall Model
• Used when requirements are well understood in the beginning.
• Also called the classic life cycle.
• A systematic, sequential approach to software development.
• Begins with customer specification of Requirements and progresses
through planning, modeling, construction, and deployment.
• This Model suggests a systematic, sequential approach to software
development that begins at the system level and progresses through
analysis, design, code, and testing.
School or Dept. Name here
Conti..
Figure: The Waterfall Model
School or Dept. Name here
Advantages:
•Simple goal.
•Simple to understand and use.
•Clearly defined stages.
•Well understood milestones.
•Easy to arrange tasks.
•Process and results are well documented.
•Easy to manage.
•Each phase has a specific deliverable and a review.
•Works well for projects where requirements are well understood.
•Works well when quality is more important than cost/schedule.
•Customers/End users already know about it.
School or Dept. Name here
Disadvantages:
•It is difficult to measure progress within stages.
•Cannot accommodate changing requirements.
•No working software is produced until late in the life cycle.
•Risk and uncertainty are high with this process model.
•Adjusting scope during the life cycle can end a project
•Not suitable for complex projects
•Not suitable for projects of long duration because in long-running projects requirements are
likely to change.
•Integration is done as a "big-bang” at the very end [Single shot], which doesn't allow
identifying any technological or business bottleneck or challenges early.
•Users can only judge quality at the end.
•Attempting to go back two or more phases is very costly.
•Percentage completion of functionality cannot be determined in the middle of the project
development because functionality will be undergoing some phase.
•Very risky, since one process can not start before finishing the other.
School or Dept. Name here
Problems
•Real projects rarely follow the sequential flow since they are always iterative
•The model requires requirements to be explicitly spelled out at the beginning, which is
often difficult.
•A working model is not available until late in the project time plan.
•The customer must have patience.
School or Dept. Name here
Incremental Process Model
C- Communication
P - Planning
M – Modeling
C - Construction
D - Deployment
School or
Delivers Dept. Name
software here
in small but usable pieces, each piece builds on pieces already delivered
The Incremental Model
School or Dept. Name here
The Incremental Model
School or Dept. Name here
Evolutionary Model: Spiral Model
School or Dept. Name here
Spiral Model
School or Dept. Name here
Spiral Model
School or Dept. Name here
Spiral Model
School or Dept. Name here
Spiral Model
Customer communication: it is established
Planning: planning is done, resource time ,schedule
Risk analysis: technical & management risks are calculated
Engineering: tasks required to build one /more applications are carried out
Construction & release: tasks required to construct ,test & install the application
Customer evaluation: customer feedback is obtained based on customer
evaluation
School or Dept. Name here
Advantages of spiral model:
Requirements can be identified at every stage
Risks can be identified & rectified
Disadvantages
• Management is more complex.
• End of project may not be known early.
• Not suitable for small or low risk projects and could be expensive for small projects.
• Process is complex
• Spiral may go indefinitely.
• Large number of intermediate stages requires excessive documentation.
School or Dept. Name here
Thank You
School or Dept. Name here