Articles

Lecture – 1 Introduction to Software Engineering

May 21, 2019



for this lecture is introduction to software engineering let us first see the outline of this talk we'll begin by looking at the nature of software projects why they are challenging why very often the projects are not successful then we will see how an engineering approach can be helpful to us we particularly look at engineering projects in other domains not necessarily only software engineering and see how we can learn from them after that we will talk about software process will define a typical step in a software process which can be helpful to us in developing large software systems will then define what are the characteristics of a good process and we look for such a good process for development will examine waterfall model for software development will also look at some of the other well-known models and finally we will briefly touch upon project planning you will see more on this in another module so let us begin by the nature of software systems now all of us have encountered software systems and we and we see them in a variety of applications you see them everywhere in day-to-day life the different types of applications you encounter may be in business domain in engineering domain or they may be scientific applications basically the point is that computer software today is touching all aspects of human life now these software applications may be of different categories they may be very simple or they may be complex they may be meant for internal use within an organization or they may be meant for public use such as the railway reservation system that we are all familiar with in fact with the example of a very successful software system which is of the public usage category or the software solution could be something for a very single well-defined task such as say payroll or it could be an application which covers all functions of a business organization that means it could be an enterprise-wide software then you can have a software which functions from one location or it may be a distributed software solution software solution may be designed for batch operation or it may be a real-time it may be meant only to give out information to public or it may be a mission-critical so you have a range of software solutions and it is a very important area because software is now used in almost all applications now there are major challenges in developing software what are these challenges and why do we have these challenging situation so developing large and complex software is challenging because firstly it is very effort intensive you have to organise the work very meticulously high cost is involved so in case the solution is not successful the entire investment goes waste it also can take long development type then we have to take into account the changing requirements of the users and finally there is a high risk of failure and this risk may be in terms of variety of aspects the users may not accept the solution it may not meet the performance or the solution is such that it is not possible to maintain it up to date so these are different challenges in developing large software projects we must realize that developing a software is quite different from developing one time program which we typically develop as a student or for ourselves we just develop try it out see if we get some useful results and throw it away we are not talking about software solutions of this kind we are talking about software solutions which are of long duration they give very important service to people or organizations and this is what will be the focus of software in our course now when do we call a software solution to be successful basically software projects have not always been very successful the success rate in fact is much lower compared to the success rate in other engineering domains now when do we consider a software application to be successful now these are the different criteria on which we will say that a software developed by somebody is successful firstly the development should be completed now that sounds obvious unless the development is completed the software cannot be used but this is a reality that very often the projects are abandoned in between and they are not completed now having completed the software then the other criteria are that the software should be useful it should be usable and finally it must be used this is what it really means is that the users would find attracted to the solution that you are developed and they will be keen to use it in their day-to-day functioning what what all these criterias are implying is that besides being useful the software should also be cost effective and should be maintainable the point we are making is that software has a fairly long life and it needs to be maintained it should be kept up to date just like we need to maintain other equipment it is also essential to maintain the software so only those software solutions which are usable cost-effective and maintainable would be considered successful by any user now what are the reasons for failure there can be many reasons the first is the slip the schedule the software is not ready in time or it is becoming too costly to complete the project and it may therefore be abandoned in between it does not solve the users problem if the software development has been completed but the users do not find it useful it will not get used so it is a failure the software may be of very poor quality it may not be maintainable so these are the different reasons for failure and what leads to such problems primarily the main reason or the important reason for such problems is the ad hoc approach to software development very often we assume that it's so straightforward you have to just sit across a machine and talk to the user quickly understand his requirement and start coding now this is not the way to develop large software projects you need to understand that such approaches are likely to are very likely to lead to failures so let us see what these reasons are very often there is no planning done for the development work right so when a project is undertaken we need to define different milestones how the development would be completed step-by-step deliverables to the users are not identified there is a very poor understanding of user requirements what exactly does the user expect from the software there is no control or review in fact for any large project is very important that we control its development very systematically we review the progress systematically because we are committing lot of resources we are committing lot of cost and time therefore it is very important that we control and review the progress continuously of course the reason for failure could also be technical incompetence of the developers they need to understand the changes in technologies the new techniques and tools which are available for software development so the developers also need to keep themselves up-to-date with the latest trends and technologies finally there is another reason that the both the users as well as the developer have a very poor understanding of the cost and effort involved in large software project so these different types of reasons basically which is implying some kind of ad hoc Ness in software development these are the reasons which are typical for failure of a software project now we we see in day-to-day life that there are many other successful engineering projects these are large projects and they carry out typical functions which are requiring a large effort in development so some of the projects which are mentioned here you can see that they are very common and they are very successfully completed for example these projects could be building large bridges dams power plants even an aircraft missiles these are big engineering artifacts these are big engineering projects and they generally you see that they are successful so what we would like to see is what is it that these other disciplines have which we need to learn and also apply for developing software now what is common here is an engineering way of doing things what does this engineering way consists of basically what it emphasizes is that we must go through a cycle of defining what we want to do build what are the functions and artifacts should do how to design it and then we should develop it so there is a specified design develops I which goes through the process and which leads to the development of the solution so an engineering approach consists of developing something which meets the specifications efficiently cost-effectively and at the same time they ensure quality so an engineering approach has these three very important aspects namely that an engineering solution is prepared with some specifications in mind then an engineering solution must be cost-effective it is a responsibility of developers to ensure that the project would meet the specifications cost-effectively and also that we have good quality built into the solution so there are some scientific principles in every engineering domain that we must apply to arrive at a good solution so engineering approach basically means that we should have a well-defined repeatable and predictable approach large projects will benefit by a very systematic approach which should be repeatable so that if we are successful once then the same approach the same methodology can also be used in another approach any another project and we also will have a very high probability of a success so repeatability predictability are important characteristics of an engineering approach now large projects where we have large number of people funding involved they need to be managed and the scale makes a big difference compared the compare building of a house if you are building a very small house maybe a hut or you are building a two-storied house or a 50-story apartment building it is a question of scale the projects are becoming larger and larger and therefore you are committing more resources more people more cost and therefore it becomes very important that these projects are handled systematically and we do appropriate management of the project so large projects have to have a good systematic approach the project itself requires management quality is of course important and what does it relate to quality relates to failures obviously so something that we design must not fail it must meet the specifications and it should also have efficiency good performance usability besides probably other quality factors and we must note that people are willing to pay for quality as we see in daily life that when we go and buy something maybe you are buying a TV now you have a sense of quality you know that different equipment or different TV sets have different prices and you are willing to pay and higher price because you feel that the equipment offers a better quality now same thing would have happened with the software if we are developing a good high quality software we can expect users to pay for such high quality software so quality is important in any engineering approach now engineering a large engineering projects of course involve different types of people and we need to manage the work carried out by these people for example again considering a development of a large building here you will have people who are architects civil engineers electrical engineers then Masons carpenters extra they will all be involved in the team which will develop the building and they will all have specific qualifications for contributing towards the project now when they carry out this project they also need to be continuously revised supervision is an essential aspect of quality assurance and we know that this is done by different people whose role is to carry out day-to-day on-site monitoring when buildings are being constructed in the large project then there are many deliverables things are not developed overnight so in again taking the example of a civil engineering project you have different deliverables which are produced in a specific order and they are reviewed and only when they are accepted we go to the further development for example the architectural plan is made by an architect the user may even want to see a model of the building you make them structural diagrams you make foundational diagrams you make electrical cabling layouts and so on so there are many deliverables and these are reviewed and only when they are approved we go ahead and carry out the task moreover to further guarantee the work and its quality we have some well-defined standards these standards or regulations must be followed in order to get a successful engineering solution in every engineering field such standards and regulations or conventions are well established and we must be aware of these because the purpose of the standards is to ensure high quality and to contribute towards success of a project so as we carry out a large project we go through multiple steps we achieve different milestones these milestones which may for example example be development of architectural plan these milestones are delivered reviews are carried out and when they are accepted we go for them because of these well-defined milestones in every other engineering project the progress is visible so this visibly of progress in development is an important criteria for an engineering solution we need to carry out in order to successfully execute a large project a proper systematic planning of a project and also have a continuous management in place so that we ensure a smooth progress in the project that we are doing now software of course is different from other engineering domains right we can list some of the essential differences firstly the cost of production in software is concentrated and in development right it is easy to make copies so once you develop a successful product it can be installed at many locations that by itself does not have a cost associated so much of the cost is concentrated in the development itself and therefore we need to ensure that this is a cost effective in its approach maintenance in the case of software consists of making Corrections and making enhancements and progress in development of software is often difficult to measure so how sometimes we hear that its software is 80% complete or 90% complete actually it is very difficult to get a sense of what this 80 or 90% may mean this is a problem typical of software development because it does not have any physical dimension as you see in the case of a building so when you see that the building which probably is a 50 solid building has already reached 35 stores stories you have you get a sense of progress but this does not happen in the case of software it is very important that the mythology or the approach we follow is a step by step approach and every step when completed gives us a signal that we have made some definite progress in the development so it is very important that we define these stages very clearly so we need to apply an engineering approach to the software because software is different from other products it is even more important that we take an engineering approach in software development so what are the characteristics what do we need to do in following an engineering approach for the software first we should attempt to estimate the cost and effort involved in a software project we should plan and schedule the work we should involve users in defining the requirements what exactly is expected from the software only users can tell us so we must involve them in the beginning itself to guarantee that they will accept the solution that we are developing then we should identify stages in the development we should define clear milestones so that once those milestones are achieved we know how far we have come and how far or how much further we have to go so progress can be seen we must schedule reviews and the purpose of the scheduling of reviews is both for the quality and for the control we should define deliverables and any large project requires extensive planning and and in order to control quality and the workability of the product we should include some steps which will ensure quality for example testing in software but is a important step and we must plan extensive testing so that what we develop and before it gets used is usable and this can be ensured through proper and extensive testing so these are the different guidelines for ensuring a successful software project now what we need to do is that somehow we need to put all this in the form of a proper process and use that process as a engineering approach to a software development we need to develop a methodology which will take into account these aspects of software and these issues in development of any project to define some kind of a methodology or an approach now job of software developer naturally involves interacting with different people and that is what makes it slightly challenging or difficult software developer on one hand has to deal with users these are the users of the software they are having some expectations they are faced with some problems and they expect the software to solve those problems but very often they are not in a position to clearly define what they expect from the software so we are dealing with users who have ill-defined requirements in their mind their focus is ease of use and response time they want software to be very simple to use it should also be very efficient so these are what users expect from the software on the other hand we are the size of software developer also needs to deal with technical people and these are the people who are going to develop the solution and they do not share the same concerns as expressed by the users but their focus is to develop the code for the software do the database design etcetera that is they are more technically inclined people they are not so much concerned with ease-of-use or functionality and so on and finally the developer has to deal with the management whose concern is the cost benefit from the project they consider the project as involving some investment they are expecting proper return on this investment they are concerned about the successful project and they want to develop the software in limited cost and in limited schedule so so the job job of the software developer is challenging because he has to balance the expectations of different people who are associated with the project so in summary what we are really said is that as large software development is very challenging activity in order to ensure its success it is important to follow an engineering approach this engineering approach like other engineering approaches in other engineering fields consists of a well-defined process so process is essential in software development so let us talk about what kind of processes are involved in the development of large software now before that let us first understand the term process itself process consists of different types of activities it defines a set of steps these steps or activities need to be carried out in a particular order software process deals with both the technical and the management issues it has to develop a solution using computer technology it has to deal with management and come up with a cost-effective solution now there are different types of processes involved in a software domain firstly there is a process for software development itself the purpose of this process obviously is to develop software so software development is a process whose goal is to produce the required software there may be multiple such processes in an organization and when you undertake a new project you may decide to follow an appropriate development process so the first type of process we are identified here is the process for software development using which the actual development happens then there is a process for managing the project itself because as we said earlier large number of people are involved in the project many activities will be carried out and it is going to be involving some cost so in order to control all these we need to have efficient management so you need to define the management process itself which will consists of defining the plan for the project what does the plan consists of plan consists of identifying the different activities when and how they will be done who will be responsible for doing them so these are the components of a software project plan then the plan needs to be defined then we need to also have a process for supervising that plan so that is the control part in order to prepare a software project plan you need to do the effort estimation you need to prepare schedule you need to provide resources you need to continuously take a feedback from the development process which will help you in controlling the project and also ensuring the quality so you need to Lu constant monitoring so the second type of process that we have defined now is the process for managing the software project and the next process is process for handling the change and for handling the configuration of the software that we are developing what we have to realize is that software development could be a long activity may require months to complete and during this time there could be some changes in the scope of the software we need to accept these changes we need to resolve them we need to identify whether we will include changes in the software that is being developed and in the process we need to define that configuration of the software system that we are developing if necessary we may create different versions of the software and then release them as and when the changes are implemented so the third process is really the change management process and it is also very important for the success of software finally there is a process for managing these software processes themselves so we talked about three processes so far there was a development process there was a project management then there was the change management now these three processes need to be kept up to date they can be improved as new technologies and new tools get developed it is important that all these three processes the processes for development the processes for management and the process for change management all of them should be kept up to date and we should see whether we can benefit from new developments new standardization and so on many of you must have heard about ISO and CMM now these are basically the standards which identify improvement in the software processes and we may adopt them as we gather more experience so these are the different types of processes that we encounter in software development so while talking about software processes we identified four categories one for development one for correct management one for change control and finally something which will keep these processes themselves up to date I mentioned that in a organization there can be different soft processes and for development itself there may be more than one process that they may use depending on the type of project you see for example here an organization which has defined for development processes for four different types of applications for example process a is to be used when we are developing client-server type of applications of conventional type such as sales processing payroll and so on whereas process B is a development process which we would use when we are developing an enterprise level solution which consists of packages available in the market so we'll be doing development around those packages and we'll be customizing them so naturally B requires some different approach than the process a similarly in the case of process C this is a process which the company may say that we should use when we are developing ecommerce type of applications which are primarily web-based applications or the process D is to be used when we are developing projects which are not for online transaction processing type of projects but which are more for management information systems or decision support systems which would be based on new technologies such as data warehousing so you can see here that an organization may have different development processes and depending on the type of project they may choose one of these so there may be many projects going on under each category for example there may be three projects going on for three different clients using the methodology a so we must keep in mind that a large organization needs to have a good report tire of software development processes and based on their experience they should refine these processes to suit different types of projects now we said earlier that a process consists of steps let us now define this most important element of a process each step has a well-defined objective it requires certain activities to be carried out by people with specific skills for example it could be design of a database so you need certain skills in order to carry out such a activity it requires specific inputs and the step produces well-defined outputs so each step has certain inputs it takes it carries out some tasks and produces some outputs also moreover we need to clearly define when the step should begin are we ready to start that step so there must be some entry criteria which tell you that if these criterias are met this step can begin and also you should clearly know when the step ends that month that means that there must be clear exit criteria there must be well established goals and these goals must be achieved by the step so these are the exit criteria finally to carry out its task the step will use certain techniques may use some tools guidelines conventions standards and so on so ultimately what we are saying here is that in order to carry out a step with a well-defined goals you need specific skills you have certain commitments to fulfill and you must use some guideline standards or techniques in order to reach the goals of that step so step must be executed so carrying out the development consists of executed these steps one by one they must be executed as per the project plan you must remember that every step would be assigned some duration that you must complete this job or this step in one month right so this is the duration for the step we'll also identify the effort required we will identify the resources needed the constraints so all these are inputs which come from the project management into the step these are the goals that this execution of the step should identify or should meet it must produce information for the management every step is not executed in isolation but it is a part of an overall process it must produce some information which the management can use so that corrective actions can be taken for example the effort estimated may not be appropriate it we may discover that more work needs to be done and we need more people in order to complete the process in the given duration now management needs to be alerted about these corrective actions so every step must produce some inputs for the management finally a step ends in the review this review we can call it as a validation and verification step purpose of this step a purpose of this review is to ensure that the step has been successfully done for example if the purpose of the step was to design the software then has it achieved its goal we do this by first verifying that the step has produced outputs which are consistent with the input given to the step this is called verification verification consists of checking consistency of output with inputs to the step so here the focus is only the step if something was wrong in the input naturally the step would continue with that mistake so should not happen but purpose of verification is to see that outputs are consistent with the inputs which are given then we have the validation step the validation step checks the consistency with the user needs that is the overall context is now taken into account that what is the purpose why are we all doing this what is what is the criteria by which we can say that we are on the track and what we have done meets the users specified requirements this is the validation so every review must consist of both the verification and the validation now here is a graphical picture of a step as you can see here the step consists of certain actions to be carried out right now these actions would depend on the purpose of the step and the step also has a review it takes certain inputs it produces certain outputs there is an entry criteria clearly specified this tells you what conditions must be met so that this step can be initiated it also tells you the exit criteria when do we consider the step to have done its job properly then there are management inputs here there is a project control information such as the duration and the resources that we talked about so these are specified and the step has to do its job within that duration and by using those resources and the step also produces some information map for the management so that the management can take some further corrective actions so this is the overview of what a step consists of and a process will contain many such steps now let us first understand what are the characteristics of a good process then we will see how steps can be combined to construct such good processes now first criteria that we see here is that the process should be very precisely defined there should be no ambiguity about what is to be done when and how that means each step which defines the process has a very precise meaning the step must be predictable that means we define activities and we also identify techniques by which it should carry out the job predictability means that the step can be repeated in other projects or the process can be repeated in other projects with the same level of confidence about the outcome predictability is with respect to effort with respect to cost with respect to quality with respect to overall success so here is a small simple example suppose we did one project project a this project was a web-based library application done by three persons in four months this was successfully done now suppose we get another project B which is of a similar complexity we feel that it should have a similar effort which is the effort consisting of 12% months three persons in four months which means that total effort of 12% months then we are able to relate a project a which was of a different category with project B which is a different application but we have we are able to extrapolate the effort required because our we have a properly defined process we know how to carry out such projects and what is involved what are the different steps so there is a predictability about the development this predictability is important characteristics of all processes then we should have predictability for quality in terms of kind of defects in terms of overall performance we can expect from the software primarily the most important characteristic which is the predictability predictable nature is essential we say when do we say that a process is predictable another equivalent term is when do we say that the process is under statistical control we say this when the actual values are close to the expected values predictable process is said to be under statistical control implying that when we carry out that process again we can reasonably expect what to what we'll achieve and how much effort and time it will need what it really means is that actual values are close to the expected values in fact in real time real life we encounter and we always try to plan processes like this so suppose you are going from point A to point B and you say that I may need half an hour to reach the point B now we are always actually implying some kind of predictability here that means that there is a very good chance that we will achieve the objective of reaching in a specified time so this is the predictability that we want to ensure in a software process then the software process should support testing and maintainability testing is important to ensure that software will serve the user without any defects we have to also remember that that software developer maybe different from the person who would maintain the software in fact the maintenance may be done by an entirely different organization now we can ensure maintainability if we follow proper standards in development we carry out proper documentation in fact the most important difference between the prototype and a product as you see in most other engineering activities is that an engineering product is a rugged usable and maintainable product generally we do not care much about the maintainability of a prototype which are typically developed only to demonstrate the feasibility or the functionality but when you develop a product you must ensure that the customers are satisfied about this usage and they are also satisfied about its maintainability in the future so these characteristics identify a good process and the processes that we have defined in concern and we are trying to define and identify the steps that they contain should be such that they will ensure the quality by allowing us to detect and remove the defects as early as possible we must remember that defects add to the project cost especially when in the case of software all the cost is concentrated in the development itself so a defect if it goes as part of the delivered software is requires a maintenance in future and that requires an additional cost so lead detection and correction of the defects is very costly process and we must ensure that the software is defect free to the extent possible that we take all care to remove all defects during the development itself that is a part of quality of the software a good process needs to ensure that finally a good process is one in which it is straightforward to carry out proper monitoring it gives enough data for the project management and it also enables improvement in future so as we do multiple projects as we learn we get feedback from the ongoing projects we should be able to improve our process we should be able to use new tools and technologies and we should be able to evaluate by carrying out proper measurements what kind of improvements are possible and worthwhile so there are these processes that we need to prepare for development of software and one of the popular process is the waterfall model for software development here the various steps that the process consists of are arranged sequentially one step takes inputs from its previous step and gives its output to the next step exit criteria of a step must match with the entry criteria of the succeeding step now these are that means we are going to define the different steps and put them sequentially so exit criteria of one step must be naturally compatible with the entry criteria of the next step in the sequence so here the different steps are placed in a sequential linear order and waterfall model follows the sequence consisting of specification design and building now this sequence intuitively appears to be very obvious and natural and therefore the soft waterfall model is commonly used in spite of some of the limitations that it has it produces many intermediate deliverables these deliverables are in the form of documents and there are well identified standards for these documents so the important feature of the waterfall model is that the different steps that it defines have identified deliverables these deliverables are actually part of the exit criteria of different steps and they have a well-defined standard moreover these deliverables act as a baseline so that we can use them as a future reference they may be used to clearly define what are our contractual obligations for the user similarly these documents can be used for future maintenance so it is very important that the process identify these baselines and Waterfall model has very clearly identified based lines like this and these are also very important for quality assurance project management and so on so we will speak in details about the waterfall model we'll see what are its phases what are the different steps in what sequence they are carried out and what are the deliverables that will clearly define this important process of software development

You Might Also Like

25 Comments

  • Reply Binyam Berisha May 21, 2019 at 1:30 am

    Thank you Sir

  • Reply Binyam Berisha May 21, 2019 at 1:30 am

    Tank you Sir

  • Reply Mayank Patel May 21, 2019 at 1:30 am

    Hi Sir, Videos are really very good, I am studying in London, your explanation is better than our teacher but just one issue is that video is just 9 years Old so it is bit different than current situations and issues for software engineering, I guess before 9 years ago internet use was really very less and there was no smart phones or apps as well. Would you please please send me latest videos for this subject as I know this subject is too much complicated to understand and I would like to go base of this subject.

  • Reply Vnbm Krishna May 21, 2019 at 1:30 am

    🐦

  • Reply krishna krishh May 21, 2019 at 1:30 am

    very very useless to software engineering you can watch it if you are not falling asleep tonight

  • Reply dj cRIA May 21, 2019 at 1:30 am

    Appreciated

  • Reply Amalendu Pandey May 21, 2019 at 1:30 am

    I want to make a software for the people which would be used in the time when we call someone and by chance the person is in heavy traffic area but the talk is so important. So i want to make a software which would reduce the traffic sound and make the persons voice fully clear. Is this project a large project or one time project ???

  • Reply Khan mizan May 21, 2019 at 1:30 am

    Thank you very much Sir….. for helpful lecture

  • Reply Naman Chauhan May 21, 2019 at 1:30 am

    nicee

  • Reply cse 15-19 May 21, 2019 at 1:30 am

    im a cool dude

  • Reply cse 15-19 May 21, 2019 at 1:30 am

    shuppandi

  • Reply cse 15-19 May 21, 2019 at 1:30 am

    pottan

  • Reply Gupta Abhay Kumar May 21, 2019 at 1:30 am

    Sir software me kitne course hote hai

  • Reply Jitendra Panchal May 21, 2019 at 1:30 am

    good sir i intersted

  • Reply Modi Swaka May 21, 2019 at 1:30 am

    The course is interesting, how could download the videos,

  • Reply Abhey arora May 21, 2019 at 1:30 am

    Outline
    Software Systems
    Challenge in large projects
    Successful software system
    Reasons for failure
    Reasons for failure ….
    Engineering: other disciplines
    Engineering …
    Large Projects
    Large projects …
    Software projects
    Apply Engineering Approach
    Job of Software Developer is difficult
    For success in large software development,
    Software Process
    Process Types …
    Multiple processes
    Step in a Process
    Process step …
    Process step
    Characteristics of a Good Process
    A Good Process …
    Waterfall Model for Development48:41

  • Reply Ayesha Lateef May 21, 2019 at 1:30 am

    It's very very good to those who have the goal and those who have patience to listen, Thanks a lot sir, it's very useful

  • Reply کوچي هلک May 21, 2019 at 1:30 am

    nice sir

  • Reply Narender kumar May 21, 2019 at 1:30 am

    good

  • Reply Prof. Anand K. Tripathi May 21, 2019 at 1:30 am

    Thank You ….Great efforts Done

  • Reply Chattu Arundhati May 21, 2019 at 1:30 am

    sir i am B. com student But i become a software engineer it is possible or not Plz tell me sir What after course

  • Reply ravikumarkr 706 May 21, 2019 at 1:30 am

    be 1st year complected autonomous now addmission 2nd year anna univercity how in tamil

  • Reply lywestmount May 21, 2019 at 1:30 am

    Nice! What is the text book?

  • Reply Arpit joshi May 21, 2019 at 1:30 am

    in this video i am so much enjoy
    so much
    thank you sir

  • Leave a Reply