0% found this document useful (0 votes)
5 views

Software Engineering

Chapter 1 introduces software engineering as a response to rising complexity and inefficiency in software development. It highlights its evolution from an art form to a structured discipline, discusses various project types, and emphasizes the importance of systematic practices and cognitive considerations in modern development.

Uploaded by

Sudhansu Pintu
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)
5 views

Software Engineering

Chapter 1 introduces software engineering as a response to rising complexity and inefficiency in software development. It highlights its evolution from an art form to a structured discipline, discusses various project types, and emphasizes the importance of systematic practices and cognitive considerations in modern development.

Uploaded by

Sudhansu Pintu
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/ 5

Software engineering

Chapter -1
Chapter 1 Notes: Introduction - Fundamentals of Software Engineering by Rajib
Mall

1.1 Evolution—From an Art Form to an Engineering Discipline


1. Initial State - Programming as Art:
o Early software development was informal and driven by intuition.
o Styles like "build and fix" were used without formal specifications or
design.
o Success depended on individual programmer skill.
2. Transition to Craft and Engineering:
o As software complexity grew, shared practices and empirical lessons
emerged.
o Eventually, programming evolved into a structured discipline.
3. Engineering Approach Defined:
o Uses systematic, cost-effective techniques.
o Emphasizes planning, design, testing, and maintenance.
o Similar to disciplines like civil or electrical engineering.
4. Comparison with Other Fields:
o Like iron-making or paper-making, software followed the art-to-
engineering path.
o Knowledge shifted from secrets to formal documentation and
education.
5. Importance of Software Engineering:
o Helps manage complexity, improves quality, reduces cost and
development time.
1.2 Software Development Projects
1. Programs vs Products:
o Programs: Small, single-user tools developed with minimal planning.
o Products: Large-scale software for many users, with full
documentation and testing.
2. Types of Software Projects:
o Product-based: Built for mass use; e.g., Microsoft Word.
o Service-based: Custom software for specific clients.
o Outsourced: Parts of projects handled by external teams.
3. Team-Based Development:
o Requires proper planning and coordination.
o Involves roles like analysts, developers, testers, and managers.
4. Indian Software Industry:
o Excels in services; gradually moving into product development.
o Product development involves higher risks but long-term gains.

1.3 Exploratory Style of Software Development


1. Definition:
o Informal style starting with minimal briefing.
o Focuses on quick coding, followed by testing and fixing.
2. Process Flow:
o Briefing → Coding → Testing → Fixing → Repetition until acceptable.
3. Drawbacks:
o Poor maintainability and scalability.
o Exponential increase in effort as size grows.
o Unstructured and undocumented code.
4. When it's Used:
o Suitable only for small, personal projects.
5. Team Incompatibility:
o Difficult to coordinate among team members without formal
documents.

1.3.1 Perceived Problem Complexity: Human Cognition


1. Human Memory Model:
o Short-term memory: Limited capacity (7 ± 2 items).
o Long-term memory: Stores vast information over years.
2. Implications for Programming:
o Developers can't manage large systems mentally without help.
o Complexity appears to grow exponentially.
3. Why Exploratory Style Fails for Big Projects:
o Overloads cognitive limits.
o Leads to confusion, bugs, and inefficiencies.

1.3.2 Principles to Overcome Human Limitations


1. Abstraction:
o Hides details; focuses on high-level views.
o Reduces cognitive load.
2. Decomposition:
o Divides large problems into smaller sub-problems.
o Each part is easier to design, develop, and test.
3. Benefits:
o Makes complexity manageable.
o Enables teamwork and modular development.
o Effort grows linearly instead of exponentially.

1.4 Emergence of Software Engineering


1. Early Programming Era:
o Used low-level languages and lacked structured methods.
2. Milestones:
o Control Flow Design → Data Structure Design → Data Flow → Object-
Oriented Design.
3. Modern Software Design:
o Uses object-oriented and component-based designs.
o Focus on reuse, clarity, and user satisfaction.
4. Future Directions:
o Growth in AI, component reuse, and agile practices.

1.5 Notable Changes in Software Development Practices


1. Then vs Now:
o Earlier: Code-first, less planning.
o Now: Plan-design-test cycle.
2. User Involvement:
o Agile and iterative models involve users throughout development.
3. Quality Emphasis:
o Testing, verification, and documentation are critical.
4. Tools and Automation:
o CASE tools, version control, CI/CD pipelines used for efficiency.
1.6 Computer Systems Engineering
1. Definition:
o Integrates hardware and software development.
2. Application Areas:
o Embedded systems, IoT, real-time control systems.
3. Challenges:
o Requires knowledge of both electronics and software.
4. Importance:
o Essential for systems where hardware-software co-design is critical
(e.g., smartphones, vehicles).

Summary: Chapter 1 introduces software engineering as a response to rising


complexity and inefficiency in software development. It highlights its evolution,
project types, cognitive basis, and the necessity for structured practices in
modern development.

You might also like