SE113: Introduction to Software
Engineering
Chapter: 01
Prepared by: Nazmus Sakib
Lecturer, Department of Software Engineering
Daffodil International University
Software and Types of Software
Software: A collection of data or computer instructions that tell the computer how to
work.
Types of Software:
● System Software: Manages and controls the hardware components.
● Application Software: Helps users perform specific tasks like word processing,
browsing, etc.
● Embedded Software: Used in specialized devices like washing machines, cars,
etc.
● Utility Software: Helps manage, maintain, and control computer resources (e.g.,
antivirus, disk management).
Characteristics of Quality Software
Reliability: The software should function under predefined conditions without
failure.
Usability: It should be user-friendly and easy to navigate.
Efficiency: The software should utilize system resources optimally.
Maintainability: It should be easy to maintain and update.
Portability: The software should be able to operate in different environments.
What is Software Engineering?
Software Engineering is a systematic, disciplined, and quantifiable approach to the
development, operation, and maintenance of software. It involves the application
of engineering principles to software development.
Importance of Software Engineering
Systematic Approach: Reduces errors, improves quality, and ensures the
software meets the user's requirements.
Cost Efficiency: Helps manage and reduce development and maintenance costs.
Scalability: Allows for the creation of scalable software solutions.
Maintenance: Ensures long-term maintenance and upgradability.
Challenges of Software Engineering
Complexity: Managing complex software systems with numerous components.
Changing Requirements: Adapting to changing user requirements.
Quality Assurance: Ensuring software meets the desired quality standards.
Resource Management: Managing limited resources effectively.
Time Constraints: Meeting deadlines while maintaining quality.
The History of Software Engineering
The term "Software Engineering" was first coined during a NATO conference in
1968.
Initially, software development was not seen as an engineering discipline, leading
to the "software crisis" where projects were delayed and over-budget.
The discipline evolved to incorporate formal methods, tools, and processes,
leading to the structured and organized approach seen today.
Responsibilities of Software Engineers
Design and Development: Creating software based on user requirements.
Testing and Debugging: Ensuring the software is free from bugs and meets
quality standards.
Documentation: Writing and maintaining documentation for the software.
Maintenance: Updating and fixing issues in the software after release.
Collaboration: Working with other team members like designers, testers, and
project managers.
Computer Science Vs. Software Engineering vs.
Software Developer
Computer Science: Theoretical study of algorithms, computation, and how
computers process information.
Software Engineering: Focuses on the practical application of computer science
to build and maintain software systems.
Software Developer: More of a generalist role focused on writing code to build
software applications.
Software Engineer vs. Software Developer: A
Comparative View
Software Engineer: Involves a broader scope including design, development,
testing, and maintenance of software, often working within a larger system or
framework.
Software Developer: More focused on writing code and implementing specific
functionalities within a system.
Computer Science vs. Software Engineering
Computer Science: Focuses on understanding the fundamentals of computation,
algorithms, data structures, and more.
Software Engineering: Applies computer science principles to design and
develop real-world software systems.
Is Software Engineering Real Engineering?
Yes, it involves the application of engineering principles to the design,
development, maintenance, and testing of software. It shares similarities with
other engineering disciplines in terms of systematic approaches and
methodologies.
Career Paths in Software Engineering
Software Developer: Writing and implementing code.
System Architect: Designing the architecture of software systems.
Quality Assurance Engineer: Ensuring software meets quality standards.
DevOps Engineer: Managing and automating software deployment processes.
Project Manager: Overseeing software development projects.
Researcher: Conducting research in software engineering methodologies and
technologies.