1 Introduction : Software Engineering

R. Baskaran

 

Welcome to the UGC e-pathashala lecture series in Computer Science.

 

In this series of lectures we will be looking at the subject software engineering. And for today’s session I will be discussing majorly on introduction to software engineering. Before we start with the introduction of software engineering  I would like to mention the statistics behind how this software would  perform given a scenario. As per the IBM’s report 31% of the projects gets cancelled before they are completed. 53% overrun by their cost estimates by an average of 189% and for every 100 projects there are 94 restarts. So this is the pie chart relating to what I have said. If you look at this pie chart the failure rate of every software that is being developed is 31% the success rate counts only to be 16%. Whereas the overall budget relating to the software it overruns by a cost of 189% as I have said. That comes around 53%. Some of the questions that tickles your mind before we go on this particular topic of software engineering. Question 1 why does it so long to get the program finished? Why are costs for building this software so high? Why cannot we find all errors before the release? Why do we have difficulty in measuring the progress of software development? So these are some of the questions that tickles every brain during the process of development of a software. At the same time we have certain crisis factor which is around this software which are the problem of developing the software might be larger, lack of adequate training relating to the corresponding software that we develop and increase in skill shortage, low productivity improvements.

 

So to come out with the solution for all these kind of problems we may have to initially define what exactly is a software? Then we will slowly progress towards how the skills related to software engineering could be progressed. First I will define what exactly software is. Software is nothing but an instruction that when executed provide desired functions, features and performance. Or otherwise it can even be defined as a data structure that enable the programs to adequately manipulate information. The third piece of definition of a software would be a descriptive information in both hard copy and virtual forms that describes the operation and use of programs. Proprietary software also exist. So when you look at these three definitions it says software could either be in a form of a set of instructions, or it can be defined in terms of an algorithm, to manipulate a large amount of information or it can even be a descriptive information in terms of a hard copy or a virtual form. To be very specific of software can be said as a collection of programs, along with its operating procedures and its documentation. By now everybody would be clear on what exactly would be a program and new we have to see what are the operating procedures behind all these programs and why is this documentation to important for the entire piece of software. First of all I will let you know the importance of documentation manuals, as such when we wanted to develop a software or exactly I mention is a small piece of code to be done we don’t start writing the appropriate code immediately. Say if I want you to write a program to find a number between 0,100 it is very simple for us to write a program to find whether it is between 0 , 100. At the same time, once it is said to be like a development a complete of a software development this is a small program that may take maximum of 5 lines for it to done. But once the same volume of program to be converted into a software requires a lot of analysis. So we will understand what I have said in the initial problem. write a program to find whether the given number is between 0, 100 in such a case we may have to understand what does the word ‘between’ means, whether it should start with 0 or it should start with 1 whether it should end with 99 or 100 so that is the kind of understanding every programmer might need at the initial. So how to write 5 lines of a program it requires a large amount of analysis. So as part this analysis we will try to initially define the between and we find out any number from 1 to 99 will be an appropriate solution to the given problem. So appropriate documentation manual which communicates between the user and the customer or the developer is required so that we can avoid the miscommunication.

 

So documentation manuals are pretty much during the phase of development of the entire software. So as part of documentation manuals what are important is we say one component as analysis and specification the other component as design the third component would be implementation and the fourth one would be testing. So whenever we wanted the software to be developed if it is to be properly engineered then it should follow the same sequence of analysis design implementation and testing. It need not be software alone it can be to any piece of engineering if it goes through the same phase of A D I and T analysis design implementation and testing it will be purely engineered. But for software we may say this implementation as coding also. So as a part of documentation manual what I would require for an analysis and specification document would be a formal specification which says what are the hardware components to be used what is the object is which I am supposed to start the software development and what are the outcomes with these list of specifications which are said to be the formal specifications I will start with the development of software with which I will start drawing a context diagram this context diagram is specific to the domain with which I am trying to develop this software and then the flow the complete follow relating to this particular will be mentioned in the dataflow diagram. So this formal specification will be later named as software requirements specification document which we will call it as SRS in abbreviation. so formal specification is a complete list of documents which completely understands what exactly is the need of this particular software. As a second level with the design engineers these are two fundamental things that we may have to do with the software development either we may have to draw a flowchart or an ER diagram in case of database tables. And the third one being the implementation which has source code and cross reference listing. Source code as you know every program requires a statement to be executed and a cross-reference may be in terms of library or a dll file. And last component which is quite important during the phase of software development which is testing the given data  and testing how the result is being declared so testing results.

 

So now I have mentioned you about the importance of documentation manuals towards the development of the software. As another component towards software development we will understand what this operating procedure would be. As part of operating procedures we basically might need two things one is called user manual and the other one would be an operational manual. As part of user manual the user initially tries to understand the overall view of the system and he should in turn have a beginner’s guide tutorial and a  reference help. And as part of operational manual a  complete installation guide and a system administration guide is also being important. So when a software is being developed user have one perspective of working on the software and the administrators have another perspective of working on  the same software. So everybody requires a complete documentation of how they are supposed to operate in case of  heavy risks. After having understood what exactly is a software which is a combination of program operating procedure and documentation now that I’ll let you know what are the various domains in which these software applications would work. The first one is supposed to be a system software which is supposed to be a collection of programs written to  service other programs maybe one can develop a compiler and editor which are supposed to be called a part of system software development. Second one is an application software which is supposed to be said a standalone program that solve specific business needs. Any specific requirement given by the customer if it is focused towards those specific requirements this kind of software is called application software.

 

The third one would be an engineering software where exactly initially I have started with a data structure defined with a set of instructions likewise this engineering software has been characterized by a number of crunching algorithms. the fourth one being the embedded software which resides within a product, say a lift to be get operated it has a small chip embedded with a list of programs so that is called an embedded software washing machine which is programmed already and is being run which is again supposed to be a program with a software operating on the backside. so embedded software resides within a product or a system and it is used to implement and control features. Fifth one being product line software which is designed to provide specific capability for use by many different users and web applications which is the evolving computing environment for today that not only provide features functions and the content which software is supposed to have, but also integrate with corporate databases and business applications. so software are generally made into products and may be developed for a particular customer or may be developed for a general market. Today everywhere we go we see online market existing or they have a software inbuilt by where the list all the products with their quantity item and so, if it is a super market and looking at the software products there either can be generic of it can be custom made. The custom made we also call it as bespoke model if it is generic it is developed to be sold for different range of customers. It is as I told you before if it is an application software designed to meet of specific customers but then the same software can be made generic and multiple people can use the same software and custom made is developed for a single customer according to their specification.  

 

So by here we will understand what exactly software would mean now we will start saying merging engineering with the software. software engineering is an engineering discipline which is concerned with all the aspects of software production so every software engineer should possess basic qualities so it has to adopt a systematic and organized procedure to their work use appropriate tools and technique depending on what is the problem to be solved and what are the different development constraints and use the resources that are available for the development of this software which we call it as an infrastructure development. So now we will define what exactly this software engineering would mean. The first set of statements which I have given was for software now that we wanted to plan and organize in a systematic way to develop the same kind of the software. Here comes two different definitions relating to software engineering. First definition according to Fritz Bauer the establishment and the use of sound engineering principles in order to obtain economically developed software that is reliable and works efficiently on real machines. The importance in this particular definition is on three key terms one is on engineering principles which I have said planned and organized way of executing all the programs the second one we wanted to develop a software which is completely economical and third one is on the reliability aspect of it. whereas the second definition which is slightly detailed which says a discipline whose aim is production of quality software that is delivered on time within budget and satisfies all the requirement of the user and this definition is being given by Stephen Schach.

 

If you look at this particular definition the stress in given more towards the outcome of the software that we developed he stress on the software that got developed need to be of utmost quality it should be within the budget and should be developed on time meaning that I have specified this as a duration for the completion of the project within the same duration I am supposed to complete so these all we have seen in the first component as a drawbacks that we have seen with the software more than 53% of the software failed because of these reason and some percentage of software which overrun their cost estimates was we have to keep in mind that these are the four list of constraint which are the major outcomes relating to the project I repeat it is a quality software that is delivered in time with in the budget and it should meet all the requirements given by the customers for this software to get it be developed we require a list of processes. So the software processes is the way in which we produce software when we look at why is it difficult to improve the software process it is majorly because of not enough time and the lack of knowledge.

 

At to look at specifically the characteristics of the software is not being manufactured and software does not wear our as it is with the hardware. to list out more characteristics of this software reusability of components when I mean reusability the software once developed can be reused for a particular piece of code example of such software would be initial level I will use the same username and password and captcha which is existing in one form to multiple software being developed and software is flexible enough to adopt to changes now we will look what is the changing nature of the software a trend has emerged to provide the source code to the customer and to the organizations, so pervious days when we wanted to develop the software people we very specific that the source code of the entire software will not be deliberately given now it is a world of open source programming so every person can look at the source code of the perform also so trend has emerged again to provide the source code both to the customer and to the organization and software where source codes are available are known as open source software some of the myths that we have relating the software includes management may be confident about good standards and clear procedures of the component but the taste of any food item is in the eating and not in the recipe. the second myth about the neither software is company has latest computers and state of art software tools so we shouldn’t worry about the quality of the product, if at all we look only at these two aspects i.e. state of art tools that are available latest computes are available there shouldn’t be any problem major risk involved during the phase of development of the software as I have mentioned you before it may be because of lack of knowledge in appropriate use of tools or appropriate use of the hardware. So the infrastructure us only one of the several factors that determine the quality of the product. The other factors which include the features relating to the product the functions relating to the product use of those standard knowledge and those products those hardware materials available for the development of the software. Addition of more software specialists  those with higher skills and longer experience may bring the schedule back on the track. when we say we wanted the time to be limited so I tried to include more manpower towards the development of software and I wanted to include I wanted to bring back the schedule back on the track, this doesn’t mean that I can bring back the entire program or the entire software development well ahead rather it may sometimes even delay the entire process. And software is easy to change the really is totally different as I have told you software is flexible but then it is not that easy for us to understand the complete flow of the program and change.

 

Computers provide greater reliability than the devices they replace this is not always been true. Another software myth would be missing vague requirements can easily be incorporated detailed out as they got concretized. If we do so we are heading towards a disaster. So anything any requirement that has been collected in the initial time as part of analysis and specification documentation anything that is left out in the initial may produce higher quantum of risk in the later stages. So that is what this myth is indicating missing vague requirements can easily be incorporated detailed out as they may get concretized. So this might lead towards higher set of problems when we proceed to the final versions of the program. Software with more features is better software, software can work right the first time. So try to understand these two terminologies in the beginning software which has more features as I have mentioned features functions are  certain requirements  basic  requirements  for the development of software that doesn’t completely mean when we provide totally when we add more amount of features that make a better software that is not perfect in the case that when we work on the software the first time it should work perfectly so both are only the myths. Once the software is demonstrated the job is done. So anything that got demonstrated to the customer that doesn’t mean that it is completely done it may undergo several changes in it as an as and when we progress towards it. So at the phase of testing one piece of testing team or a team who develops one particular module of the entire software might show one output as it progresses towards another module then we may have to integrate and show a different version of the entire product. So usually problems being here. That doesn’t mean what I am trying to say is that doesn’t completely mean software once having demonstrated means it is totally complete.

 

Another software myth would be software quality cannot be assessed before testing. However quality assessment techniques should be used throughout the software development lifecycle. here I use a term called software development lifecycle which exactly I have mentioned during the initial slides which said analysis design implementation and testing when we progress towards these four parts in a sequence we mean they entire phase is supposed to be a software development lifecycle. The only deliverable for a software development is the tested code. So as such what I have mentioned with the initial problem is write a program to find whether the given number is between 0,100 when I have given this problem we have to come across a testing standard. For this particular problem you can initially assume that 50 is a quite good number to be given and tested and which might respond with a positive result. But then once if I have not understood or if I have not come across the word ‘between’ then I might land in a problem of giving a zero and finding a positive result and at the same time giving a 100 and finding out the same positive result. But that shouldn’t happen. so I have to check between my customer would be under a purview that any number between 1 and 99 should work fine, 0 and 100 having inserted should not give any positive result. So this will uncovered during the phase of testing. So the only deliverable for the software development project is the tested code. So tested code is only one of the deliverable and it is not the only deliverable that I will try to provide. So the aim is to develop working programs now the objective is to develop good quality maintainable programs and not working programs. Thank you.