1
Software Engineering
Nature of Software
Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be collection of executable programming code,
associated libraries and documentations. Software, when made for a specific requirement is called
software product.
Characteristics of good software
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 the 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
, 2
• Reusability
• Adaptability
Maintenance
This aspect briefs about how well the software has the capabilities to maintain itself in the ever-
changing environment:
• Modularity
• Maintainability
• Flexibility
• Scalability
Types of Software:
System Software: Includes operating systems and utilities that manage computer resources at a low
level.
Application Software: Designed to help users perform specific tasks, such as word processing, web
browsing, and data management.
Embedded Software: Resides within devices to perform dedicated functions, such as in medical
devices, automobiles, and household appliances.
Software Engineering
Software engineering is an engineering branch associated with development of software product
using well-defined scientific principles, methods and procedures. The outcome of software
engineering is an efficient and reliable software product.
Key Principles
1. Modularity: Breaking down software into smaller, manageable components that can be
developed and tested independently.
, 3
2. Abstraction: Hiding the complex implementation details and exposing only the necessary
functionalities to users and other components.
3. Encapsulation: Bundling the data and methods that operate on the data within a single unit
(class), protecting the internal state from external interference.
4. Reusability: Designing components that can be reused across different projects to save time
and resources.
5. Maintenance: Regularly updating software to fix bugs, add features, and improve
performance.
6. Testing: Ensuring that the software meets its requirements and is free of defects through
various testing methodologies.
Need of Software Engineering
The need of software engineering arises because of higher rate of change in user requirements and
environment on which the software is working. Following are some of the needs stated:
• Large software
It is easier to build a wall than a house or building, likewise, as the size of the software becomes
large, engineering has to step to give it a scientific process.
• Scalability
If the software process were not based on scientific and engineering concepts, it would be easier to
re-create new software than to scale an existing one.
• Cost
As hardware industry has shown its skills and huge manufacturing has lower down the price of
computer and electronic hardware. But, cost of the software remains high if proper process is not
adapted.
• Dynamic Nature
Always growing and adapting nature of the software hugely depends upon the environment in which
the user works. If the nature of software is always changing, new enhancements need to be done in
the existing one. This is where the software engineering plays a good role.
• Quality Management
Better process of software development provides better and quality software product.
Software Engineering Ethics
As a software engineer, you work within a social and legal framework that requires ethical and moral
responsibility beyond technical skills. Upholding honesty and integrity is crucial, and your actions
should reflect positively on the profession. Key areas of ethical responsibility include:
1. Confidentiality: Respect the confidentiality of employers or clients, even without formal
agreements.
, 4
2. Competence: Accurately represent your skills and avoid work beyond your capabilities.
3. Intellectual Property: Protect the intellectual property rights of employers and clients,
adhering to local laws.
4. Computer Misuse: Avoid using your skills for unethical purposes, from trivial misuse to
serious cyber offenses.
Software Paradigms
• Software paradigms refer to the methods and steps, which are taken while designing the software.
There are many methods proposed and are implemented. But we need to see where in the
software engineering concept, these paradigms stand. These can be combined into various
categories, though each of them is contained in one another:
Programming paradigm is a subset of Software design paradigm which is further a subset of
Software development paradigm.
Software Development Paradigm
This paradigm is known as software engineering paradigms; where all the engineering concepts
pertaining to the development of software are applied. It includes various researches and requirement
gathering which helps the software product to build. It consists of –
• Requirement gathering
• Software design
• Programming
Software Design Paradigm
This paradigm is a part of Software Development and includes –
• Design
• Maintenance
• Programming
Programming Paradigm
This paradigm is related closely to programming aspect of software development. This includes –
• Coding
• Testing
• Integration
Software Engineering
Nature of Software
Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be collection of executable programming code,
associated libraries and documentations. Software, when made for a specific requirement is called
software product.
Characteristics of good software
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 the 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
, 2
• Reusability
• Adaptability
Maintenance
This aspect briefs about how well the software has the capabilities to maintain itself in the ever-
changing environment:
• Modularity
• Maintainability
• Flexibility
• Scalability
Types of Software:
System Software: Includes operating systems and utilities that manage computer resources at a low
level.
Application Software: Designed to help users perform specific tasks, such as word processing, web
browsing, and data management.
Embedded Software: Resides within devices to perform dedicated functions, such as in medical
devices, automobiles, and household appliances.
Software Engineering
Software engineering is an engineering branch associated with development of software product
using well-defined scientific principles, methods and procedures. The outcome of software
engineering is an efficient and reliable software product.
Key Principles
1. Modularity: Breaking down software into smaller, manageable components that can be
developed and tested independently.
, 3
2. Abstraction: Hiding the complex implementation details and exposing only the necessary
functionalities to users and other components.
3. Encapsulation: Bundling the data and methods that operate on the data within a single unit
(class), protecting the internal state from external interference.
4. Reusability: Designing components that can be reused across different projects to save time
and resources.
5. Maintenance: Regularly updating software to fix bugs, add features, and improve
performance.
6. Testing: Ensuring that the software meets its requirements and is free of defects through
various testing methodologies.
Need of Software Engineering
The need of software engineering arises because of higher rate of change in user requirements and
environment on which the software is working. Following are some of the needs stated:
• Large software
It is easier to build a wall than a house or building, likewise, as the size of the software becomes
large, engineering has to step to give it a scientific process.
• Scalability
If the software process were not based on scientific and engineering concepts, it would be easier to
re-create new software than to scale an existing one.
• Cost
As hardware industry has shown its skills and huge manufacturing has lower down the price of
computer and electronic hardware. But, cost of the software remains high if proper process is not
adapted.
• Dynamic Nature
Always growing and adapting nature of the software hugely depends upon the environment in which
the user works. If the nature of software is always changing, new enhancements need to be done in
the existing one. This is where the software engineering plays a good role.
• Quality Management
Better process of software development provides better and quality software product.
Software Engineering Ethics
As a software engineer, you work within a social and legal framework that requires ethical and moral
responsibility beyond technical skills. Upholding honesty and integrity is crucial, and your actions
should reflect positively on the profession. Key areas of ethical responsibility include:
1. Confidentiality: Respect the confidentiality of employers or clients, even without formal
agreements.
, 4
2. Competence: Accurately represent your skills and avoid work beyond your capabilities.
3. Intellectual Property: Protect the intellectual property rights of employers and clients,
adhering to local laws.
4. Computer Misuse: Avoid using your skills for unethical purposes, from trivial misuse to
serious cyber offenses.
Software Paradigms
• Software paradigms refer to the methods and steps, which are taken while designing the software.
There are many methods proposed and are implemented. But we need to see where in the
software engineering concept, these paradigms stand. These can be combined into various
categories, though each of them is contained in one another:
Programming paradigm is a subset of Software design paradigm which is further a subset of
Software development paradigm.
Software Development Paradigm
This paradigm is known as software engineering paradigms; where all the engineering concepts
pertaining to the development of software are applied. It includes various researches and requirement
gathering which helps the software product to build. It consists of –
• Requirement gathering
• Software design
• Programming
Software Design Paradigm
This paradigm is a part of Software Development and includes –
• Design
• Maintenance
• Programming
Programming Paradigm
This paradigm is related closely to programming aspect of software development. This includes –
• Coding
• Testing
• Integration