 Hi, and welcome to part two of this first lecture in the program analysis course. You hopefully have seen the first part of this lecture, so you know why program analysis is an exciting topic. And what I want to do in this second part is to show how the organization of this course will look like. So I will walk you through the different parts this course is composed of, which are lectures, exercises, a course project, and then at the very end of the semester a final exam. And we'll see how all of this fits together, how the different parts contribute to the grade and what exactly is expected from you. So the course consists of four parts, there are lectures and you're currently seeing one of them. There will be exercises which basically help you to get a better understanding of some of the ideas that are presented in the lectures. And they also help you to prepare for the exam because the exercises are very similar in spirit to what you'll see in the final exam. Then there's a course project which is a significant implementation project where you will not just theoretically learn about all the things we are talking about here, but where you actually apply the ideas by implementing your own program analysis. And then finally there's a final exam as usual at the very end of the semester where most of some of the content covered in this course is tested. Now the grade consists of these three parts. The exercises, the course project and the final exam and you can see the percentages here. So the final exam in a sense is the most important because it contributes most, but the other parts are also very important because they also contribute to half of the final grade. The biggest chunk here is the course project which contributes 40 percent and the exercises are 10 percent. So these 10 percent are mostly meant to motivate you to actually do the exercises and by doing them well you can actually improve your grade as well. So let's have a more detailed look into each of these four parts and let's start with the lectures. So the lectures, while you're seeing one right now so you know what they are, there will be 10 of them. Each of them covers one specific topic and what you're currently seeing is the second part of the first lecture which is just introducing the basics and talking about the organization and some foundations of the course. Each of these topics that are covered in the lectures is supposed to be watched within either a week or two weeks depending on how large the topics are and the videos for all of these lectures will be available on YouTube just as this one is. There will be recommended weeks where you are supposed to watch these lectures but of course you can do it at your own pace and watch them whenever you want. You can also re-watch them obviously before the final exam for example. But it's recommended to watch the lectures actually in the weeks that I suggest because the rest of the course including the exercises and the course project assumes that you have seen the topics during these recommended weeks. Next we'll have some exercises to be precise. We'll have three exercises throughout the semester which are essentially pen and paper exercises. So you will get some tasks to be solved on a sheet of paper. You can of course also do it on a tablet if you want. But it's something that you do by thinking and writing and not by implementing. And the way it works time-wise is the following. So we will publish these exercises on some day X which always will be at the end of a week. Then you have to submit solutions to these exercises a week after the date when they are published. So on X plus 7 and then on X plus 10 so 10 days after we've published the exercises there will be a discussion where the solutions of these exercises are discussed. And this is actually meant to be an interactive meeting where you also join in and then can ask questions and hopefully better understand what the correct solutions to these exercises are. The exercises are very similar to questions that you'll see in the final exam. So this is meant as a way to prepare you for the exam and of course also to deepen your understanding of some of the ideas that we talk about here. The exercises are graded. As you've seen they in total contribute 10% to the overall grade. So you are highly encouraged to actually submit these exercises on the submission day. But of course you do not have to do it. If you don't do it you will just lose these 10% of the points. So it's not mandatory to submit them but of course highly recommended if you want to get a good grade. Because the exercises are graded they are individual work which means you're not allowed to collaborate or share your solutions with anyone who's also taking this course. So if you find any students who happen to submit very similar exercises this will be punished as cheating in an exam would be punished which typically means you failed a course and there may also be some other consequences. Besides the exercises in the lectures we'll also have a course project. So the idea of the course project is that you're not just learning the theory of program analysis and know how to deal with program analysis on paper but you will actually implement your own program analysis which is a great way to really understand what's going on. So in this course project you will design implement and evaluate a program analysis. Of course you do not do this from scratch but this will be based on an existing framework. To be more precise what you'll do and this may not be fully clear to you yet but hopefully it is in a few weeks you will implement a data flow analysis for JavaScript code and this will be done based on the Google closure compiler. If this sounds scary don't worry because you'll hopefully understand what this means in a few weeks. The takeaway message is that there is an existing tool the Google closure compiler which already implements most of what you'll need but you have to fill in a few bits here and there to actually make it work. The course project is an individual and independent project which means again you should work on it on your own you're not allowed to share your solution or really collaborate with other people and independent means that you'll work on this mostly on your own but as we'll see there are some milestones where you'll actually have the chance to interact with a mentor who is going to check your progress and answer any questions that you will have. So let's have a look at the timeline for the course project. So it will be published at the end of November. The reason is that at this point in time we will have covered the content that the project is about data flow analysis in the lecture so you then really know what the project is going to be about. At the end of the semester on February 12th you have to submit the project. So this is a strict deadline and what you'll have to submit here are three things. It's your implementation obviously some documentation of the results that you get and a report that describes what you've done what you found maybe also what did not work and any limitations you may be aware of. And then in the first week just after the end of the official lecture period we'll also have some oral presentations of these projects where each of you will give a very short presentation about five minutes on what you've done in the project and how you've addressed this problem followed by some questions by us. During the semester you'll also have three progress meetings and these meetings are meant to check that you're actually making progress in this project and to answer any questions you might have. All of this also contributes to the grading so let's have a look at how this will work. So these percentages here are percentages of the overall grade. So remember that the course project in total contributes 40 percent to the grade and these 40 percent are composed of four times 10 percent which are for the following. So one 10 percent chunk is for the progress meetings and for the final presentation. So the mentor that you'll have the progress meetings with and me during the presentation would basically check how well you're doing what your progress is and this will contribute 10 percent to the grade. Then there's another 10 percent which will be for your implementation. So this is basically looking at your code seeing whether it makes sense whether it executes the way it's supposed to execute and also whether it's somewhat understandable. So if you write completely cryptic code you won't get many points for that but if your code is doing well and understandable then you'll get these points. Then there are 10 percent for results which basically means that we will execute your code and try it out on a set of test cases to see how it behaves and if it behaves as expected so if your program analysis is really doing what it's supposed to do then you'll get these points. And then finally another 10 percent for the written report. So this is to make sure that you're able to also explain in English what your implementation is actually doing and why it is doing what it's doing and maybe also what it is not doing so any limitations it might have. Let me just get back to this point of academic integrity for a moment so basically don't cheat. Both for the exercises and for the course project any work that you submit must be your own. So this contributes to the grade and as in the written exam you have to work on your own because otherwise this is considered cheating. So if you work in some kind of group or if you commit any form of plagiarism like copying code from someone else maybe from a solution that someone has submitted in one of the previous years or any other kind of dishonesty then this will be punished as cheating during a final exam would be punished which means you'll fail the course and this may also lead to other consequences related to your studies. You are of course encouraged to discuss the problems that we ask with your peers and you can also do this in the Ilias forum that you've maybe already seen and that I'll talk about in a minute but you should not share or reuse any part of a solution so you're allowed to ask questions you are allowed to give answers as long as you do not give out the concrete solution or share specific code for example. All right so now we've talked about these four parts that the lecture is composed of let's now have a slightly deeper look at the actual content that we'll cover in the lecture. So as I said there will be 10 blocks of lectures and they are listed here so today we're in the first one which is introduction and basics and then there will be nine more of those. The first two introductions and basics what you see today and then what follows next operational semantics are basically foundations of program analysis and the rest of the course builds on that so it's important to get a good understanding of it. Then we'll have some lectures that are mostly about static analysis so analyzing the source code of programs without really executing the program in particular we'll have this lecture on data flow analysis which is also the basis of the course project. We'll also look into core graph analysis and you'll see what this is once we are there and then there will also be a lecture on slicing in which we'll do not only cover static analysis based approaches but a good share of them. Then in the middle of the course we'll have some lectures on input generation which is basically taking a program and trying to make it run by generating inputs that cover most parts or interesting parts of the code and here we look into two specific lines of work. One is random test generation or fuzzing and the other one is a bit more principled approach called symbolic and concocted execution. After that the remaining lectures are mostly about dynamic analysis so these are approaches that run the program and then analyze them while they are running. So specifically here we look at information flow analysis we'll also look at dynamic approaches for slicing so in the slicing lecture we look at both static and dynamic approaches. We'll have a lecture on path profiling which is a way to tell how often particular paths of your program are executing without imposing too much runtime overhead and then at the end we'll have a lecture on analyzing concurrent programs to prevent or at least detect problems like data flows and deadlocks. So looking at all this content let's also see how this relates to the other parts of the course so this is the structure of the lectures. Some of these lectures are directly relevant for the exercises namely those that you can see here so the first exercise will be on operational semantics the second exercise will be on data flow analysis and then the third exercise will be both on information flow analysis and on slicing. The course project will be mostly about data flow analysis but of course understanding the other parts of the lecture is also very helpful for the course project but the core of it is really about data flow analysis. A common question students are asking is whether there is a book or script that covers the material of the course and unfortunately the answer is no there's no single book or single script that really covers everything that we'll talk about in this course. No one has written this book yet maybe if I have too much time I'll do it someday but right now it's as it is for many master level courses so there are different resources and different kinds of material that you are encouraged to look at so one of them are obviously the slides of the lectures and the handwritten notes that I'm producing during the lectures which will be available along with the lecture videos. Then there will also be some papers research papers some book chapters and also some web resources that describe parts of the material that this course is based on and that allow you to look a bit deeper into some of these topics so I'll make all of those available on the course page and then you can have a look at them. Because this course is about program analysis an important question is what is the programming language that we'll use here so most of the concepts taught in this course are actually language independence so it doesn't really matter what programming language you're thinking of most of what you learn here applies to practically all languages that are that are used in the wild for many of the examples that I'll have on the slides I'll use one language because to show an example I need to pick one language and that language will be javascript so the idea is that yeah we pick one language that you that is relatively easy to understand and that many of you may have already seen so javascript happens to be very popular so it's a good choice for that reason it's widely used for client-side web applications obviously but also beyond that so for example on the server side with Node.js and also in mobile apps and even desktop applications at the same time javascript also comes with very interesting research challenges and my group and others have worked on addressing some of these challenges so it's also an interesting language from that perspective the course project as I said earlier will also be on javascript so the two languages related to the course project one is the language in which you'll write your program analysis and in which the framework that your implementation builds on is written and that does happen to be Java but then the language in which the code is written that your analysis will analyze that is going to be javascript so you basically write Java in order to analyze javascript code let's now talk a little bit about the schedule of the course so basically what will happen when and what do you have to do when because this is a virtual course things are a little different from the way they happen when the course actually happens in the university so for this course there are some asynchronous activities and some synchronous activities asynchronous basically means you can do it whenever you want and there are no hard constraints when you'll do it whereas synchronous activities are those where they happen at a particular point in time and you have to be there virtually there in order to participate and if you're not there at a given point in time then you'll miss this basically so for asynchronous activities there are obviously the lectures so you can download them and see them anytime you want and what is also asynchronous is your individual work on the exercises and course projects so it's your responsibility to schedule that time during the semester then in terms of synchronous activities there are three things one is the discussion of the exercises so as I said for each of the three exercises there is a discussion session which will happen in a Webex meeting and you should participate in this Webex meeting in order to understand what the exercise was really about and what kind of solution we were looking for the second synchronous activity are the progress meetings for the course project so you will have three progress meetings during the semester which will be one-on-one meetings with your project mentor they will be scheduled during the semester and again this is a synchronous one-on-one meeting so you really need to attend it in order to to not miss it and then finally there will be the project presentations at the end of the semester which are also synchronous so you need to attend them at a given point in time we will send out some messages in order to schedule these presentations and also the the progress meetings finally there's some deadlines during the semester in particular three deadlines for submitting the exercises and one deadline at the end for submitting the course project all of these deadlines are strict so we do not extend the deadlines there's no scenario where we will extend them so if you miss them for example if you do not submit one of the exercises then tough luck then you won't get the points for this exercise so try to make these deadlines in order to get most out of the course the best way to see the actual schedule is to go to the course page the easiest way to find it is to go to softwarelab.org the page of my group and then you click on teaching and on program analysis make sure you pick the right semester not one of the old ones and then if you scroll down you'll see the schedule of the course down here the schedule may change a little bit during the semester but I hope this is the way it is here just to let you know this is not set in stone yet we only know after the semester what the exact schedule was but this is what we plan to stick to so in the schedule you see three kinds of events one is the lectures they are marked with L then things marked with E which is everything related to the exercises and things marked with P which is everything related to the project the dates come in different kinds so there's some dates which are basically ranges so it's a it's a week and these are things that are recommended watch times for example for the for the lecture so this introduction lecture is recommended to be watched in the first week of the semester then there are some dates that are precise days for example for this one this is the date when we will publish the first exercise and this means it will actually happen on this on this day then there's some dates that are a concrete day and they are printed in bold so those are deadlines so those are the really important dates for you because if you miss them then you have missed the deadline so this is for the first exercise this is for the second exercise and another one for the third exercise and then finally the deadline for submitting the project and then finally some of these dates are printed in italics and they even come with a precise time and the reason is that these are the synchronous events that happen at exactly this time and where you have to attend through VapEx in order to really benefit from these events so this is mostly for the discussion of the exercises and also for the progress meetings again the discussion of the exercise that's a VapEx meeting for the entire course so it's all of you together whereas the progress meetings will be individual meetings one on one you and your project mentor so have a look at this schedule and make sure you understand the semantics of bold and italic and precise date versus just a range so that you get the most out of this course and also can plan your semester and know when you'll have to do what for any kind of question you might have or if you want to discuss any of the content discussed in the lecture or maybe you are not sure how to interpret one of the questions in the exercises or maybe that task description of the course project you should use Ilias so Ilias is this online forum that most of you have probably already seen where you can register for a course and then ask questions and and have online discussions because the course is virtual this is probably even more important than it usually is because this is the place where discussions are supposed to happen if I'm sending messages to all students I will also do this through Ilias so make sure that are you that you're registered for the course so that you will receive all these messages for example we'll send out messages there to schedule the the progress meetings if you haven't registered yet I think most of you should be registered automatically when you register for the course through campus but if you for whatever reason are not registered yet you can do this yourself just follow the link to the Ilias course on the course page using the link that you see down here if you have any questions that you feel should not be asked in front of everybody maybe because it's about your specific curriculum or maybe you're not sure whether this would be a violation of the academic integrity rules then you are of course allowed to also interact through email either with your mentor if it's about the project or directly with me but for any other questions please use Ilias so that we do not have to repeat the same answers over and over but that once one person has asked it the other people can also see it finally let me finish this part of the lecture with a very friendly warning so this is not going to be an easy course if you are looking for an easy course where with very little work you can get a good grade then this is probably not the right course for you but this is a course where we actually expect you to do the exercises and as you've seen they do contribute to the grade and where we also expect you to work regularly on the course project so just trying to finish the course project in the last three days before the submission deadline will not work and it's just a recipe for disaster so this is not recommended but that said I think the effort that you'll invest in this course is actually worth it so most students afterwards tell us that this was a great course because they had to do a couple of different things including a practical project and the usual lecture and final exam and that overall it was a really good experience for them good so this is already the end of part two of this first lecture I hope you now know how this course is going to be organized and what exactly is expected from you and also when it is expected and with this I thank you for your attention