Lecture 01: Introduction- I
To access the translated content: 1. The translated content of this course is available in regional languages. For details please visit https://nptel.ac.in/translation The video course content can be accessed in the form of regional language text transcripts, books which can be accessed under downloads of each course, subtitles in the video and Video Text Track below the video. Your feedback is highly appreciated. Kindly fill this form https://forms.gle/XFZhSnHsCLML2LXA6 2. Regional language subtitles available for this course To watch the subtitles in regional languages: 1. Click on the lecture under Course Details. 2. Play the video. 3. Now click on the Settings icon and a list of features will display 4. From that select the option Subtitles/CC. 5. Now select the Language from the available languages to read the subtitle in the regional language.
Lecture 01: Introduction- I
Welcome to Software Engineering Course
Introduction to Software Engineering
- The course provides a brief introduction to various problems, motivations, and benefits associated with software engineering.
- Rajeev Mal, the instructor, shares his educational background including Bachelor's, Master's, and PhD from the Indian Institute of Science in Bangalore.
- He has worked with Motorola in India for several years before joining IIT Kharagpur in 1994 as a professor in the CSE department.
Understanding Software Engineering
- The definition of software engineering is presented as an engineering approach to developing software.
- A comparison is made between traditional methods of software development and engineering approaches using the analogy of building small versus large structures.
- Emphasizes that while small programs can be developed intuitively, larger systems require structured methodologies to avoid failure.
Importance of Structured Methodologies
- Software engineering is described as a collection of experiences leading to various techniques and guidelines for developing large-scale software.
- IEEE defines it as a systematic, disciplined approach applicable to the development, operation, and maintenance of software; emphasizing its engineering nature.
Challenges in Software Development
- Discusses the "software crisis," which arises when user needs are not met due to complexities involved in software development.
- Highlights that software is becoming more expensive than hardware over time; issues arise when debugging or making changes takes excessive time.
Cost Dynamics Between Hardware and Software
- It’s noted that many projects fail to meet user requirements due to high costs associated with changes and debugging processes.
- A graph illustrates how hardware costs decreased dramatically since the 1960s while software costs have risen significantly.
Current Trends in Costs
- Today’s cost dynamics show that hardware expenses are minimal compared to skyrocketing software prices; examples include licensing fees for applications like Microsoft Word being much higher than hardware costs.
- Raises questions about why all functionalities achievable through software cannot also be achieved through superior hardware if it were reliable and affordable.
Advantages of Software Over Hardware
- Lists key advantages of software: ease and speed of development along with flexibility for modifications compared to lengthy hardware development processes.
- Contrasts VLSI chip fabrication timelines (years long process), highlighting how quickly adjustments can be made within software environments without significant resource expenditure.
Understanding Software Complexity and Engineering
The Challenge of Software Modification
- Modifying software requires a deep understanding of its complexity and functionality; without this knowledge, changes are not feasible.
- Each modification can complicate the software's architecture, making it harder for others to comprehend.
- Statistics reveal that only about 28% of software projects succeed, with many being canceled or delayed due to various challenges.
Reasons for Project Failures
- A significant number of software projects fail because they become overly complex while hardware remains relatively simple.
- Poor project management is often a factor, as developers must manually handle coding and testing processes.
- A major contributor to software crises is the lack of adequate training in software engineering practices among developers.
Evolution of Software Engineering Practices
- There has been little communication regarding modern software engineering techniques among developers, leading to slow skill improvements over time.
- The development process resembles an art form where initial knowledge evolves into craftsmanship through experience and sharing techniques.
Transition from Craftsmanship to Engineering
- Skilled artisans possess specific techniques that they share only with apprentices, which can lead to a loss of knowledge over time.
- As practices evolve into engineering methods, all techniques undergo investigation and analysis based on past experiences.
Systematic Approach in Programming
- In the early 1960s, distinctions were made between good and bad programming practices; effective programmers shared their successful strategies.
- Training programs emerged where proficient programmers taught others how to write better code systematically.
- Modern software engineering relies heavily on previous experiences combined with theoretical foundations to develop quantifiable methodologies for design decisions.