1
SOFTWARE ENGINEERING
UNIT 1:
Introduction: Evolution, Software development projects, Exploratory style of software
developments, Emergence of software engineering, Notable changes in software
development practices, Computer system engineering.
Software Life Cycle Models: Basic concepts, Waterfall model and its extensions,
Rapid application development, Agile development model, Spiral model.
Introduction:
What is software engineering ? :
A popular definition of software engineering is: “A systematic collection of
good program development practices and techniques . Good program development
techniques have resulted from research innovations as well as from the lessons learnt
by programmers through years of programming experiences. An alternative definition of
software engineering is: “An engineering approach to develop software”. Software
engineering discusses systematic and cost-effective techniques for software
development. These techniques help develop software using an engineering approach.
1. Evolution of Software Engineering
1.1.1. Evolution of an Art into an Engineering Discipline
1.1.2. Evolution Pattern for Engineering Disciplines
1.1.3. A Solution to the Software Crisis
1.1.1. Evolution of an Art into an Engineering Discipline
● Software development initially relied on an exploratory, "build and fix" approach,
where programmers wrote code without formal design or planning.
2
● Early programmers relied on personal intuition and experience, often developing
unique techniques for coding.
● Over time, software development evolved into a structured process, incorporating
systematic principles and methodologies.
1.1.2. Evolution Pattern for Engineering Disciplines
● Similar to other fields like iron-making and civil engineering, software engineering
transitioned through three stages:
1. Art: A few individuals possessed specialized knowledge, often kept as a
secret.
2. Craft: Knowledge was shared among apprentices and improved through
practice.
3. Engineering Discipline: Standardized principles and scientific methods
were applied for systematic development.
● This transition allowed for better predictability, efficiency, and maintainability in
software development.
1.1.3. A Solution to the Software Crisis
3
● The "software crisis" refers to increasing software development costs, poor
reliability, maintenance difficulties, and frequent project failures.
● Organizations now spend more on software than hardware, making cost-effective
software engineering practices essential.
● Adopting software engineering techniques helps develop high-quality software
efficiently, reducing costs and improving reliability
1.2. Software Development Projects
1.2.1. Types of Software Development Projects.
1.2.2. Software Projects Being Undertaken by Indian Companies
[Link] of Software Development Projects.
→ This section discusses different types of software development projects and how
professional software differs from toy programs written by students or hobbyists.
Programs vs. Products
Software can be categorized based on purpose, user base, and complexity.
● Programs (Toy Software):
○ Created by students or hobbyists for learning or personal use.
○ Typically small, lack user-friendly interfaces, documentation, and
maintainability.
4
○ The same person who writes the code usually maintains it.
● Products (Professional Software):
○ Developed for multiple users and commercial use.
○ Comes with user-friendly interfaces, documentation, and manuals.
○ Created by teams using structured development methodologies.
○ Requires planning, testing, and systematic development.
Even though software engineering principles are primarily intended for professional
software, small programs can also benefit from them.
→ Types of Software Development Projects
Software development projects can be classified into two major categories:
1. Software Products
○ These are generic software solutions developed for a broad user base and
sold commercially.
○ Examples: Microsoft Windows, Oracle DBMS, Adobe Photoshop.
○ Companies identify features useful to a wide audience and define product
specifications accordingly.
○ Some companies develop product lines that target slightly different
market segments, e.g., Windows for desktops vs. Windows Server for
enterprises.
2. Software Services
○ These involve developing customized solutions or working on outsourced
projects.
○ Custom Software Development:
■ Tailored for a specific client based on their unique requirements.
■ Example: An academic institution’s student management system.
■ Companies modify existing software to fit the client’s needs, reusing
previous code wherever possible.
○ Outsourced Software Development:
■ Some companies subcontract specific parts of their projects to
others.
■ Reasons for outsourcing:
■ Lack of expertise in a particular domain.
■ Cost-effectiveness of outsourcing to companies with
specialized skills.
■ These projects are typically small and must be completed within a
short period.
5
The type of projects a company takes on affects its profitability and business risk:
● Product development provides long-term revenue but requires high upfront
investment.
● Outsourcing projects generate immediate revenue but do not provide long-term
financial returns.
1.2.2 Software Projects in India
● Indian IT companies have excelled in software services, becoming global
leaders in outsourcing.
● Indian firms have been slow to develop software products due to the high
financial risks involved.
● Recently, Indian companies have begun focusing on product development,
contributing to the global software market.
● The software services sector is expanding rapidly, driven by advancements
in:
○ Cloud computing
○ Application service provisioning (ASP)
India’s IT industry is evolving from outsourced service providers to product
innovators, though software services continue to dominate
1.3. Exploratory Style of Software Development.
1.3.1. Perceived Problem Complexity: An Interpretation Based on Human
Cognition Mechanism
[Link] Deployed by Software Engineering to Overcome Human Cognitive
Limitations
1.3. Exploratory Style of Software Development
● Exploratory Style of Software Development refers to an informal development
style or build and fix style , in which the programmer uses his own intuition to
develop a program rather than making use of systematic body of knowledge
which is categorised under the software engineering discipline.
● This style of development gives complete freedom to programmers
● This dirty program is quickly developed and have high flexibility
6
● This style does not offer any rules to start developing software . Bugs are fixed
whenever they raises
●