Se 1
Se 1
Software engineering has evolved significantly over the past few decades, driven by the
growing complexity of software systems and the need for reliable, efficient, and user-
friendly applications. Here’s a look at its evolution and impact.
1. Early Days (1950s - 1960s): In the early days of computers, software was created for
specific tasks, often scientific or military. Software was written by a small number of
developers, and there were no standard methods or tools for development. Bugs and
failures were common due to a lack of organized processes.
2. Software Crisis (1960s - 1970s): As software complexity increased, developers began
to struggle with delivering large projects on time and within budget. Many projects
failed, leading to the term "software crisis." The crisis highlighted the need for
systematic approaches to software development.
3. Birth of Software Engineering (Late 1960s): To address the software crisis, the field
of software engineering was formally established. Engineers began using structured
approaches, such as design, testing, and documentation, to manage software
development. New methodologies, such as the Waterfall model, emerged to guide
development steps.
4. Agile and Modern Methods (2000s - Present): In recent years, flexible methods like
Agile, Scrum, and DevOps have become popular. These approaches allow teams to
adapt quickly to changes and produce high-quality software in shorter timeframes.
Software engineering now includes collaboration, rapid feedback, and continuous
improvement.
Software engineering has transformed technology and improved many areas of life by
providing a structured way to build reliable and user-friendly applications. Here are some
key impacts:
N.D.PRASANNA (6019)
SOFTWARE ENGINEERING
1. Improved Software Quality: Software engineering processes like testing and version
control help ensure that software is reliable and has fewer bugs. This improves user
experience and reduces maintenance costs.
2. Efficient Development: Methods like Agile and DevOps help teams work more
efficiently and deliver software quickly. This is especially important in industries like
e-commerce and social media, where rapid updates are essential.
3. Enhanced Security: With systematic approaches, software engineers can integrate
security practices to protect applications from cyber threats. For example, banking
apps have security layers like encryption to protect user data.
4. Scalability: Software engineering allows companies to develop software that can
handle growing numbers of users or increasing data volumes. Social media platforms
like Facebook rely on these principles to manage millions of users simultaneously.
5. Wider Accessibility: By following user-centred design principles, software engineers
create applications that are easy to use and accessible to people of all ages and
abilities, making technology more inclusive.
Real-Time Examples
1. Banking Apps: Early banking software was limited to basic transactions, but modern
banking apps provide complex features like loans, investments, and AI-powered
financial advice. Software engineering enables these applications to be secure,
reliable, and user-friendly.
2. E-Commerce Websites: Platforms like Amazon or eBay are built using advanced
software engineering methods. These sites can handle millions of transactions daily,
provide a smooth user experience, and protect user data through secure software
practices.
3. Self-Driving Cars: The software in autonomous vehicles must make real-time
decisions based on sensor data. Software engineering ensures this software is tested
thoroughly to be reliable and safe.
Software development began as a creative, unstructured process, much like an art. Over time,
as software grew in complexity and importance, it transformed into an engineering discipline
with standardized practices and principles.
N.D.PRASANNA (6019)
SOFTWARE ENGINEERING
In the early days, software development was seen as an art form. Developers relied on their
creativity, intuition, and personal methods. There were no formal processes, tools, or
standards.
Example:
Imagine an artist painting a picture. They have full freedom, but there’s no guarantee the
painting will meet specific needs or be completed on time. Early programmers wrote code
the same way, which often led to errors and unpredictable results.
As software became essential in industries like banking, aerospace, and healthcare, its
complexity grew. Many projects faced problems like:
Delays in delivery.
High costs.
Frequent failures and bugs.
Example:
NASA's software failures in the 1960s delayed space missions. Engineers realized they
needed better planning and quality control for reliable software.
To solve these issues, software development adopted engineering principles. This shift
introduced:
Example:
N.D.PRASANNA (6019)
SOFTWARE ENGINEERING
PROGRAMS:
A computer program is a set of instructions that is used as a process of creating a
Software program by using programming language.
Can be as simple as a single line of code.
Often created by a single individual or a small group.
Generally smaller in size, ranging from KBs to MBs.
Do not have a user interface.
Limited features, focused on specific functionalities.
Basic programming knowledge might be sufficient.
Performs a specific operation or set of operations.
Depends on compilers or interpreters for execution.
Example. A script that calculates loan interest.
Software products:
Software is a set of programs that enables the hardware to perform a specific task.
Consists of multiple programs, libraries, and data.
Usually developed by multiple people or larger teams.
Larger in size, ranging from MBs to GBs.
Includes sophisticated user interfaces (GUI, CLI).
Wide range of features and functionalities.
Requires advanced knowledge and expertise in software design.
Provides a platform for programs to run and manage tasks.
Depends on the operating system for its execution.
Microsoft Office suite, Operating Systems like Windows.
1.3 Explain the following
1.3.1 Early Computer Programming:
The history of programming dates back to the early 19th century when mathematician
Ada Lovelace created an algorithm for Charles Babbage's Analytical Engine, which is
Considered the first computer. However, the first actual programming language was
Developed in the 1950s, called FORTRAN (Formula Translation). This language was
Used for scientific and engineering calculations.
In the 1960s, programming languages such as COBOL (Common Business-Oriented
Language), BASIC (Beginners All-Purpose Symbolic Instruction Code), and ALGOL
(Algorithmic Language) were developed. These languages were used to write
Applications for business and research.
The 1970s saw the development of languages such as C and Pascal, which were used to
Write operating systems and applications. In the 1980s, the first object-oriented language,
Smalltalk, was created. This language allowed developers to create reusable code and was
Used for graphical user interfaces.
N.D.PRASANNA (6019)
SOFTWARE ENGINEERING
Abstraction: High-level language is the language that hides the complex details of
how computers work
Human-Readable Syntax: A program written in high-level language contains
words and symbols that are easier to understand by humans.
Portability: Programs written in a high-level language can be run on different
types of computers without any changes.
Easy to Use: High-level languages are user-friendly, with clear commands and
helpful tools that make writing, and testing code easier.
Productivity: High-level languages are easy to use, and help programmers write
code faster and build features more quickly.
Automatic Memory Management: These languages take care of memory, so we
don’t have to worry about allocating and freeing up memory manually.
Enhanced Debugging and Error Handling: High-level languages come with
tools that make finding and fixing mistakes in our code easier.
Rich Standard Libraries: They include many pre-written pieces of code that help
us handle common tasks, so you don’t have to start from scratch every time.
1.3.3 CONTROL FLOW-BASED DESIGN:
Control flow-based design in software engineering is a way to visualize the order in which a
program's instructions are executed. It helps developers create flexible programs that can
make decisions, repeat tasks, and respond to inputs
It was a real time example for understanding control flow based design understanding
purpose only !!! No need to read this !!!
Imagine you're following a set of instructions for a recipe. You start at the beginning, follow
each step in order, making decisions along the way based on conditions like "if the water is
boiling, add pasta." This sequential, decision-based process is similar to how programs
operate.
In Control Flow-Based Design, we're concerned with organizing the sequence of instructions
and decision-making within a program.
Characteristics of Control Flow-Based Design:
N.D.PRASANNA (6019)
SOFTWARE ENGINEERING
1. Sequential Execution:
Just like reading a book from start to finish, programs execute instructions one after another
in a specific order.
2. Decision Making:
Programs need to make choices based on conditions. For example, in a game, if a player's
health is less than 0, they lose. We use constructs like if, else, and elif to handle these
decisions.
3. Repetition with Loops:
Sometimes, we need to repeat certain actions until a condition is met. This is where loops
like while and for come in handy. For instance, in a game, we might loop through all
enemies and check if they're within the player's attack range.
4. Structured Programming:
We like to write code in a way that's neat and easy to follow. Instead of using confusing
shortcuts, like the goto statement that can make the flow of the program messy, we use
simple, organized methods. This includes using functions (blocks of code that do specific
tasks) and loops (which repeat actions) to keep the code clear and logical. This way, anyone
reading the code can understand it easily.
5. Flowcharts and Diagrams:
To plan out the control flow of our programs, we often use diagrams like flowcharts. These
visual representations help us map out the sequence of actions and decisions, making it
easier to understand the program's logic.
Let's take a simple example:
Determining if a number is even or odd.
We'll follow the steps sequentially:
• We start by getting the number from the user.
• Then, we check if the number is divisible by 2.
• If it is, we say it's even; otherwise, it's odd.
This process of going step by step, making decisions along the way, is the essence of Control
Flow-Based Design.
In summary, Control Flow-Based Design is about structuring programs to follow a logical
sequence of instructions and decisions. By organizing our code in this way, we create
programs that are easier to understand, maintain, and debug.
N.D.PRASANNA (6019)
SOFTWARE ENGINEERING
N.D.PRASANNA (6019)