0% found this document useful (0 votes)
49 views29 pages

Chapter 1 Mid

Uploaded by

siamrahamannirob
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views29 pages

Chapter 1 Mid

Uploaded by

siamrahamannirob
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 29

Introduction to Software

Engineering
Lecture – 1

Jafrin Iqbal Chowdhury


Lecturer
Daffodil International University
Agenda
❑ Software
❑ Types of Software
❑ Characteristics of Quality Software
❑ Basics of Software Engineering
❑ Importance of Software Engineering
❑ Challenges of Software Engineering
❑ The History of Software Engineering
❑ Software Engineering Terminologies
Software Definition
▪ The Institute of Electrical and Electronic Engineers
(IEEE) defines software as a collection of computer
programs, procedures, rules and associated
documentation and data.
▪ Software is a set of instructions, data or programs
used to operate computers and execute specific
tasks.
▪ It is the opposite of hardware, which describes the
physical aspects of a computer.
▪ Software is a generic term used to refer to
applications, scripts, and programs that run on a
device. It can be thought of as the variable part of a
computer, while hardware is the invariable part.
Types of Software
There are two types of software:

❑ System software: This type of software manages the


computer's resources and provides a platform for other
software to run on. Examples of system software include
operating systems, device drivers, and utilities.

❑ Application software: This type of software is designed


to perform specific tasks for users, such as word
processing, web browsing, or playing games. Examples
of application software include Microsoft Word, Google
Chrome, and Angry Birds.
Characteristics of Quality Software
Quality software expresses a range of characteristics that ensure its effectiveness, efficiency,
and satisfaction for its intended users. These characteristics can be broadly classified into
various categories such as functionality, reliability, usability, efficiency, maintainability,
portability, security, reusability, and compatibility.
Characteristics of Quality Software
➢ Functionality: Functionality is a fundamental characteristic of quality software, and it represents the
degree to which the software delivers the features and capabilities as defined in its requirements and
specifications.
➢ Reliability: In the software world, reliability shines like a beacon of stability. It's about consistency, the
unwavering ability to perform precisely as expected, every time, without fail. A reliable software recovers
from errors quickly, minimizing disruption and data loss. It can maintain good performance even with
faults and unexpected situations.
➢ Usability: Usability in quality software signifies user-friendly design, seamless interactions, and a
spontaneous interface, ensuring a positive and efficient user experience.
Characteristics of Quality Software
➢ Efficiency: High-quality software excels in time efficiency, ensuring prompt responses and optimal
processing times. It skillfully manages resources like system memory, disk space, and network
bandwidth, achieving a fine balance between speed and resource consumption for optimal performance.
➢ Maintainability: Maintainability in quality software refers to its ease of modification, updates, and
repairs, ensuring straightforward adaptability for future changes and enhancements.
➢ Portability: Portability in quality software refers to its capability to run across diverse platforms and
environments, allowing seamless transfer without requiring extensive modifications. It enhances
accessibility and adaptability.
➢ Security: Quality software is designed with a robust security framework. It encompasses measures
designed to ensure data integrity, confidentiality, and availability, safeguarding the system against
vulnerabilities, threats, and attacks.
Characteristics of Quality Software
➢ Reusability: Reusability in quality software denotes the capability of code or components to be
efficiently employed in various contexts, promoting efficiency, reducing redundancy, and development
effort.
➢ Compatibility: Compatibility in quality software refers to its ability to flawlessly operate and interact
with diverse systems, hardware, software, and data formats, ensuring smooth interoperability and user
experience across environments.

These characteristics often overlap and influence each other. For instance, improving usability can
sometimes impact performance, and enhancing security might make the software less convenient to use.
Therefore, achieving quality in software often involves balancing these characteristics according to the
priorities of the target user and the intended use of the software.
What is Software Engineering?
Software engineering emerged as a discipline in the 1960s in response to the growing complexity of
software systems, and the difficulties faced in developing them efficiently, reliably, and cost-effectively.
Software engineering is the branch of computer science that deals with the design, development,
testing, and maintenance of software applications. The discipline uses a systematic approach to
collect and analyze business requirements to design, build, and test software applications to satisfy
those business requirements.

As a note, software engineering is not limited to creating new products. Existing software products
need maintenance. Software maintenance is also a part of software engineering. Also, Software
engineering is not just programming. Good software engineering practices help ensure that software
projects are delivered on time, within budget, and with the desired level of quality and functionality.
Importance of Software Engineering
Software engineering is extremely important for the following reason:

▪ Reduction of Development Costs: Software engineering helps reduce the cost of development by
reusing the existing code, using better tools, and following sound software engineering practices.
▪ Reduction of Development Time: There are some software products and services available in the
market that provide the needed functionality immediately; thus, the project team can avoid writing
fresh source codes altogether to achieve the same functionality. The end result is that the productivity
of the project team continues to improve, which allows the faster development of software products.
▪ Increasing the Quality: Quality is the single most important ingredient in making any product
successful. Software engineering plays an important role in building quality software products using
better software engineering methodologies and software engineering tools, it is possible to build
better-quality software products.
Challenges of Software Engineering
Software engineering is a complex and dynamic field that comes with various challenges. Software engineering
employs a well-defined and systematic approach to developing software. This approach is considered to be the
most effective way of producing high-quality software. However, despite this systematic approach to software
development, there are still some serious challenges faced by software engineering. Some of these challenges
are listed below:

❑ Stakeholders may have changing needs or unclear requirements, and it's crucial to ensure that the software
meets these needs effectively.
❑ The challenge in software engineering is to deliver high-quality software on time and on budget to
customers. Balancing quality with speed, adapting to unexpected changes, and managing expectations
are crucial skills for navigating this challenge.
❑ The accurate estimation of project cost, effort and schedule is a challenge in software engineering.
Therefore, project managers need to determine how good their estimation process actually is and to make
appropriate improvements.
Challenges of Software Engineering
❑ Changes in software development are unavoidable. In today's world, changes occur rapidly and
accommodating these changes to develop complete software is one of the major challenges faced by the
software engineers.
❑ Risk management is an important part of software project management, and the objective is to identify
potential risks early and throughout the project and to manage them appropriately.
❑ The software landscape is dynamic, with new technologies and trends emerging constantly. Staying
relevant, continuously learning, and adapting to change requires a growth mindset and a willingness to
step outside one's comfort zone. So, evolving new technologies is a great challenge for software
engineers.
❑ Ensuring the security of software is crucial, and vulnerabilities can have severe consequences. Staying
ahead of security threats, incorporating robust security measures, and constantly adapting to evolving
vulnerabilities are essential considerations.
Challenges of Software Engineering
❑ Creating a user-friendly and intuitive user interface that meets users' needs can be challenging. Design
and usability considerations are crucial for software success.
❑ If software is intended for a global audience, dealing with multiple languages, cultures, and regional
requirements can be challenging.

Addressing challenges in software engineering involves a multifaceted approach that encompasses


technical proficiency, adept communication, project management acumen, and an unwavering dedication to
ongoing growth and refinement. Software engineers confront various obstacles, but by cultivating the
necessary skills, embracing a growth-oriented mindset, and remaining adaptable in the face of evolving
circumstances, they can effectively surmount these challenges and create impactful software solutions.
History of Software Engineering
The history of software engineering is a fascinating journey that has evolved alongside the
development of computers and technology. Here's a brief overview of key milestones in the history
of software engineering:

Year Milestone Details


Development of early programming languages like
Early Programming
1950s Fortran, marking the beginning of structured software
Languages
development.
Margaret Hamilton coined the term "software
1963 Term Coined engineering" while developing software for the Apollo
spacecraft.
The software crisis was reported, leading to the
NATO Software Engineering
1968-1969 exploration of methodologies to improve software
Conference
development processes.
The Software Development Life Cycle (SDLC) was
1970 SDLC Concept Emerged introduced, outlining key phases like analysis, design,
coding, testing, and maintenance.
History of Software Engineering
Year Milestone Details
Recognition of Software engineering was recognized as a profession alongside
1980s
Software Engineering computer science and traditional engineering disciplines.
Introduction of the Agile Manifesto, promoting iterative and
2001 Agile Manifesto
collaborative development, influencing Agile methodology.
Artificial Intelligence (AI) and Machine Learning (ML) have
become integral to software engineering, impacting various
Present AI and ML Integration
areas such as natural language processing, image recognition,
and predictive analytics.
Responsibilities of Software Engineers
The responsibilities of a software engineer can be diverse and depend on the specific role and industry.
Software engineers work in a wide variety of settings. So, the responsibilities of a software engineer
include the following key aspects:

1. Analyzing User Requirements: Software Engineers have to Understand, analyze, and translate user
requirements into technical specifications to ensure the final product meets user needs.
2. Designing Software Solutions: Software Engineers Design and develop software applications using
various programming languages, frameworks, and tools.
3. Writing and Testing Code: Software Engineers Write, edit, and test the code for software
applications. They develop and implement test automation strategies. Software engineers are
responsible for collaborating with Quality Assurance testers to improve software quality.
4. Maintaining and Improving Existing Software: Software engineers are responsible for continuously
improving existing software by assessing and enhancing performance, adding new features, and fixing
bugs.
Responsibilities of Software Engineers
5. Software Documentation: Software engineers are responsible for writing and maintaining
comprehensive technical documentation such as design documents, code comments, and user manuals.
6. Collaboration and Communication: Software engineers Collaborate with other engineers, designers,
and stakeholders to ensure cohesive and effective development and implementation of software. They
Communicate technical information clearly and concisely to both technical and non-technical audiences.
7. Ensuring Quality and Security: Software engineers Implement and maintain quality assurance
protocols and security measures to safeguard software against vulnerabilities and ensure reliability and
user trust.

These responsibilities may vary or expand depending on the position, such as front-end, back-end, full-
stack development, or a specialized field like machine learning or data engineering.
Computer Science vs
Software Engineering
Software Engineering

● Focus: Primarily concerned with designing, developing, testing, and maintaining


software applications and systems.
● Application: Focuses on practical solutions for real-world problems by creating
usable and reliable software.
● Emphasis: Combines engineering principles with systematic processes to ensure
efficient and high-quality software development.
● Skills: Involves programming, project management, software design, testing, and
collaboration.
Computer Science

● Focus: Centers around the study of algorithms, data structures, computation


theory, and the mathematical underpinnings of computation.
● Application: Focuses on the theoretical aspects of computing and explores ways
to solve complex computational problems.
● Emphasis: Advances the understanding of computation, information theory, and
artificial intelligence.
● Skills: Involves mathematics, algorithm design, theoretical analysis, and
research.
Software Engineer vs
Software Developer
Software Engineering
Real Engineering?
Career Paths in
Software Engineering
Software Engineering offers two main career tracks: Technical and Managerial. Here’s a simplified
guide to help you understand and choose your path:

• Front-End Developer: Focuses on the visual aspects of websites/apps using HTML, CSS, and
JavaScript.
•Back-End Developer: Works behind the scenes on databases, servers, and APIs to ensure everything
runs smoothly.
•Full-Stack Developer: Combines both front-end and back-end development, handling the entire
software process.
•Mobile Developer: Specializes in creating and maintaining mobile apps for Android and iOS.
•DevOps Engineer: Bridges development and IT operations, automating and optimizing the software
lifecycle.
•Data Scientist: Analyzes data to extract insights using statistics and machine learning.
•Software Architect: Designs the overall structure of complex software systems, ensuring scalability.
•Security Engineer: Protects systems from cyber threats through encryption and other security
measures.
•Game Developer: Creates video games, focusing on programming and integrating graphics and
audio.
•Database Administrator: Manages and optimizes databases to ensure efficient data storage.
•Quality Assurance Engineer: Tests software to identify and fix defects, ensuring product quality.
Management Tracks:
•Technical Lead: Oversees the technical team, providing guidance and making crucial decisions.
•Solutions Architect: Designs technical solutions to meet business needs, choosing the right tools and systems.
•Product Manager: Defines product vision, prioritizes features, and works with engineers to bring ideas to life.
•Program Manager: Coordinates multiple projects, ensuring they align with company goals and timelines.
•Chief Technology Officer (CTO): Shapes and executes the company’s technology strategy, leading innovation.
•Technical Sales/Customer Support: Connects customers with the technical team, troubleshooting and ensuring
satisfaction.
Choosing Your Path:
•Technical Path: Ideal if you love coding and solving complex problems.
•Management Path: Best if you enjoy leading teams and driving projects forward.
•Blended Roles: Some roles, like Technical Lead or Solutions Architect, require both technical skills and
leadership abilities.

You might also like