 Welcome to module 4 in which we will cover the topic of quality assurance in software engineering. And in particular we will be looking at two things, we'll be looking at testing and inspections on the other side. Now to start off with if you are talking about software engineering there's a term that is rather common and that's to talk about the two Vs, V and V. And that is standing for two activities and that is verification and validation. Now this has already been covered in one of the earlier modules but just to give you a recap of what this means essentially verification is about have we built the system right. That is have we implemented the requirements in a correct way, are they fulfilled in the system. And the second part then the validation is about are we building the right system and that's essentially about are we having the right requirements. Or are we building something, we might be building it in very much in the correct way and it works but we are really missing what the stakeholder needs are. So essentially those are the two different things. And both of them relate to quality assurance is just a different aspect. Now the whole purpose of quality assurance is to establish some kind of confidence that our system is working in the right way that we're building the right system. So you try to kind of find evidence, find arguments, check whether you are doing well enough essentially. And on a large abstract level there are essentially two kind of techniques. There is what is called inspection and we have already talked about that in the requirements module. There is inspection which means that you analyze something static, the static system. You are for example looking at a design document, you're reading the code, you are validating the requirements by reading through them by discussing them but you're not actually executing anything. And then we have what is known as testing which is in contrast to the inspection. So you actually execute the system part of the system or prototype and by that you try to essentially establish this confidence. So for example you run an automated unit test to get confidence whether you have built the system in the right way and the requirements are fulfilled or you run a system test to have confidence that there are not many bugs or you don't find any bugs at least. And in the reminder of this module we'll go into these different parts, we'll look at inspections a bit, we'll look at testing in much more depth and we'll look at different techniques. Now given the nature of these two it's of course natural that inspection you can do with almost anything so you can inspect a model, you can read the UML diagram for example, you can read the requirements specification and you can read code and so on. Testing on the other hand is a bit more limited since you have to execute something. So you can execute code even that is not always easy because it might depend on other things that have to run. You cannot execute a specification usually. There are exceptions but in general if it's just text there is just no way to run a test on that. Models, it also depends but all sorts of documentations for example the architecture are usually not executable so you have to do inspection. So anyway these techniques very much complement each other. It's not like if you do testing everything is better. Testing can detect certain things, inspection can detect other things. So let's look at the remainder of this in the follow-up videos and we go into depth on these topics.