Sunday, February 21, 2010

1. The Software Problem

Ask any student who has had some programming experience the following question: You are given a problem for which you have to build a software system that most students feel will be approximately 10,000 lines of (say C or Java) code. If you are working full time on it, how long will it take you to build this system? 

The answer of students is generally 1 to 3 months. And, given the programming expertise of the students, there is a good chance that they will be able to build the software and demo it to the professor within 2 months. With 2 months as the completion time, the productivity of the student will be 5000 lines of code (LOC) per person-month.

Now let us take an alternative scenario—we act as clients and pose the same problem to a company that is in the business of developing software for clients. Though there is no standard productivity figure and it varies a lot, it is fair to say a productivity figure of 1000 LOC per person-month is quite respectable (though it can be as low as 100 LOC per person-month for embedded systems). With this productivity, a team of professionals in a software organization will take 10 person-months to build this software system. 

Why this difference in productivity in the two scenarios? Why is it that the same students who can produce software at a productivity of a few thousand LOC per month while in college end up producing only about a thousand LOC per month when working in a company?

The answer, of course, is that two different things are being built in the two scenarios. In the first, a student system is being built which is primarily meant for demonstration purposes, and is not expected to be used later. Because it is not to be used, nothing of significance depends on the software and the presence of bugs and lack of quality is not a major concern. Neither are the other quality issues like usability, maintainability, portability etc.

On the other hand, an industrial-strength software system is built to solve some problem of a client and is used by the client’s organization for operating some part of business, and a malfunction of such a system can have huge impact in terms of financial or business loss, inconvenience to users, or loss of property and life. Consequently, the software system needs to be of high quality with respect to properties like reliability, usability, portability, etc.

This need for high quality and to satisfy the the end users has a major impact on the way software is developed and its cost. The rule of thumb Brooks gives suggests that the industrial-strength software may cost about 10 times the student software [16].

The software industry is largely interested in developing industrial-strength software, and the area of software engineering focuses on how to build such systems. That is, the problem domain for software engineering is industrialstrength software. In the rest of the book, when we use the term software, we mean industrial strength software. In the remainder of this chapter, we will learn

  • That quality, cost, and schedule are the main forces that drive a (industrialstrength) software project.
  • How cost and productivity are defined and measured for such a project, and how quality of software is characterized and measured.
  • That large scale and change are important attributes of the problem domain and solution approaches have to handle them.

2 comments:

  1. This blog is really interesting and it's really nice to read its contents. Hope you would like to learn about Software Engineer as they design, develop, modify, document, test, implement, install and support software applications and systems. You can also review Samples for Software Engineer or visit here for further knowledge.

    ReplyDelete
  2. THANK YOU FOR THE INFORMATION .HI GUYS IF YOU SEARCHING FOR software application development services

    PLEASE VISIT US
    software application development services



    ReplyDelete

Pages