Software Engineering Introduction to Software Engineering/Overview Motivation • Software can have huge impact in any aspect of our society • Where can we find software? – Software is almost everywhere!!! Problems in Software Development • Common issues – The final software does not fulfill the needs of the customer. – Hard to extend and improve: if you want to add a functionality later its mission impossible. – Bad documentation – Bad quality: frequent errors, hard to use, ... – More time and costs than expected . Communication Problem • The cartoon below is the best illustration. Due to communication problem it is difficult to capture the customer needs and correctly translate them in the form of requirements, design and working code. Conclusion • Programming is NOT enough! – It is not enough to do your best: you must Know what to do, and THEN do your best. -- W. Edwards Deming. Software Engineering • Software: is more than just a program code. A program is an executable code, which serves some computational purpose. Software is a collection of executable programming code, associated libraries and documentations. Software, when made for a specific requirement is called software product. • Engineering: is all about developing products, using well-defined, scientific principles and methods. Software Engineering • • Software engineering is engineering branch associated with the development of software product using well-defined scientific principles, methods, and procedures. . IEEE defines software engineering as: The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is the application of engineering to software. Software Engineering is a Systematic Approach • A small program can be written without using software engineering principles. • For large software product, software engineering principles are necessary to achieve a good quality software cost effectively. • Without using software engineering principles, it would be difficult to develop large programs. Software Engineering Techniques • Software engineering principles use two important techniques to reduce problem complexity: abstraction and decomposition. • Abstraction: reduce the complexity of the problem. – focus on relevant aspects • Decomposition: complex problem is divided into several smaller problems. – minimize interactions among various components. 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. – Large software – Scalability – Cost – Dynamic nature – Quality management Characteristics of Good Software • This software must satisfy on the following grounds: – Operational ▪ Budget, Usability, Efficiency, Correctness, Functionality, Dependability, Security, Safety – Transitional ▪ Portability, Interoperability, Reusability, Adaptability – Maintenance ▪ 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 ontime software products. Recommended Books • Textbooks – Roger S. Pressman, Software Engineering, A Practitioner’s Approach, Latest Edition. – Ian Sommerville, Software Engineering, Latest Edition. Next Lecture • Software development lifecycle • Need of software development life cycle • Different life cycle models Q&A