 So, today we will look at the principles of software engineering, another very major area of research in both computer science and management. Why is this relevant? Is because you will now be embarking on course projects and a project is not an activity of the kind that you normally do in labs or the programming that you do in exams or while solving problems. A project is a much larger affair, is to be done by a team of people and offers possibilities for you to create an absolute industry grade software product on whatever small thing that you take up. We believe that it is an important part of learning, therefore CS 1-1 always has a course project. We will recall that in our distribution of marks, as many as 35 marks are reserved for the project activity. So, that activity will now start and as a precursor we will look at the notion of software engineering. I will then describe the course projects, what activities are to be carried out, evaluation, reporting process and deadlines, etc. The details of course will be put up next week because during the next week you have to do basically a selection of the project and finalize initial distribution of activities between team members. I will describe the project evaluation briefly. I have not stated here, but there are two very important announcements. One related to make-up assignment labs and the other related to make-up mid-same test because the mid-same examination has left a whole lot of people bruised. They have got very low marks compared to what they should get and traditionally whenever this happens I offer a make-up test. So, I will describe how that make-up test will be conducted, it will be conducted one week. So, first what do we mean by software engineering? You would have heard of various engineering disciplines, mechanical engineering, electrical engineering, computer science engineering, computer engineering, all kinds of things. When you apply engineering to the process of program development, it is called software engineering essentially. We will see what are the various activities. Whenever you undertake any activity, which is a composite activity combining a lot of people and efforts, there is a very significant component of proper management techniques and methods that need to be followed, otherwise it may end up in a chaos. So, we will see what are those processes. Those processes have been defined quite some time ago when it was abundantly clear that the software is gaining in size. You remember we had talked about LOC or lines of code. So, we are not talking about a 100 line program, we are not talking about a 1000 line programming system. We are talking about a 50,000 line programming system as a slightly non-trivial system. We are talking about 100,000 lines of code to 500,000 lines of code as a respectable software system. And we are talking about millions of lines of code as a respectable large system. And many of you may be participating in development of these systems, design of these systems and coding of these systems. And rest of you will be participating in getting such system developed for your own work in whichever field you are. Therefore, these systems have become an integral part of every professional's life and it is necessary to understand how these processes are defined and how they are matured over the years. We will not discuss the ER model, I will leave it for some later discussion. But I will describe what the functional models are, what are the user interface issues and more specifically a document which is key to the software writing actually called the software requirement specification document or SRS document. So far whenever you see a problem, you start writing programs. I had hinted to you that you must do some thinking, some paperwork before you start writing a program. In professional projects, not a single line of code is written if it is a, till the entire analysis and design work is completed, not a single line of code. Writing actually constitutes roughly 10 to 15 percent of the total activity of the software development effort. Obviously, your job is primarily to learn programming techniques. So you will not do 85 to 90 percent of other work, you will do large amount of programming work, but you must get a glimpse of what these things are. So let us look at the role of software. First of all, there is a classical characterization of software, system software and application software where the two major classifications, we shall briefly see what each of these are. Additionally, there is a emerging classification for two more things, one embedded systems and the second is web applications. The system software as it is called comprises primarily of all the software which relates to management of the computer system. So it does not do anything else except manages this system and permits programmers to exploit the features of that system. Therefore, even a programming language compiler is actually systems software because programming language compiler does not solve a real life problem. It does not, for example, balance your accounts or it does not add marks or find averages. It does not do any application. But without a compiler, it will be almost impossible for you to write programs easily which will do all these things. So therefore, that is considered part of the system software. So you have the operating system, you have the standard third generation programming languages as they are called C, C++, Koval, Fortran, Pascal, what have you, Java. There are additional developments and these developments, by the way, the generations of programming languages typically define the level of abstraction that is available to you as a power of expression. You could write programs in machine language but you will take thousand lines to write what you can write in five lines in C++. In exactly the same fashion, what it may take, say, five hundred lines to write in C++ can be written in ten lines of SQL or structured query language which is one of the fourth generation language. You should see a glimpse of one fourth generation scripting language called AUG at a later time in the class. So all these are called rapid application development tool. Please understand that for writing so many lines of code, so much time will be required. Now if you have to write millions of lines of code, you cannot take hundreds of years. You still want to do that project very quickly, as quickly as possible. And not every activity can be distributed amongst large number of people. So the total efforts required to develop software has also to be affordable and has to be limited. And therefore you need tools which will permit you to do development faster. And these tools to build software keep evolving. All of these get classified as system software. So in a nutshell, the operating system, all the tools that come with the operating system and the utilities that come with the operating system, all language compilers and any additional tools which help you to develop software faster. All of these is system software. Naturally, you and I don't write them. Typical computer science people who actually specialize in writing this kind of software would end up doing that. One advantage of system software is one group writes it. And thousands upon thousands of other application programmers can use this. As all of you are using Ubuntu, none of us has written Ubuntu. Somebody developed Ubuntu, somebody developed Linux, somebody developed GCC or C compiler. And thousands upon thousands of people can use that. So in a sense, after that development system software becomes a manufactured product. You just put it on CDs and keep distributing it and anybody can use it. It is not so unfortunately with the application software which determines business functionality. You'll recall, for example, from the mid-same exam paper where you have to maintain some information about banks accounts. Now that is only a very, very small part of what banks do. The functionality that the banks provide is enormous. You go for a car loan or a home loan, there's a loan processing. You can put fixed deposit amount, you will get interest. Interest will have to be calculated. Only millions of lines of code goes into what we call a core banking system today. Some of the most popular core banking systems, earlier they were all coming from the West, but today two Indian products are known all over the world for their equipment in solving business problems in banks. One is called Finackel, which comes from Infosys and the other is called iFlex, which is now part of Oracle, Oracle acquired that company. Infosys, of course, is not available for sale, luckily, so it continues to be an Indian product. This is just one example that I gave, but you take any information that is, you are familiar with, say, student information system. You have seen the ASC website, that is where you register, your records are maintained, how are records maintained, how, when I search for CS101, I get the complete list of all students. How, if you search for your roll number, you will get your registration details, you can update, modify, and updated and modified information becomes available to everybody. So somebody like you has written these programs, and they have become part and parcel of the operational activity. There are larger systems, such as railway reservation, core banking, I mentioned. There are also computational systems of very, very large magnitude in terms of lines of code. So simulators, for example. You would have heard of flight simulators, you would have played games with flight simulators. In fact, gaming software is another very, very interesting aspect of applications. But there are equation solvers. There are, you would have heard of genome sequencing, the huge effort that is required to do human genome sequencing, and that is a large computational system developed by several teams working across several countries together for many years. But today it is possible to do some sequencing, some significant sequencing in a few hours by deploying supercomputers. Just by putting a supercomputer, problems don't get solved. Somebody has to write programs which work, which don't bomb when you write FGATES and the file ends, and you still keep getting whatever funny things. Such things cannot happen in real life system. A typical life cycle of an application software anywhere between 10 to 25 years, typically 15 years. You already have to get rid of any software after 15 years. Once written it should continue to run. Any reason why your program should not run after 15 years? Sorry? Come on, come again. Ah, better programs come up. While that may be true for system software, better compilers may come up. But suppose a bank has developed a banking application, or ASC has developed students processing, which is very peculiar to IIT Bombay. How will a better students information processing program come up on its own somewhere? Who will write programs which are required for his or her organization? That organization only. And that is the difference between system software and application software. Application software is invariably handcrafted for a particular requirement. And only that group will do that requirement. Even when I spoke of banking systems such as Finnecker, it is not true that Infosys writes that software in every bank uses it exactly as it is. It is not true at all. Every bank has different processes internally. So that software gets customized. That customization may require two years, two and a half years of effort. And after that the software which runs in Bank of India is different from the one which runs in Punjab National Bank is different from one which runs in Bank of Baroda. Although all three of them use exactly the same code. But these modifications are done which are bank specific, where the bank's IT staff and associated consulting organizations such as TCS, HP, whatever. In such cases, the observation that better programs will come up is not entirely correct. It's not entirely wrong also. Better programs will not come up as a replacement of everything. But better programs will come up continuously. And why? Because I have some programs. I add business functionality, new business functionality, I have to write more programs. Some programs are doing certain things in a certain way. When better programming techniques come, people would say, I could improve the efficiency of this program. So I would write a better program. But that better program will come as a part of the maintenance activity of the current software. What happens is that over a period of 10 years or 15 years, these modifications or additions which are made to an existing software system become larger than the original system. And many times ad hocism creeps in. Somebody says, I quickly need this report. So somebody writes in this schema, this whatever, files this thing, this thing, that thing, whatever. And then somebody else modifies it. And people change jobs. So you have written a program which is five years later, I look at it. And I am required to modify it to include functional. Typically you know what happens in such cases? Because I am also a good programmer. I presume that you must have been a bad programmer if that program doesn't work properly. So I tend to rewrite most of it again. But since your program is working, I leave it alone. So the software size increases with two different components doing the same thing being present. This happens in last year. So therefore, 10 years, 15 years, 20 years later, an application software becomes more difficult to maintain to continue to do. And that's the reason why you say enough is enough. I will rewrite the whole system. There are other reasons also. It is not in terms of better programs but better system software, better hardware and better programming languages may come up. To give you an example, the same banking systems were implemented in the decades of 60s and 70s using a programming language called Koval. This is a third-generation programming language. Large systems were developed because banks have been computerized for decades. What happened is that relational database, a completely new phenomena which permitted a fourth-generation programming language like SQL to be used jointly with conventional programming language such as C, Fortorn, whatever, whatever, people found that developing systems was much easier and the systems that you develop were far more rugged. And therefore, they decided to rewrite that software. Today, almost all of the banking software or such large business applications are written using databases as SQL and some programming which could be in C++ or Java. And that some programming may be functionally doing only a little thing. But in terms of size, it is much larger than the size of the SQL code because SQL is a fourth-generation language, C, C++, Java, etc., third-generation. To conclude a long story short, generally there is a life cycle, it is variable and it is not a universal rule of thumb. It all depends upon an individual organization which is using that software. Whether, at what point in time, I should say I should ditch everything that I have and start doing a new thing. Please remember, start doing a new thing means roughly spending about two to three calendar years, hundreds upon hundreds of person months to rewrite that software. While you are doing that, the old software must continue to work because your business cannot stop. So it is a hard process. Embedded systems is another area which has become increasingly important ever since the electronics has permeated into appliances and gadgets. So you take today's televisions, refrigerators, washing machines, digital watches, cameras. Each and every one of these has tiny computers inside. The software which drives the functionality of these gadgets, such as washing machine, washing cycles or digital card watch, automatically changing the date and whatever, maintaining time, refrigerator, automatically cooling, heating, whatever, not heating really, cooling to different levels. A car, which is being automatically controlled in terms of the most efficient injection of fuel into the cylinders. Since all of these computers are inside these gadgets, the software which is written for such computers is called embedded system because the system entirely is embedded. The computer, the small miniscule operating system, everything, everything along with the program, which is permanently written, it is in read-only memories. That program is, you cannot every day load a program in your car's computer. And of course, you cannot have bugs in such programs. Imagine if the car starts moving backwards when you actually want to move it forward. You cannot afford such things. So embedded systems have very special requirements. First of all, the computers are tiny, the memory is tiny, the code has to be compact. And what code I am talking about? Not the lines of code that you write as a source code for C++ or C, but the translated code. It is in this context that I had asked you a question. When you write a program, say prog1.cpp, you will see a size of that file, which is roughly the number of bytes in the source code. But when you say C++, prog1.cpp, you will get a dot out file. Have you ever wondered about the size of a dot out file? Has anybody seen what is the size of a dot out file? See, your curiosity ends at doing whatever is given in that sheet for the lab. Now onwards, you should be curious about this. Go and find out. Typically, if the size of your program is 1 or 2 kilobytes or 3 kilobytes, the size of the compiled program with linking with all the libraries, etc., could easily become 1 megabyte. We don't care because my computer has 64 megabytes of memory. So I don't bother. But when you embed a system inside a car to control the carburetor, then the size of memory that you have may be only 32 kilobytes. Your translated program will not fit there. So you need not only spatial translators, spatial compilers, but you also have to be careful about you have to count every byte of the translated program. Most embedded system software people therefore develop an expertise not only in higher level programming languages, but even in the assembly language and machine language so that they can tweak the final problem. Changes in versions are difficult. You have sold 20,000 cars. And then the team, suppose you are part of the embedded software team, you discover, oh my God, this problem should not be solved like this. This way, the consumption of petrol is not optimum. I must add some more parameters and some calculations. You do that modification. In your labs or in general application software, what you do? You do the modification and you simply run that program. Even in banking software, you say go and install it on your server. The server will run you. Now can you say go and install it in 20,000 cars which have already been sold? And how will you install it? The computer is not visible with RS-232 ports and a screen and a terminal and everything. It is deep inside the engine somewhere. You have to be therefore doubly careful. And there are special mechanisms of deploying these software changes into embedded systems. In fact, with the advent of wireless networks, increasingly in new embedded systems, wireless chips are being also included. And you can actually download the new version of the software automatically using wireless. Such gadgets have started coming. As you go into your professional activities, you will find more and more of them. And in fact, embedded software will become as easy to handle as your general software. The point is going forward, embedded software will become more important than the general application software because it will touch every aspect of human life directly, because it will be there in every household, with every person. In a nutshell then, if such kind of software has to be written, I did not mention about the web applications, but you are familiar with web applications. In fact, any time you go to the Moodle, what you are doing is you are doing a web application. A web application is not something independent. It actually has a backend, which means it has servers, which stores database files, etc., etc. And it has a front-end. A front-end will be there even for any other application. But for a web application, the front-end is usually based on a browser. And anybody having access to any browser can access that front-end. So there are something special about that, and that need to be taken cognizance of. There are therefore separate tools which are available to build efficient web applications and therefore that becomes a sort of different classification. Now, software is developed or engineered and not manufactured. That is the fundamental difference. Except for system software, which is also developed. An operating system is developed. A compiler is developed. But it can be manufactured in the sense of distribution. So you can make the compiler runs and put it on a CD or put it in some file, tar file, download it, that becomes a compiler. Applications software, unfortunately, is very specific. Take the IIT system. The student's information management is not done by a single system, which is used by all the 10 or 15 IITs. Every IIT has its own system. The only common system is joint entrance exam handling or gate exam handling systems. Those are developed jointly by these IITs. But those are not used, for example, by Mumbai University or Pune University. So this is an example in our academic community. Exactly the same is true about every company which does any kind of business. Take manufacturing. Two companies which are manufacturing certain chemicals. Each one of them will have their own processes of them. There is a common package software used in manufacturing called ERP or Enterprise Resource Planning kind of software. A big name is SAP, for example. There are several other names. But again there, just like in the core banking system, you can't use an ERP package as is. It takes years to modify it, customize it to what you require. In short then, software has to be written or engineered or developed. Now hardware does wear out. You may have to replace the hardware. But software does not wear out. And therefore technically a software written even 50 years ago should even run today. As long as there are machines which can run the machine instructions of that compiler. The only thing is you may not be able to make changes in it. As I mentioned, it may become unmaintainable. In that sense it wears out. Since most software is custom built, there is a limited role for package products and they need customization and integration as I said. In general then software development is a major activity. And the nation should be thankful for that being a major activity because most of our foreign exchange earnings, the major lot comes from export of goods. But the second major lot in fact as comparable to normal exports comes from services, mainly IT services. A large number of programmers are writing programs for maintaining, modifying, updating or developing new systems for the whole world. Because Indians have proved themselves to be very good at that task. And therefore this task has assumed greater significance of developing professional grade products which will stand scrutiny at the global level in quality. It becomes very important for us. So we define the software engineering. The software engineering is there is a definition by IEEE. Somebody has heard of IEEE? It's an institution of electronic and electrical engineers. It's a professional society. It's a global professional society started in US. It's just like we have for example IET or Computer Society of India. So it's a professional society and it develops a whole lot of such standards for usage in the industry. So there is a standard definition in 1993 which says application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software. What is systematic, disciplined and quantifiable approach? That is engineering. Engineering is not done haphazardly. When you do anything haphazardly and you do it well it will be called a piece of art. But when you do it methodically there is a difference between piece of art and piece of engineering is that piece of art is not replicable. Your art will be different than somebody else's. But engineering principles if followed the entire methodology is replicable. So I make a piece of equipment in my factory as long as I have followed engineering processes somebody else making the same piece of equipment in say factory in Punjab would have identical characteristics within the tolerance. That is the beauty of engineering. So engineering is essentially analysis, design, construction that is writing code, verification and management of technical or social entities. This is a broad definition of engineering. When you apply that engineering to software it becomes suffering. Now any engineering has methods and processes. So what are the processes associated with software engineering? These are the various activities that we undertake when we develop software. The first and foremost is functional specifications. For you a functional specification is a question or a problem which is stated by me or someone else. So when you read a problem in the book somebody has already specified what you have to do. In real world such things don't happen. A functional specification by the director of an institute for example may be given to a company like TCS or IIT's internal team which says develop student information management system. Imagine you getting a question like this in an exam. What will you answer? This is nothing, this is not clear at all what you want to do. Information system is what? So you will have to struggle hard to understand exactly what is required and write it down properly. That is the major step in any real life software engineering. Major step. So functional specification is the first thing that you develop from a very crude definition of a problem. In this particular instance example that I gave you say all right oh you want to develop student information system 5. So I will ask the director who are the people who deal with students. So the director will tell me dean academic programs, various faculty members, technical people in the lab, academic office clerks and of course students themselves. May be hostel, coordinating unit work. What I will do is I will start meeting these people. Ask dean academic program what do you do? Then he will say something. I will ask a faculty member what do you do? He says I get the role list from academic office. Then I will go to academic office. What do you do? When students come we ask them to fill up this form they submitted and then we ask them to go to hostel. Oh there is a hostel. Who handles hostel information? Then I will go to dean students affair. Can you not see that if I am not aware of the domain at all then I may have to spend as much as one month figuring out what information is required to be maintained. And that is why software engineers automatically also become experts in various domains. All domains for which they handle information. They have to learn that. System engineering is actually associated with finding out which system will do what. You are developing software which will run on some servers. But other than that there are many other things that may be required. Manual recording will be required. Manual filling up of form will be required. Manual filing of some information will be required. A system engineering means which part of the system does what. At that stage a feasibility study is conducted. Is it feasible to develop software for this? Technically of course it is feasible. The feasibility here means affordability. How would you like if I told my director when he says Phatak we have to develop the student information system. I do everything and I say yes it can be done. The cost will be about 23 crore rupees. He will say thank you very much. I have a cup of tea. I will maintain information by hand. So the system has to be affordable. And that is why the feasibility study is important. And affordable not only in building but in operating also. Then you do allocation of hardware, software, people. You say this job will be done by hardware, this job will be done by software, this job will be done by people. In your projects you will have only two allocations. Job which will be done by your software and job will be done by people who use that software. So users for example will have to feed in information. They will have to maintain some data in some text files. How will they know about it? You have to prepare a user manual. That is part and parcel of the development process. Then you do a rigorous system analysis. I will describe what are the activities that you do in analysis. Basically you find out what data has to be handled, how it is to be handled. Then you do a system design. You think of algorithms by which you will solve those problems. And it is at this stage that the pseudo code is written for each and every algorithm. In large software you do not write definition of design in one shot. By the way the system analysis results in a document called software requirement specification document. Each one of you will have to write one for your project. It would easily be a 10 to 15 page document even in small projects that you will do. In real life for large projects a system requirement specification document often runs into 8 to 10 volumes each of which is 500 pages big. That absolutely specifically states for example for student I will capture student's roll number. It is not adequate to say roll number. I will see the history of how roll numbers were meant. Somebody tells me 9 digit roll numbers and I take it to be true. And then when I implement the system suddenly a fellow comes up who is still around who had a 8 digit roll number. Another person comes up I have only a 7 digit roll number. I say no no you have to have 9 digit roll number that is the rule that is not adequate. So the analysis has to be in depth and must cover a period of time governing that particular activity. It is at this stage that the coding starts. Coding means actually writing problem. Any real life project if it is a one year project at least 3 months are spent in analysis and preliminary design. And the final design will be completed with additional 3 months period. It is only in 4 months out of that one year people will be writing code and those people who write programs they will never interact with end users. They will have to work exactly as per the design specifications given in the document. Imagine a car manufacturing facility a mechanic who is producing let us say some connecting rods or some part of the car using a lathe and something. Do you expect that mechanic to be able to go to talk to car designer every evening? No. Car designer has done the job. There are specifications. There are diagrams which have been written engineering diagrams. There are processes which have been defined and he is supposed to work exactly as per. A programmer actually has to do like this and therefore the specifications have to be crystal clear. Writing those specifications which are invariably written in a natural language is a tough task because natural languages permit a lot of interpretation. You write something, he reads it, he understands something else. Then he writes a more elaborate version with that something else meaning then I read it and I understand still something, something else. And finally the poor user who talked to you later on when he gets this software he will say what did he do? This is not what I intended. So you can see there could be a lot of confusion and therefore precision is highly required. It is at this stage where you do the testing integrate various modules and say my system is ready. Your system being ready specifying by you specified by you is not adequate. The end user who asked you to do this job in the first place will say let me accept it now. For acceptance he will prepare sample data run through various screens run various queries see various reports and confirm that the system is working correctly. So that is called user acceptance and then the system will be deployed. What you see in form of student information system that is managed by ASC for example it has gone through all these cycles and as we speak modifications etcetera etcetera keep happening there. Even a modification has to go through the same cycle all by small. So somebody says the CPI calculation rule has changed by senate. This has to be implemented. So there will be a change request generated which is a mini specification of problem. Then somebody will do an analysis which means look at all the programs which calculate CPI or affect CPI. What is to be modified? So there will be an effort estimate. This may require 15 days of time by three programmers. Somebody allocates that resource. Then after 15 days three programmers have done rigorous testing is done. Then it is integrated with your system and again tested. And only finally then it is relieved. So these are the scales of time that are required when you talk of real life software. Software project management is an important aspect. Any project management in fact is important. Management in general is an area where Indians are traditionally weak. And that is because not because we are incapable we are actually quite capable but almost all our processors as part of our upbringing have been ad hoc and individualistic. I work in a different style she works in a different style he works in a different style. When three of us have to work together it takes a lot of time for us to come to a conclusion that this is the common style of work that will fall. And many times things are understood in mind they are never recorded. So much gap. And therefore ad hocism comes. The developed world does not work like that. Management processes are very rigorously defined written down and followed. And these go to any extent. So let me give an I don't know whether I have this example with you of a of a manual process which a clerk in a bank is supposed to do whenever he interacts with a customer. So Professor Gayathoddy happened to read a work card in one of the Indonesian bags when he had gone there because he went there twice and twice that fellow two different people did the transaction and said thank you very much for banking with us. So he inquired with the manager and manager showed him that card. You know what that card stated the instructions? Instruction one. Take the instrument given by the customer that is check or draft or whatever and keep it to your right. Instruction two. Keep a paper weight on it. These are written instructions. Almost all Indians will assume that to be automatic and common sense. But without that instruction somebody will keep it to the right somebody will keep it to the left somebody will keep it in the pocket somebody will keep it under a register So errors are possible when you don't follow exact process that is what engineering is all about. Software teams have to be formed coordination and communication between those teams is a big problem. You will soon discover when you are a batch of 6, 7, 8 or 9 students conducting a single meeting with all 8 present you'll have to do that once a week at least even if it is for 20 minutes but you will find that you will waste at least in the first two weeks as much as two hours assembling everybody for those two because people don't keep time you arrange for a meeting at 8.30 sharp in let's say hostel number 4 lobby at 8.30 sharp probably only one person who stays in the room closes to that lobby appears nobody else appears we are very discursions to our colleagues in NET let me tell you that this is one instance this is one opportunity where you will learn the meaning of discipline and not for somebody else for your own sake these are the things that you need to learn communication how do you communicate quickly emails you will have to have an absolute compulsion of reading emails at least twice a day if you are doing a project at least twice a day otherwise communication and coordination will not happen the software project management is often based on lines of code and an analysis major says function point analysis will not go into the details of that roughly what it means is larger the size of the project larger will be the number of people required at least during those activities which can be done parallel but analysis and design has to be done by few minds so even if you have six or seven people in the team it is best to get just those two or three who can think about larger issues and who are good in crystal clear thinking and writing down those are the people who should do analysis and design there is nothing wrong if I cannot be as good as you for example in this I should accept it if you are better better you do it because if I do it I will chew up the whole project of course there should be inputs from every member of the team because all of you have to understand how this process runs there are specific models to major process maturity the most significant model which has been adopted by the whole world has come out of a software engineering institute this was developed many many years ago in karnag malan university the karnag malan software engineering institution is very famous they have developed a model for called capability maturity model see different people have certain capabilities and these capabilities mature as they do more and more projects and this maturity then results now this capability maturity model has been constructed at several levels and depending upon which company or which group of professionals is at what level a number is given so somebody has level 1 somebody has level 2 somebody has level 3 somebody has level 4 5 is the highest level out of these there are various other models that have been prescribed for different aspects of software development process so they are called C M M I etc etc not going to those details but every group is always at some level or the other you will be glad to know that amongst the first companies which achieved C M M level 5 where Indian companies way back the maximum number of software development companies in the world which are at C M M level 5 exist in India its a matter of pride for us so it is not just the minor work that is being done by Indian companies for the world its the absolutely top class when you do your projects you will be learning to get somewhere generally you will be described to be at C M M level 1 when you start so understand what is C M M C M M level 1 which is called the initial level processes is ad hoc even chaotic very few processes are defined you won't even define how to conduct a meeting you won't define how to write minutes you won't define what documentation is to be right in which style you will learn soon to define that some of which I will help you by giving you sample definitions but then to adapt to these definitions to imbibe these definitions and to follow those definitions that is what is following process so success depends entirely on individual efforts and this is the worst model is the level 1 model I will not describe level 2 level 3 level 4 level 5 those of you are interested this general knowledge on the web you can go to web and ask for C M M level you will find out how these are defined unfortunately we have categorized this whole study as a part of management study and since management is not engineering it is not in our syllabus and therefore we don't study that is nonsense and the biggest each one of us has to study whatever is required whether it is management whether it is biology whether it is styles whether it is economics or whether it is suffering so you will have to learn everything about something and this gives you a chance to do the classical system analysis this understands the software requirement what functions your program or software is supposed to handle and then you specify that functionality you specify interfaces interfaces means there is a module which collects data from users and puts it in a database file there is another module which excesses data and updates it the first module is supposed to do verification of data and put it there now obviously suppose you write the second program I write the first program both of us must agree on the common definition of this database file otherwise what will I write and what will you read will not match this is one example of an interface between two separate software modules your entire system may have to interact with something else you like to write a system for collecting fines from students for library but the library enrollment itself happens somewhere else so they will give you an enrollment file you must understand what is the format of the file because your system will have to read that file and take the data in so these interface definitions become very critical the rules which govern the values of data and rules which govern the processing logic as I gave you an example CPI calculation has to be done exactly as seen it as specified not other during the system analysis is something that you will be doing in the first phase after deciding on your project you will model first of all you will after you done the function specification of the system what is it supposed to do you might develop a game of sex and ladders you might develop a project for finding out various solving life on time equations you might do a right you think I will come to how you will select your projects but having selected a project you have to define what functionality it will do and then you have to say alright once this functionality is implemented how will anybody use it so there will be capturing and validation of input there will be queries that people would like to make to your system suppose you write an examination result processing system somebody has to enter data somebody has to query like you query on ASC you will have to build such facilities in your system so you have to model reports there could be special interfaces embedded system will have interfaces which could be even electronic interfaces a signal is coming from a sensor in a factory an electronic signal you have to actually capture it sample it read it and act accordingly so the processing requires interface to an electronic signal these are special things so these are variety of things that are part and parcel of the system analysis work an SRS document that you will write will generally contain an introduction it will contain the problem definition for your project will contain detail functional specification then it will contain description of data input and output any user interfaces that you will have to build what kind of screens etc interfaces to other systems if any which will generally not be there but at least one interface will be there namely the deployment of your entire software what is the directory structure suppose I take your project from your computer and load it on my computer will it work exactly as it is it may not because you might have certain files in some directories it may not exist in my machine all of this actually becomes an interface to the operating system or interface to the computer system what is the acceptance criteria when will someone else say you have completed your job as you yourself described and finally there could be appendices containing details you will be doing only a glimpse of this kind of thing as I said you won't be writing 5000 lines of specification in 10 volumes but you those 15 pages that you will write you will find that it will take at least several hours of effort with editing reviving writing it is not an exam paper that you write whether teacher is implicitly supposed to understand whatever you have written in English this is something which is going to be read by someone else and the design is going to be based entirely on that document nothing outside so documentation becomes a very very critical part of this application these course projects offer you a chance of doing something realistic first in the process you develop industry grade project currently when you open a file you assume file has opened when you read data you assume that it is correct that is because those are the examples that you have solved and that was necessary because you are learning the basics of program now you are learning the basics of industry grade software nothing can be assumed anything can go wrong has to be the only assumption and anything going wrong has to be guarded against if a program has to work with correct input guaranteed it may take let's say 100 lines to do some functionality but if a program has to work even if absolutely absurd data values are given and yet the program should not bomb and yet the program should process whatever correct data you get and point out errors wherever the data is not correct then the program becomes 500 lines instead of 100 lines 400 of those lines have to be written by you to validate this do this give a error report put this in this file put that in that file that is the donkey work that you will have to do to make a program industry grade these projects are open ended project so what you have to do is not necessarily well defined obviously you have to work in the constraints of this being one course out of several courses that you are doing this and we have hardly one and half months left so that is why the activity that you will do will be loosely defined but you will have to define it in the first two weeks from next weekend next one next teamwork will be very important and therefore efforts must be contributed by every student there will be two stage submission and evaluation process stage one will have problem definition and the analysis and design of the algorithm you may include sample code if you have written it just for the trial basis but no actual coding is expected to be done in this stage at all like professionals don't write a single line of program unless they have completed these actions and you will submit an SRS document with a draft user manual why draft user manual later on when you write programs and test them you yourself may find out that this activity may be done better by user in this fashion so you may change some part of the user manual first two of course you will do complete implementation write the code the complete code explanation final documentation everything this is what the two stage process would be efforts must be made by each individual member which will naturally go into the evaluation I will tell you more about evaluation in a short while in this you should learn the basic principles of project management believe me if something remains with you as most important in your entire career it is more likely to be the project management that you discover and learn in the process of doing this project it is at least as important as any other technical knowledge that you will gather from this place because that is what will decide whether you successfully competently and in time and in cost can manage to do your professional activities later on many people you would have seen they do a management degree after completing their engineering because they suddenly realize they don't understand those processes this is your first chance to learn these things better learn it well you will learn professional programming style you will learn to work together in groups towards a common goal you will learn to discuss you will learn to design you will learn to document, you will learn to review none of these things you have done so far in a programming course so far you have learned programming most importantly you will learn to take decisions and you will learn to meet deadlines deadlines are not only for assignments in an academic program deadlines are there in the world everywhere coordination so here is the stipulation a lab batch will work on an allocated programming project and your batch TA will be your mentor for the project of course there could be additional mentors for example in every lab we have some senior TA's around in case of any problem that you and your TA jointly face you are most welcome to talk to your senior TA in a group of consultants which I will make available and I will personally be available for occasional discussion but each batch should divide this into multiple teams it is left to your TA and yourself but it is best done so you have a 6 people batch divide into groups of teams of 3 if you are 8 people batch may be groups of 4 9 people batch may be 3-3 and something whatever you can take a call on this or rather the team the more difficulties for the team members to meet discuss decide and so on each team should have a team leader sort of you nominate amongst yourselves and the team leaders of as many teams as you have in the batch will automatically become coordinators for the whole project jointly the regular meetings and discussions have to happen for the first time I am making lab attendance compulsory now I observe that when you are being evaluated through lab assignments I did not insist on compulsion but here it is compulsory why? because I am not sure that the additional meeting per week that is slated will happen correctly and precisely at least in the first 2 weeks till you fathom out the coordination issues till you fathom out that people have to come sharp at that particular time to meet and discuss so till you do such type the lab attendance will be compulsory some discipline has to be forced on us to be followed in a group project of this act how many of you write diaries? very few majority of people don't write so again another Indian problem we don't write diaries and that is why most of our history has been written by others if we wrote diaries we would have been documenting history whatever you do elsewhere for this course project diaries have to be maintained there is no choice I will describe the diary format for the next week the diary will only contain the discussions that you had for the selection of the project but from next week after that when you actually start working of course those of you who are interested can start maintaining project diaries from now what we need to capture is how many minutes or hours I spent on a certain activity on a daily basis on a certain day I may do zero thing about a project against that day it will be zero zero zero on a certain day I may spend only 15 minutes discussing with one person certain issue both our diaries should have 15 minutes under discussion and the name of the person that we participate in there cannot be any verbal discussion unless there is at least one line recorded somewhere about that discussion which is called minutes of the discussion this is absolutely these may appear trivial but very important process of management some of the nature of the work that is described here I will give you the exact quantification most probably these will be the thing discussions, design programming, testing documentation or report writing and any logistics and if you do anything else about the project which is not covered you cover it under miscellaneous what is the advantage at the end of the project if you are a seven member team for example and each member has this diary by adding up or summing up the total number of minutes or hours that are spent under each activity by each student you will get to know what is the total amount of person days effort that you have spent on this project out of that you take out the effort spent on actual programming and then you will realize what I am saying that programming will constitute only a small percentage of the total effort when you are building an industry great system but I want you to learn it for yourself and of course that quantification is essential because marks would be given not only on the quality and the quantitative nature of the program that you have written but the efforts that have been put in mind so each student will maintain a project diary which will have daily entries I will notify the format and consolidated entries are to be uploaded every week is a modification from last year I am doing where last year I had said that you will submit your diaries with your final submission and I got beautiful diaries very nicely constructed they are so beautifully constructed that they must have been hypothetical now we don't want that because I don't benefit from those diaries neither do you you might get one mark more or one mark less here but you don't learn anything if you do that so fudging is useless and therefore you must maintain these diaries so these diaries must be maintained every day by the student and the consolidated entries for a week must be uploaded for the entire team I will describe the formats for this submission schedule I will notify it on the Moodle there will be weekly diary submissions there will be stage-wise submission schedule and of course stage-wise evaluation process I will describe all of this in the Moodle one important part of this evaluation which I wanted to discuss with you is that out of 35 marks 10 marks are to be awarded by yourselves 10 marks are to be awarded by yourself 25 marks will be awarded based on the project reports the quality of the project, the quantitative nature of the project and the viva that will be conducted for the whole group so these marks for the project will be awarded for the group let's say I am a member of group 21 so if the group gets let us say 21 out of 25 then I will also get 21 out of 25 each member of the team gets 21 out of 20 if the group gets 17 I will get 17 if the whole group gets 0 I get 0 no matter how much I have won if the group gets 25 even if I have been a sleeping partner I will still get 25 that is the advantage of being part of a group you swim or sing as part of the group but the individual efforts must also be factored into who knows how much individual efforts have been put in I know my efforts best nobody else does but I need to record it because there is an evaluation that is why I must maintain diary second I can say that out of 10 marks I deserve 8 marks but I must be able to convince my peers that I do deserve 8 marks that is why the process will be at every stage you will allocate marks out of 5 at the end of the stage there will be a peer review meeting of the lab batch and the batch members will discuss these individual marks and at the end of the review you have to convince and be convinced that the final marks are correct reflection I had introduced this last year into work very successfully I have had instances where somebody was given 0 marks and that person admitted that he deserves 0 because he did not do anything in the project you see you can fool me during a viva by going to a friend previous night and saying and then home it out something and I say okay reasonably good 3 out of 5 but I cannot convince you when I sit in the peer group you will say you never showed up and therefore convincing your peer group is very difficult I also want you to learn something very important in life from this process rest of your life you will actually end up continuing to do self evaluation and continuing yourself to prove to your peers there won't be any exams and marks in life and this therefore is an important attribute of life I hope you learn it I have found it to be most successful even however there are always some temptations at the individual level I say I give 5 out of 5 and suppose the members are all my friends I say please I am not doing well elsewhere 5 marks in life and suppose you say yes then there is a counter it's called Fatak's counter strategy which says I will randomly sample a student from every batch and I will conduct a rigorous viva if during that viva I find a discrepancy in the efforts and contribution and the marks given then the marks will be reduced suppose I have given myself 5 out of 5 and I am viva in this fashion and that viva results in me getting 1 out of 5 4 marks will be deducted from every member of that team for not conducting the peer review process professionally now this is a random thing so you may presume that I may not catch up on such a random person but that's a risk you have to take so you will also learn risk taking whether to take risk or whether not to take risk my my sincere advice to you is please don't take risk I have been teaching here for 40 years I am generally very good at sampling I think I will leave it at that alright happy programming thank you