Fundamentals of Software Engineering CS 2042 Course Details Credits: 02 Lecture : 30 Hours Attendance: 80% ( < 80%, Not Allowed for Final exam) Formative Assessments: 35% Continuous assessments tests/ Quizzes. Assignments Summative Assessment: 65% Course Aim To teach software Engineering Principles, Software process models in order to help students to develop skills that will enable them to construct software of high quality – software that is reliable, and that is reasonably easy to understand, modify and maintain, and to foster an understanding of why these skills are important. Intended Learning Outcomes (ILOs): After completing this course, students will be able to, Gain extensive knowledge on software development life cycle and its basic economics. Describe different theories of how software can be developed. Apply appropriate methods for the design and implementation of modern software systems Course Capsule Introduction to Software Engineering The Software Process Software Requirements and Specifications Software Design Techniques Software Validation and Verification Software Evolution Outline Syllabus Introduction to Software Engineering: Well Engineered Software, The Software Process. Models of Software Process: Software lifecycle, Waterfall, Spiral, Incremental model Prototyping, Software Quality Concepts. Software Requirements and Specifications: Properties of requirements, Requirements Elicitation, Describing functional Requirements using use cases, Non-Functional Requirements, Requirements Specifications, Requirements validation. Software Design Techniques: Systems Design Principles, Design Paradigms, Dataflow Diagram, Context diagram, Top-level dataflow diagrams. Software Validation and Verification: Testing Fundamentals, Static and Dynamic Testing. Software Evolution: Characteristics of maintainable software, Reengineering Systems. Recommended Reading Introduction to the Team Software Process, by Watts Humphrey. Engineering Software as a Service: An Agile Approach Using Cloud Computing, by Armando Fox and David Patterson, Strawberry Canyon Publisher, 2013. References Sommerville I.(2001,2004,…,2012) Software Engineering 6th, 7th, 8th, 9th, or 10th Edition,Addison-Wesley, Harlow, Essex, UK Stevens P.with Pooley, R.(2000) Using UML: Software Engineering with Objects and Components, Addison-Wesley, Harlow, Essex, UK References Software Engineering APRACTITIONER’SAPPROACH SEVENTH EDITION Roger S. Pressman, Ph.D. Object-Oriented Analysis and Design with Applications Third Edition Grady Booch,Robert A. Maksimchuk, Michael W. Engle Bobbi J. Young, Ph.D., Jim Conallen, Kelli A. Houston Chapter-01 Introduction to Software Engineering Introduction Software Engineering is the field of Computer Science that deals with the building of software systems. A Software Engineer should have considerable skill and experience as a programmer in order to understand the problem areas, goals and objectives of the software engineering. Software Engineers are concerned with the issues of analysis, design, verification, testing, documentation, software maintenance and project management. Software Computer programs and associated documentation Software products may be developed for a particular customer or may be developed for ageneral market Software products may be Generic - developed to be sold to a range of different customers Customised (or bespoke) - developed for a single customer according to their specification Hardware VS Software Cost Software hardware Time 1960 2017 What makes software special? The main difference in software engineering compared to other engineering disciplines are listed below. It is difficult completely. for a customer to specify requirements It is difficult for the developer to understand fully the customer needs. Software requirements change regularly. Software is primarily intangible; much of the process of creating software is also intangible, involving experience, thought and imagination. It is difficult to test software exhaustively Well Engineered Software If the software system does what the user wants, and can be made to continue to do what the user wants, it is well engineered. to be done in a cost effective way, to be constrained by limits on resource and schedule. to be maintained in a cost effective way. Characteristics of Good Software Well-engineered software is expected to have the following characteristics: 1. Operational 2. Transitional 3. Maintenance 1. Operational This tells us how well software works in operations. It can be measured on: Budget Usability Efficiency Correctness Functionality Dependability Security Safety 2. Transitional This aspect is important when the software is moved from one platform to another: Portability Interoperability Reusability Adaptability 3. Maintenance This aspect briefs about how well a software has the capabilities to maintain itself in the everchanging environment: Modularity Maintainability Flexibility Scalability Attributes of Well Engineered Software The software should deliver the required functionality and performance to the user and should be maintainable, dependable and usable Maintainability Software must evolve to meet changing needs Dependability Software must be trustworthy Efficiency Software should not make wasteful use of system resources Usability Software must be usable by the users for which it was designed Software Engineering Software engineering is an engineering discipline which is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. Software engineers should adopt asystematic and organised approach to their work use appropriate tools and techniques depending on the problem to be solved, the development constraints and the resources available Difference between Software Engineering and Computer Science Computer Science Software Engineering is concerned with theory fundamentals Algorithms, data structures, complexity theory, numerical methods the practicalities of developing delivering useful software SE deals with practical problems in complex software products Computer science theories are currently insufficient to act as a complete underpinning for software engineering, BUT it is a foundation forpractical aspects of software engineering Software Process SP is a set of activities whose goal is the development or evolution of software Fundamental activities in allsoftware processes are: Specification - what the system should do and its development constraints Development - production of the software system (design and implementation) Validation checking that the software is what the customer wants changing the software in response to Evolution changing demands Software Process Model? SPM is a simplified representation of a software process, presented from a specificperspective Examples of process perspectives: Workflow perspective Data-flow perspective Role/action perspective • represents inputs, outputs and dependencies • represents data transformation activities represents the roles/activities of the people involved in software process Generic process models Waterfall Evolutionary development Formal transformation Integration from reusable components Costs of Software Engineering? Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs Costs vary depending on the type of system being developed and the requirements of system attributes such as performance and system reliability Distribution of costs depends development model that is used on the Key Challenges Facing Software Engineering? Software engineering in the 21st century facesthree key challenges: Legacy systems Old, valuable systems must be maintained and updated Heterogeneity Systems are distributed and include a mix of hardware andsoftware Delivery There is increasing pressure for faster delivery of software Frequently Asked Questions About Software Engineering Question Answer What is software? Computer programs and associated documentation. Software products may be developed for a particular customer or may be developed for a general market. What are the attributes of good software? Good software should deliver the required functionality and performance to the user and should be maintainable, dependable and usable. What is software engineering? Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. What are the fundamental engineering activities? software Software specification, software validation and software evolution. development, software What is the difference between software engineering and computer science? Computer science focuses on theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software. What is the difference between software engineering and system engineering? System engineering is concerned with all aspects of computerbased systems development including hardware, software and process engineering. Software engineeringis part of this more general process. Frequently Asked Questions About Software Engineering Question Answer What are the key software engineering? What are engineering? the challenges costs of facing Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software. software Roughly 60% of software costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs. What is CASE (Computer-Aided Software Engineering)? It covers a wide range of different types of program which are used to support software process activities such as requirements analysis, system modelling, debugging and testing. What differences has the web made to software engineering? The web has led to the availability of software services and the possibility of developing highly distributed service- based systems. Web-based systems development has led to important advances in programming languages and software reuse. When You Know Programming, What Is The Need To Learn Software Engineering Concepts? A person who knows how to build a wall may not be good at building an entire house. Likewise, a person who can write programs may not have knowledge of other concepts of Software Engineering. The software engineering concepts guide programmers on how to assess requirements of end user, design the algorithms before actual coding starts, create programs by coding, testing the code and its documentation.