Software engineers are in high demand, yet software engineering is often misunderstood. What is software engineering and why is it important? What are the building blocks of software engineering? And what are the processes and methods that differentiate it as a discipline? This course aims to answer all of the above questions, and give the audience the absolute essential knowledge about software engineering.
The IEEE defines Software Engineering as "the application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software." Software engineering is a discipline applied throughout the entire software lifecycle, spanning the early phases of system specifications all the way to maintenance after system deployment. So why use an engineering approach to software? Quite simply, because the alternative would be to use an ad-hoc or disordered approach. An engineering approach means predictability and quantifiable results through the application of theories, methodologies, frameworks, and tools. When applied efficiently, the result is high-quality software created in a cost-effective manner.
Introduction Hi, my name is Mohamad Halabi. Welcome to this course about Software Engineering Essentials. To say that software engineering is a discipline in demand is an understatement. The job of a software engineer is among the most in-demand jobs. Companies and organizations now very much appreciate the importance of applying the engineering discipline to software, and therefore are in constant search for software engineers. Actually a report published by Mashable backs the job of a software engineer as the first technology job of 2014. And in this Business Insider report, you can see how much the software engineer role is valued at some of the world's largest companies. Yet through many years of practice, I have found that software engineering is most often misunderstood. What is software engineering and why is it important? What are the building blocks of software engineering, and what are the processes and methods that differentiate it as a discipline? This course aims to answer all of the above, and more questions, and give the audience the absolute essential knowledge about software engineering.
Software Processes Welcome to module two about Software Processes. In the previous module, we established that software engineering consists of three layers. In this module we will focus on the first of these layers, that is the process layer. By now you know that a software engineering process consists of generic activities, and that the way the activities are organized, the flow, and the type and detail of artifacts generated is governed by the process model selected. In this module, we'll have a look at some of the most common process models.
Requirements Engineering Having completed an overview about the most important process models in the previous module, in this module we'll turn our attention to software engineering activities. Requirements engineering is the first activity of software engineering, it defines what the system will do in preparation to the design activity. In this module, we will talk about the various tasks of requirements engineering activity.
Requirements Modeling – Structured Analysis In the previous module, we examined requirements analysis and briefly talked about the importance of modeling as a core activity of analysis. There are various analysis methods where each method produces a set of models. In this module, we'll look at structured analysis, one of the early analysis methods that has been used for many years.
Requirements Modeling – Object Oriented Analysis In the previous module, we started our discussion about requirements modeling, and we talked about structured analysis. In this module we discuss object-oriented analysis, which is a more modern and popular approach that is based on objects rather than data.
Design – Essentials Now we have completed requirements engineering, and we have generated the appropriate requirement models so we have a solid understanding of the problem domain. Our focus now moves into designing the solution. This module talks about essential design concepts, and in the next module I will present a generic design method.
Design – Methodology In the previous module, I explained some of the most important design concepts. In this module, let's expand on these concepts and put them into a context of a generic design process.
Construction In this module, we turn our attention to creating working software. This is the responsibility of the construction software engineering activity. While writing code is the core of construction, there are a set of concepts and principles that are essential for efficient execution. This module takes a brief look at these concepts and the principles.
Testing No matter how well we plan and design software, the truth is we will never be assured that we are delivering something of value until we test the software. This module takes a brief look at software testing and some of the most important testing concepts.