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

Fse - Unit - I Notes

Software engineering is a systematic and disciplined approach to the design, development, testing, and maintenance of software, emphasizing efficiency, reliability, and maintainability. It has evolved from an art form to a recognized engineering discipline, incorporating various methodologies and tools to improve software quality and productivity. The field faces challenges such as high upfront costs and complexity, but the advantages often outweigh the disadvantages, leading to better customer satisfaction and collaboration.

Uploaded by

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

Fse - Unit - I Notes

Software engineering is a systematic and disciplined approach to the design, development, testing, and maintenance of software, emphasizing efficiency, reliability, and maintainability. It has evolved from an art form to a recognized engineering discipline, incorporating various methodologies and tools to improve software quality and productivity. The field faces challenges such as high upfront costs and complexity, but the advantages often outweigh the disadvantages, leading to better customer satisfaction and collaboration.

Uploaded by

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

UNIT – I

Introduction to Software Engineering – Software Engineering

Software is a program or set of programs containing instructions that provide desired


functionality. Engineering is the process of designing and building something that serves a
particular purpose and finds a cost-effective solution to problems.

The systematic, disciplined quantifiable approach to the development, operation and


maintenance of software; that is, the application of engineering to software.

Software: Software is
(1) Instructions (computer programs) that provide desired features, function, and performance,
when executed
(2) Data structures that enable the programs to adequately manipulate information,
(3) Documents that describe the operation and use of the programs.

Characteristics of Software:
(1) Software is developed or engineered; it is not manufactured in the classical sense.
(2) Software does not “wear out”
(3) Although the industry is moving toward component-based construction, most software
continues to be custom built.

A software product can be judged by what it offers and how well it can be used. This software
must satisfy on the following grounds:
 Operational
 Transitional
 Maintenance

Well-engineered and crafted software is expected to have the following characteristics:

Operational
This tells us how well software works in operations. It can be measured on:

Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
Transitional
This aspect is important when the software is moved from one platform to another:

Portability
Interoperability
Reusability
Adaptability

Maintenance
This aspect briefs about how well software has the capabilities to maintain itself in the
everchanging environment:

Modularity
Maintainability
Flexibility
Scalability

In short, Software engineering is a branch of computer science, which uses well-defined


engineering concepts required to produce efficient, durable, scalable, in-budget and on-time
software products.

Table of Contents
 What is Software Engineering?
 Key Principles of Software Engineering
 Main Attributes of Software Engineering
 Dual Role of Software
 Objectives of Software Engineering
 Program vs Software Product
 Advantages of Software Engineering
 Disadvantages of Software Engineering

What is Software Engineering?

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.

1. Software engineering includes a variety of techniques, tools, and methodologies,


including requirements analysis, design, testing, and maintenance.
2. It is a rapidly evolving field, and new tools and technologies are constantly being
developed to improve the software development process.

3. 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.

4. Software Engineering is mainly used for large projects based on software systems rather
than single programs or applications.

5. The main goal of Software Engineering is to develop software applications for improving
quality, budget, and time efficiency.

6. 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.

Key Principles of Software Engineering

1. Modularity: Breaking the software into smaller, reusable components that can be
developed and tested independently.

2. Abstraction: Hiding the implementation details of a component and exposing only the
necessary functionality to other parts of the software.

3. Encapsulation: Wrapping up the data and functions of an object into a single unit, and
protecting the internal state of an object from external modifications.

4. Reusability: Creating components that can be used in multiple projects, which can save
time and resources.

5. Maintenance: Regularly updating and improving the software to fix bugs, add new
features, and address security vulnerabilities.

6. Testing: Verifying that the software meets its requirements and is free of bugs.

7. Design Patterns: Solving recurring problems in software design by providing templates


for solving them.

8. Agile methodologies: Using iterative and incremental development processes that focus
on customer satisfaction, rapid delivery, and flexibility.

9. Continuous Integration & Deployment: Continuously integrating the code changes and
deploying them into the production environment.
Main Attributes of Software Engineering

Software Engineering is a systematic, disciplined, quantifiable study and approach to the design,
development, operation, and maintenance of a software system. There are four main Attributes of
Software Engineering.

1. Efficiency: It provides a measure of the resource requirement of a software product


efficiently.

2. Reliability: It assures that the product will deliver the same results when used in similar
working environment.

3. Reusability: This attribute makes sure that the module can be used in multiple
applications.

4. Maintainability: It is the ability of the software to be modified, repaired, or enhanced


easily with changing requirements.

Dual Role of Software


There is a dual role of software in the industry. The first one is as a product and the other one is
as a vehicle for delivering the product. We will discuss both of them.

1. As a Product

 It delivers computing potential across networks of Hardware or by a network of


computers.

 It enables the Hardware to deliver the expected functionality.

 It acts as an information transformer because it produces, manages, acquires, modifies,


displays, or transmits information.

2. As a Vehicle for Delivering a Product

 It provides system functionality (e.g., payroll system).

 It controls other software (e.g., an operating system).

 It helps build other software (e.g., software tools).

 It is information transformer-producing, managing, acquiring, modifying, displaying, or


transmitting information that can be as simple as single bit or as complex as a multimedia
presentation.
Software delivers the most important product of our time-information.
- It transforms personal data
- It manages business information to enhance competitiveness
- It provides a gateway to worldwide information networks
- It provides the means for acquiring information

The role of computer software has undergone significant change over a span of little more than
50 years
- Dramatic Improvements in hardware performance
- Vast increases in memory and storage capacity
- A wide variety of exotic input and output options

Objectives of Software Engineering

1. Maintainability: It should be feasible for the software to evolve to meet changing


requirements.

2. Efficiency: The software should not make wasteful use of computing devices such as
memory, processor cycles, etc.

3. Correctness: A software product is correct if the different requirements specified in


the SRS Document have been correctly implemented.

4. Reusability: A software product has good reusability if the different modules of the
product can easily be reused to develop new products.

5. Testability: Here software facilitates both the establishment of test criteria and the
evaluation of the software concerning those criteria.

6. Reliability: It is an attribute of software quality. The extent to which a program can be


expected to perform its desired function, over an arbitrary time period.

7. Portability: In this case, the software can be transferred from one computer system or
environment to another.

8. Adaptability: In this case, the software allows differing system constraints and the user
needs to be satisfied by making changes to the software.

9. Interoperability: Capability of 2 or more functional units to process data cooperatively.


Program vs Software Product

Parameters Program Software Product

Software is when a program is


made available for commercial
A program is a set of business and is properly
instructions that are given to a documented along with its
Definition
computer in order to achieve a licensing.
specific task.
Software Product = Program +
Documentation + Licensing.

Software Development usually


follows a life cycle, which
Program is one of the stages involves the feasibility study of
Stages Involved involved in the development of the project, requirement
the software. gathering, and development of a
prototype, system design, coding,
and testing.

History and Need of Software Engineering:

More focus on Hardware:- In early days of computing the primary concern was that
building or acquiring the hardware. If the software did not work, people thought, it would be
easy enough to change it until it did work. In that case, why make the effort to plan?

Software cost consideration: The cost of software amounted to such a small fraction of the
cost of the hardware that no one considered it very important to manage it development.
People time was assumed to save machine time. Making the people process efficient received
little priority.

Meeting people expectation:- when computing matured, programs become more Complex
and larger. A team effort is required for program to be routinely specified, written, operated,
and maintained so people's expectations would be fulfilled.
Exceeded cost: As program become large and complex and the time required to write
program and their costs began to exceed to all estimates.

Time development: Programmer started to take weeks, months or years longer than expected
to complete. The systems turned over the client frequently did not work correctly because the
money or time had run out before the program could be made to work as originally intended.

Us military, several million dollar project was abandoned due to it could never be made
to work properly.

Quality concern: As computers and their programs were used for more vital tasks like
monitoring life support equipment, program quality also becomes new concern.

Change- expensive: Making a change within a complex program turned out to be very
expensive. It was quite easier to throw a program then to expect from program to do thing
different slightly.

Fast and Rapid change in hardware and software:As tubes were replaced by transistors->
integrated circuits. The cost of hardware which had to be increased was getting low. The time
and cost to develop the software were no longer so small, compared to hardware, that they
could be ignored.

Wrong analysis of client requirements:Programmers were often thought they had


understood the client requirement. Once the program has been written, the client begins to
express distract dissatisfaction.

No satisfactory system: Unfortunately, until several years ago no good method of


representation existed to describe satisfactorily systems as complex as those that are being
developed today.

Advantages of Software Engineering

There are several advantages to using a systematic and disciplined approach to software
development, such as:

1. Improved Quality: By following established software engineering principles and


techniques, the software can be developed with fewer bugs and higher reliability.

2. Increased Productivity: Using modern tools and methodologies can streamline the
development process, allowing developers to be more productive and complete projects
faster.
3. Better Maintainability: Software that is designed and developed using sound software
engineering practices is easier to maintain and update over time.

4. Reduced Costs: By identifying and addressing potential problems early in the


development process, software engineering can help to reduce the cost of fixing bugs and
adding new features later on.

5. Increased Customer Satisfaction: By involving customers in the development process and


developing software that meets their needs, software engineering can help to increase
customer satisfaction.

6. Better Team Collaboration: By using Agile methodologies and continuous integration,


software engineering allows for better collaboration among development teams.

7. Better Scalability: By designing software with scalability in mind, software engineering


can help to ensure that software can handle an increasing number of users and
transactions.

8. Better Security: By following the Software Development Life Cycle (SDLC) and
performing security testing, software engineering can help to prevent security breaches
and protect sensitive data.

In summary, software engineering offers a structured and efficient approach to software


development, which can lead to higher-quality software that is easier to maintain and adapt to
changing requirements. This can help to improve customer satisfaction and reduce costs, while
also promoting better collaboration among development teams.

Disadvantages of Software Engineering

While Software Engineering offers many advantages, there are also some potential disadvantages
to consider:

1. High upfront costs: Implementing a systematic and disciplined approach to software


development can be resource-intensive and require a significant investment in tools and
training.

2. Limited flexibility: Following established software engineering principles and


methodologies can be rigid and may limit the ability to quickly adapt to changing
requirements.

3. Bureaucratic: Software Engineering can create an environment that is bureaucratic, with a


lot of processes and paperwork, which may slow down the development process.

4. Complexity: With the increase in the number of tools and methodologies, software
engineering can be complex and difficult to navigate.
5. Limited creativity: The focus on structure and process can stifle creativity and innovation
among developers.

6. High learning curve: The development process can be complex, and it requires a lot of
learning and training, which can be challenging for new developers.

7. High dependence on tools: Software engineering heavily depends on the tools, and if the
tools are not properly configured or are not compatible with the software, it can cause
issues.

8. High maintenance: The software engineering process requires regular maintenance to


ensure that the software is running efficiently, which can be costly and time-consuming.

In summary, software engineering can be expensive and time-consuming, and it may limit
flexibility and creativity. However, the benefits of improved quality, increased productivity, and
better maintainability can outweigh the costs and complexity. It’s important to weigh the pros
and cons of using software engineering and determine if it is the right approach for a particular
software project.

Evolution from an Art Form to an Engineering Discipline –

Evolution of Software Engineering: From an Art To Engineering Discipline

Software Engineering is a systematic and cost-effective technique for software development. It is


an engineering approach to developing software.

For example: If someone wants to travel from Punjab to Delhi. There are two approaches one
can follow to achieve the same result:

1. The normal approach is to go out and catch the bus/train that is available.

2. A systematic approach is constructed as Firstly check on Google Maps distance and after
analyzing the timing of trains and buses online that, match the user’s preference suppose
the user has some work till 4:00 PM and train slots are: 1:00 PM, 6:00 PM then the user
will choose 6:00 PM time slot and reach Delhi.

From the above situation, one can easily analyze that creating a systematic Approach is more
optimal, time, and cost-effective than a normal approach. This will occur while designing
Software. So in Software Engineering working on Engineering or a Systematic approach is more
beneficial.

 Evolution of Software Engineering


 Is Software Engineering A Science Or An Art?
 Software Engineering Evolution: From An Art To Engineering Discipline
 Important Points to software Engineering Evolution: From An Art To Engineering
Discipline
 Conclusion

Evolution of Software Engineering

Software engineering has evolved from being considered an art to becoming a recognized
engineering discipline. In the early days of computing, software development was primarily done
by individuals or small teams who wrote code based on their own experiences and knowledge.
This approach was often referred to as “hacking” or “programming by intuition.” As the field of
computing grew, it became apparent that this approach was not sustainable and that a more
structured and systematic approach was needed.

In the 1960s and 1970s, the field of software engineering began to take shape. Researchers and
practitioners began to develop formal methods for software design and development, such as
structured programming and the use of flowcharts to represent algorithms.

In 1968, a conference on software engineering was held, and the term “software engineering”
was officially coined.

In the following decades, software engineering continued to evolve and mature. The introduction
of object-oriented programming in the 1980s led to a shift in how software was designed and
developed.

The 1990s saw the emergence of the Agile software development methodologies, which
emphasized flexibility and responsiveness to change. Today, software engineering is a well-
established field with its own set of best practices, methodologies, and tools. It is considered as a
discipline of engineering and follows the same principles like any other engineering field.

In summary, software engineering has evolved from an art to a discipline with its own set of best
practices, methodologies, and tools. The field has grown and matured over time, with new
technologies and approaches being developed to improve the design and development of
software.

1970s and 1980s:

• Osborne characterized a “new industrial revolution”

• Toffler called the advent of microelectronics part of “the third wave of change” in human
history
• Naisbitt predicted the transformation from an industrial society to an “information society”
Feigenbaum and McCorduck suggested that information and knowledge would be the focalpoint
for power in the twenty-first century

• Stoll argued that the “electronic community” created by networks and software was the key to
knowledge interchange throughout the world.

1990s began:

• Toffier described a “power shift” in which old power structures disintegrate as computersand
software lead to a “democratization of knowledge”.

• Yourdon worried that U.S companies might lose their competitive edge in software related
business and predicted “the decline and fall of the American programmer”.

• Hammer and Champy argued that information technologies were to play a pivotal role in the
“reengineering of the corporation”.

Mid-1990s: The pervasiveness of computers and software spawned a rash of books by neo-
luddites. SOFTWARE ENGINEERING

Later 1990s:

• Yourdon reevaluated the prospects of the software professional and suggested “the rise and
resurrection” of the American programmer.

• The impact of the Y2K “time bomb” was at the end of 20th century

2000s progressed:

• Johnson discussed the power of “emergence” a phenomenon that explains what happens when
interconnections among relatively simple entities result in a system that “self-organizes to form
more intelligent, more adaptive behavior”. Yourdon revisited the tragic events of 9/11 to discuss
the continuing impact of global terrorism on the IT community

• Wolfram presented a treatise on a “new kind of science” that posits a unifying theory based
primarily on sophisticated software simulations

• Daconta and his colleagues discussed the evolution of “the semantic web”.

Today a huge software industry has become a dominant factor in the economies of the
industrialized world.
Is Software Engineering A Science Or An Art?

Most people think that writing a good quality program is an Art. So let’s discuss it as an Art or
Science. Like other engineering, branches suppose Mechanical engineering. It is based on
Science where there are specific rules and names for each component, technique, and working
principle related to it and before they are standardized the experience is marked as their thumb
rule and on the basis of it, the rules are standardized by various organizations. Similarly, in
Software Engineering there is heavy use of knowledge which is gathered from the experience of
practitioners. Thus, various Organizations or Researchers’s made systematically organized the
experience of practitioners in the theoretical form. Before these are standardized, the experience
acts as Thumb Rule. Thus, like every other Engineering Discipline, Software Engineering is a
Science that is transformed from an Art.

Software Engineering Evolution: From An Art To Engineering Discipline

Software Engineering principles have evolved over the last sixty years with the contributions of
various researchers and software professionals. From the beginning period Software Engineering
acts as an Art after that with time, it transformed into a craft and finally to Engineering
Discipline.

Initially, Programmers used an Ad Hoc programming style. Ad Hoc programming is an


approachable solution in an unplanned or unorganized manner. In this type of Programming
Style, no plan is created on how to create Structure and Steps to complete the programming task
but without having any systematic approach the problem needs to be solved in the required time.
This style is now referred to as exploratory, build and fix, and code and fixes styles.
Like in today’s world various researchers and scientists working on those things which are not
even necessary but during the initial period, Programmers worked on those things which are
really needed. But as time fleet the Ad Hoc Programming will cause various problems which
results in less efficiency and another approach i.e. systematic approach is adopted.

Let us get started with the detailed step-by-step process of the evolution of software engineering.
The following steps are discussed:

1. Software engineering as an art


2. Software engineering transition from art to craft
3. Software engineering transition from craft to an engineering discipline

Software Engineering As An Art

Software Engineering as an Art means, this can be only learned by specific people and other
people’s are not allowed to work on them.

 Software engineering as an art refers to the creative and intuitive aspect of software
development. It involves the use of creativity, problem-solving skills, and artistic
expression to design and develop software systems that are not only functional but also
aesthetically pleasing and user-friendly.

 In the early days of software development, many programmers considered software


development as an art, as it was more about creativity and intuition than about following
a set of established processes and methodologies. Programmers would often write code in
an ad-hoc manner, without much structure or planning, and the final product was often
the result of their personal artistic expression.

 However, as software systems have become more complex and important, it has become
clear that the traditional ad-hoc approach to software development is not sufficient. This
has led to the emergence of the field of software engineering, which has focused on
bringing more structure and discipline to the software development process.

 Despite this, the art of software engineering still plays an important role in the
development process. For example, a good software engineer must also have a sense of
aesthetics, be able to think creatively and out of the box and be able to develop software
that is easy to use and understand.

For Example:

In ancient times only a few people know Gold Ornaments making. Those who know Gold
Ornaments making kept it as a secret and will reveal to his genetic generation. So at this time,
this is known as Art and during that time accuracy was very less.
The same in Software Development, only a few people know about Software designing and
coding and at that time there is no set of rules or instruction for software designing. And those
who are able to write code efficiently and essentially fix bugs are considered proficient and those
who are not good at programming and didn’t know about that were left wondering that how they
could effortlessly write elegant and correct code each time.

Like Gold Ornaments are not efficiently designed in the same way Program Coding is not
efficiently done due to this various issues cause which degrades the efficiency of Software but at
time efficiency is not considered as an important aspect.

Software Engineering Transition from Art to Craft

Software Engineering transformed from Art to Craft when the area of people who know
Software Designing and Coding will increase.

The transition of software engineering from an art to a craft can be seen as a gradual process that
has occurred over time.

 In the early days of software development, software engineering was primarily


considered an art form. Programmers would often write code in an ad-hoc manner,
without much structure or planning, and the final product was often the result of their
personal artistic expression.

 As software systems have become more complex and important, it has become clear that
the traditional ad-hoc approach to software development is not sufficient. This led to the
emergence of the field of software engineering, which focused on bringing more structure
and discipline to the software development process.

 With the emergence of software engineering as a discipline, the focus shifted from the
artistic expression of individual programmers to the use of established processes and
methodologies to ensure the quality and reliability of software systems. This led to the
development of new methodologies and techniques such as the Waterfall and Agile
methodologies, as well as the development of new tools and technologies to support
software development.

 As a result, software engineering has transitioned from an art form to a craft. Instead of
relying on the creativity and intuition of individual programmers, software development
has become more structured and disciplined, with a focus on using established processes
and methodologies to ensure the quality and reliability of software systems.
For Example:

When the secret of Gold Ornaments making is revealed to the only generation after generation
which will increase the number of people in that Art and will convert art into a craft where
accuracy is increased.

The same in Software Engineering, the Specific Degree and P.H.D were introduced in the
Universities and some specific people will go further to learn and there is a certain rule which
must be fulfilled to take that degree. So the number of people which increases in that area, and
they start researching about it and create Standards and Styles for Coding and Software
Development which must be followed and these Standards will help to create a less error-free
software.

Like gold, ornaments are taking decent shapes and become efficient. In the same way, Program
Writing has also become efficient in terms of Code reusability and efficiency but still, it is at
times, efficiency is not considered an important aspect. Software Engineering Transition From
Craft To Engineering Discipline
The transition of software engineering from a craft to an engineering discipline can be seen as a
gradual process that has occurred over time as the field has matured.

 In the early days of software development, software engineering was considered a craft,
with a focus on using established processes and methodologies to ensure the quality and
reliability of software systems. However, as the field has grown and matured, software
engineering has become more formalized and structured, with the development of new
methodologies, techniques and tools to support software development.

 One of the key milestones in the transition of software engineering from a craft to an
engineering discipline was the publication of the book “Software Engineering: A
Practitioner’s Approach” by Pressman in 1975. This book provided a comprehensive
overview of the field and defined software engineering as an engineering discipline.

 With the growing recognition of software engineering as an engineering discipline, the


focus has shifted from the use of established processes and methodologies to ensure the
quality and reliability of software systems, to a more scientific and systematic approach
to software development.

 This has led to the development of new techniques and methodologies such as formal
methods, model-driven development, and software architecture, which are based on
sound scientific principles and are designed to ensure the quality and reliability of
software systems.

 In conclusion, software engineering has transitioned from being considered a craft to


being considered an engineering discipline as the field has matured and grown more
formalized and structured. The field has shifted its focus from relying on established
processes and method

 In today’s world Software Engineering acts as an Engineering Discipline when everyone


can learn Software designing and coding irrespective of that they are pursuing a degree or
not.

 For example:

In today’s world everyone can learn Gold Ornament making and accuracy has much
more increased with the help of various machines. Also, it is converted into a
Professional study where people will learn about how? Why? The science behind it etc.
The same in software engineering occur where everyone can learn about Software
Development with or without pursuing any Professional Studies and accuracy of
Software Development increased with the help of Standards and improved rules created
by researchers.
Software engineering principles are now widely used in industry and new principles are
still continuing to emerge at a very rapid rate.

Benefits to treating software development as an engineering discipline

There are many benefits to treating software development as an engineering discipline. Some of
the key benefits include:

1. Improved quality: By following established best practices and methodologies, software


engineers are able to produce higher quality software that is more reliable and less prone
to errors.

2. Increased productivity: Formal methods and tools can help software engineers work more
efficiently and effectively, leading to increased productivity.

3. Greater predictability: By following a structured and systematic approach, software


engineers can make more accurate predictions about the time and resources required to
complete a project.

4. Better communication: Software engineering practices can help ensure that all
stakeholders, including developers, managers, and clients, have a clear understanding of
the project’s goals and requirements.

5. Greater maintainability: Software engineering practices can help ensure that the software
is designed in a way that makes it easy to maintain and update over time.

6. Better cost management: By following established best practices and methodologies,


software engineers can reduce the cost of development, testing and maintenance of
software.

7. Better Scalability: Software engineering provides the process and methodologies to


design the software in a way that it is easy to scale up or down as per the requirement.

Important Points to software Engineering Evolution: From an Art to Engineering


Discipline

Following are some important points:

1. Software engineering has evolved from being considered an art form to being considered
an engineering discipline.

2. The transition from art to craft involved bringing more structure and discipline to the
software development process.

3. The transition from craft to engineering discipline involved a more formalized and
structured approach, with a focus on using established
4. Processes and methodologies to ensure the quality and reliability of software systems.

5. Key milestones in this transition include the publication of the book “Software
Engineering: A Practitioner’s Approach” and the development of new methodologies,
techniques, and tools to support software development.

6. The goal of software engineering is to deliver a functional, reliable, maintainable, and


efficient software.

Conclusion

Software engineering has evolved into a more formal and structured discipline, the art
of software development still plays an important role in the design and development of software
systems. It’s the balance of both that leads to successful software development. Software
engineering transitioned from being considered an art form to being considered a craft as the
field grew more structured, formalized and focused on established processes, methodologies and
tools. The goal of software engineering is not only to deliver a functional product but also to
deliver a product that is reliable, maintainable and efficient. Treating software development as an
engineering discipline can lead to higher quality software that is more reliable, predictable, and
maintainable, as well as increased productivity and better cost management.

Software Development Projects Emergence of Software Engineering:

Software engineering discipline is the result of advancement in the field of technology. In this
section, we will discuss various innovations and technologies that led to the emergence of
software engineering discipline.

 Early Computer Programming


 High Level Language Programming
 Control Flow Based Design
 Data-Flow Oriented Design
 Object Oriented Design

Early Computer Programming

As we know that in the early 1950s, computers were slow and expensive. Though the programs
at that time were very small in size, these computers took considerable time to process them.
They relied on assembly language which was specific to computer architecture. Thus,
developing a program required lot of effort. Every programmer used his own style to develop
the programs.
High Level Language Programming

With the introduction of semiconductor technology, the computers became smaller, faster,
cheaper, and reliable than their predecessors. One of the major developments includes the
progress from assembly language to high-level languages. Early high level programming
languages such as COBOL and FORTRAN came into existence. As a result, the programming
became easier and thus, increased the productivity of the programmers. However, still the
programs were limited in size and the programmers developed programs using their own style
and experience.

Control Flow Based Design

With the advent of powerful machines and high level languages, the usage of computers grew
rapidly: In addition, the nature of programs also changed from simple to complex. The increased
size and the complexity could not be managed by individual style. It was analyzed that clarity of
control flow (the sequence in which the program’s instructions are executed) is of great
importance. To help the programmer to design programs having good control flow
structure, flowcharting technique was developed. In flowcharting technique, the algorithm is
represented using flowcharts. A flowchart is a graphical representation that depicts the sequence
of operations to be carried out to solve a given problem.

Note that having more GOTO constructs in the flowchart makes the control flow messy, which
makes it difficult to understand and debug. In order to provide clarity of control flow, the use of
GOTO constructs in flowcharts should be avoided and structured constructs-decision, sequence,
and loop-should be used to develop structured flowcharts. The decision structures are used for
conditional execution of statements (for example, if statement). The sequence structures are used
for the sequentially executed statements. The loop structures are used for performing some
repetitive tasks in the program. The use of structured constructs formed the basis of
the structured programming methodology.

Structured programming became a powerful tool that allowed programmers to write moderately
complex programs easily. It forces a logical structure in the program to be written in an efficient
and understandable manner. The purpose of structured programming is to make the software
code easy to modify when required. Some languages such as Ada, Pascal, and dBase are
designed with features that implement the logical program structure in the software code.

Data-Flow Oriented Design

With the introduction of very Large Scale Integrated circuits (VLSI), the computers became
more powerful and faster. As a result, various significant developments like networking and
GUIs came into being. Clearly, the complexity of software could not be dealt using control flow
based design. Thus, a new technique, namely, data-flow-oriented technique came into existence.
In this technique, the flow of data through business functions or processes is represented
using Data-flow Diagram (DFD). IEEE defines a data-flow diagram (also known as bubble
chart and work-flow diagram) as ‘a diagram that depicts data sources, data sinks, data storage,
and processes performed on data as nodes, and logical flow of data as links between the nodes.’

Object Oriented Design

Object-oriented design technique has revolutionized the process of software development. It not
only includes the best features of structured programming but also some new and powerful
features such as encapsulation, abstraction, inheritance, and polymorphism. These new features
have tremendously helped in the development of well-designed and high-quality software.
Object-oriented techniques are widely used these days as they allow reusability of the code. They
lead to faster software development and high-quality programs. Moreover, they are easier to
adapt and scale, that is, large systems can be created by assembling reusable subsystems.

Notable Changes in Software Development Practices –

Changing Nature of Software – Software Engineering

The software is an instruction or computer program that when executed provides desired
features, function, and performance. A data structure that enables the program to adequately
manipulate information and documents that describe the operation and use of the program.

Characteristics of software:

There is some characteristic of software which is given below:

1. Reliability: The ability of the software to consistently perform its intended tasks without
unexpected failures or errors.

2. Usability: How easily and effectively users can interact with and navigate through the
software.

3. Efficiency: The optimal utilization of system resources to perform tasks on time.

4. Maintainability: How easily and cost-effectively software can be modified, updated, or


extended.

5. Portability: The ability of software to run on different platforms or environments without


requiring significant modifications.
Changing Nature of Software:

Nowadays, seven broad categories of computer software present continuing challenges for
software engineers. This is given below –

The 7 broad categories of computer software present continuing challenges for software
engineers:
1) System software
2) Application software
3) Engineering/scientific software
4) Embedded software
5) Product-line software
6) Web-applications
7) Artificial intelligence software.

1. System Software: System software is a collection of programs that are written to service
other programs. Some system software processes complex but determinate, information
structures. Other system application processes largely indeterminate data. Sometimes
when, the system software area is characterized by the heavy interaction with computer
hardware that requires scheduling, resource sharing, and sophisticated process
management.
The systems software is characterized by
- heavy interaction with computer hardware
- heavy usage by multiple users
- concurrent operation that requires scheduling, resource sharing, and sophisticated
process management
- complex data structures
- multiple external interfaces

E.g. compilers, editors and file management utilities.

2. Application Software: Application software is defined as programs that solve a specific


business need. Application in this area processes business or technical data in a way that
facilitates business operation or management technical decision-making. In addition to
conventional data processing applications, application software are used to control business
functions in real-time.

- It facilitates business operations or management/technical decision making.


- It is used to control business functions in real-time

E.g. point-of-sale transaction processing, real-time manufacturing process control


3. Engineering and Scientific Software: This software is used to facilitate the engineering
function and task. However modern applications within the engineering and scientific
area are moving away from conventional numerical algorithms.
Applications range
- from astronomy to volcanology
- from automotive stress analysis to space shuttle orbital dynamics
- from molecular biology to automated manufacturing

E.g. Computer-aided design, system simulation, and other interactive applications have
begun to take real-time and even system software characteristic.

4. Embedded Software: Embedded software resides within the system or product and is
used to implement and control features and functions for the end-user and for the system
itself. Embedded software can perform limited and esoteric functions or provide
significant function and control capability.

E.g. Digital functions in automobile, dashboard displays, braking systems etc.

5. Product-line Software: Designed to provide a specific capability for use by many


customers, product-line software can focus on the limited and esoteric marketplace or
address the mass consumer market.

E.g. Word processing, spreadsheets, computer graphics, multimedia, entertainment,


database management, personal and business financial applications

6. Web Application: It is a client-server computer program that the client runs on the web
browser. In their simplest form, Web apps can be little more than a set of linked hypertext
files that present information using text and limited graphics. However, as e-commerce
and B2B applications grow in importance. Web apps are evolving into a sophisticated
computing environment that not only provides a standalone feature, computing function,
and content to the end user.

7. Artificial Intelligence Software: Artificial intelligence software makes use of a


nonnumeric algorithm to solve a complex problem that is not amenable to computation or
straightforward analysis. Applications within this area include robotics, expert systems,
pattern recognition, artificial neural networks, theorem proving, and game playing.
The following are the new challenges on the horizon:

Ubiquitous computing
Netsourcing
Open source
The “new economy”

Ubiquitous computing: The challenge for software engineers will be to develop systems
and application software that will allow small devices, personal computers and enterprise
system to communicate across vast networks.

Net sourcing: The challenge for software engineers is to architect simple and
sophisticated applications that provide benefit to targeted end-user market worldwide.

Open Source: The challenge for software engineers is to build source that is self
descriptive but more importantly to develop techniques that will enable both customers
and developers to know what changes have been made and how those changes manifest
themselves within the software.

The “new economy”: The challenge for software engineers is to build applications that
will facilitate mass communication and mass product distribution.

Computer Systems Engineering –

Computer system engineering encompasses the design, development, and management of


computer hardware systems.

It is a multidisciplinary field that combines elements of electrical engineering, computer science,


and computer engineering.

Computer system engineering requires a deep understanding of both hardware and software to
create robust and efficient computer systems.

It also involves the integration of hardware components, such as processors, memory, and
storage devices, to create efficient and functional computer systems.

The role of a computer system engineer is crucial in ensuring that computer systems are not only
reliable and secure but also capable of meeting the ever-increasing demands of today’s
technology-driven world.

The growth in market size reflects this, with the computer engineering market value expected to
exceed USD 2.5 trillion by 2024, according to Global Market Insights.
System architecture

One of the key aspects of computer system engineering is system architecture.

System architects are responsible for designing the overall structure of a computer system,
including the arrangement of hardware components and the communication between them.

They consider factors such as performance, scalability, and reliability when designing the system
architecture.

Computer system engineers collaborate with software engineers to design systems that optimize
hardware and software interactions, resulting in high-performance computing solutions.

Component selection

Component selection is another critical aspect of computer system engineering.

Engineers carefully choose the hardware components that will be used in the system, taking into
account factors such as cost, performance, power consumption, and compatibility.

They evaluate different options and make informed decisions to ensure that the chosen
components meet the system’s requirements.

System integration

System integration is the process of combining different hardware components and software
modules to create a fully functional computer system.

It involves connecting the various components, configuring them, and testing their interactions.

System engineers work closely with software engineers during this phase to ensure that the
hardware and software components work seamlessly together.

Performance optimization

Performance optimization is an ongoing process in computer system engineering.

Computer system engineers continuously monitor and analyses the performance of the system,
identifying bottlenecks and areas for improvement.

They may tweak the system configuration, upgrade hardware components, or optimize software
algorithms to enhance the system’s performance.

Computer system engineers play a vital role in ensuring the reliability and security of computer
systems.
They implement measures to protect against hardware failures, software vulnerabilities, and
cyber-attacks.

They also design backup and recovery systems to ensure that data is not lost in case of system
failures.

Computer system engineers are also at the forefront of developing innovative solutions to meet
these demands.

They constantly explore new technologies, such as cloud computing and parallel processing, to
design systems that can handle complex computational tasks efficiently.

Difference between Software Engineering and Computer Engineering

Software engineering and Computer engineering are two distinct disciplines that focus on
different aspects of computer systems. While both fields require a strong foundation in computer
science and mathematics, software engineering is focused on software development processes,
while computer engineering is focused on the physical components and systems that make up
computers.

What is Software engineering?

Software Engineering refers to the study of software which tell us about how Software is formed
and about the processes involved in the formation of Software. It is basically known as Software
Engineering because it applies the principles of Engineering in order to create software. Thus it
is called Software Engineering and people who study and apply software engineering for
building a product are known as Software Engineers.

 The software engineering process typically includes several phases, such as requirements
gathering, design, coding, testing, and maintenance. It also involves the use of various
tools, techniques, and methodologies, such as version control, software design patterns,
and agile development practices.

 Software engineers work with a variety of programming languages and platforms and are
responsible for writing clean, well-organized code that is easy to read and understand.
They also collaborate with other members of the development team, such as project
managers, designers, and quality assurance engineers, to ensure that the software meets
the project requirements and is delivered on time and within budget.

What is Computer engineering?

Computer Engineering, on the other hand, refers to the study of both software and hardware and
it tell us about the theoretical and practical implementation of mathematical formulations and
technologies and makes people ready to become Software Engineers. It provides us with
knowledge about various fields like networking, processors and database, etc. It is the base of
Software Engineering.

 Computer engineering is the branch of engineering that deals with the design,
development, and maintenance of computer hardware and software systems. It involves
combining principles from electrical engineering and computer science to create new
computer technologies and systems.

 Computer engineers work on a wide range of projects, including the design of computer
chips, the development of networking technologies, the creation of operating systems and
software applications, and the design of computer systems for various industries.

 Some of the key areas of focus in computer engineering include computer architecture,
computer networks, software engineering, embedded systems, and robotics. Computer
engineers may work in a variety of settings, including research and development labs,
manufacturing facilities, and consulting firms.

Difference between Software Engineering and Computer Engineering

Parameters Software Engineering Computer Engineering

Computer science involves the


Software Engineering majorly defines the
study of both principles and the
architecture and structural properties of
use of computers which usually
Materialistic Engineering, Thermodynamics
covers theoretical and practical
Computer Organization Architecture, etc.
Definition approaches.

Computer engineering focuses


Software engineering focuses on the on the design and development
development of software applications. of computer hardware and
Focus systems.

Computer engineering is
Software engineering is concerned with the
focused on the physical
entire software development process, from
components and systems that
conception to maintenance.
Scope make up computers.
Parameters Software Engineering Computer Engineering

Computer engineering, on the


other hand, includes areas such
Software engineering involves areas such
as digital circuits,
as software design, programming, testing,
microprocessors, computer
project management, and quality assurance.
Knowledge architecture, and operating
Area systems.

Computer engineering is used


Software engineering is used to develop a
to design and develop computer
wide range of software applications, such as
hardware, such as
desktop and mobile applications, web
microprocessors, graphics
applications, and embedded systems.
Applications cards, and motherboards.

Software engineers require skills in


programming languages, software design Computer engineers require
patterns, and development frameworks, as skills in digital circuits,
well as project management, and have computer architecture, and
Skills strong problem-solving communication hardware design.
Required skills.

Computer science is formed


Software engineering applies all the
with the collection of Computer
standards and principles of Engineering to
Engineering, Computer
design, develop, maintain, test, and evaluate
Science, Information systems,
computer software which is also known as
Main Information Technology, and
the life cycle of Software Development.
Objective Software engineering.

Scope of Study It involves the study and


It involves the study and application of
and application of software and
software only.
Application hardware.

Professionals Software engineers are programmers who Students studying Computer


Parameters Software Engineering Computer Engineering

Science study the concepts of


various subjects like
perform various quality assurance
Mathematics, Electrical
techniques to test the general behavior of
engineering, Physics, and
software.
Management Information
systems.

It is a structural process of checking, It is not a structural process as


verifying, and finding the errors and bugs everything is to be done in a
Structured according to the need of software and then process and requires proper
Process providing a solution for removing that bug. study before execution.

Computer Science involves


Software Engineering involves some areas areas of study which are
of study which are Software Development, Networking, Artificial
Software Testing, and Quality Assurance. Intelligence, Data Base Systems
Areas of Study etc.

Software engineering is not Project management is an


Project compulsory project management but internal part of study in
Management knowledge of project management is a plus. Computer Science.

Combines principles from


Involves applying engineering principles electrical engineering and
and methods to the software development computer science to create new
Processes and process. computer technologies and
Methods systems.

Phases Typically involves several phases, such as Involves designing and


requirements gathering, design, coding, developing computer hardware,
testing, and maintenance. such as computer chips and
Parameters Software Engineering Computer Engineering

networking technologies.

Examples of tools and


Examples of tools and technologies used technologies used include
include programming languages, version computer chips, networking
control systems, and software design technologies, simulation
Tools and patterns. software, and hardware design
Technologies tools.

You might also like