Characteristics of software
1.software is developed or engineered, it is not manufactured.
• The concept of raw material is non existent here. It is better visualised as a process, rather than a product.
• The human element is extremely high in software development, compared to manufacturing.
• The development productivity is highly uncertain, even with standard products, varying greatly with skill of the developers.
• The development tools, techniques, standards, and procedures vary widely across and within an organisation.
• Quality problems in software development are very different from those in manufacturing. Whereas the manufacturing quality characteristics can be objectively specified and easily measured, those in the software engineering environment are rather elusive.
2. Software development presents a job shop environment.
• Here each product is custom-built and hence unique.
• It cannot be assembled from existing components.
• All the complexities of a job shop are present here.
• Human skill, the most important element in a job shop, is also the most important element in software development.
3. Time and effort for software development are hard to estimate.
• Interesting work gets done at the expense of dull work, and documentation, being a dull work, gets the least priority.
• Doing the job in a clever way tends to be a more important consideration than getting it done adequately, on time, and at reasonable cost.
• Programmers tend to be optimistic, not realistic, and their time estimates for task completion reflect this tendency.
• Programmers have trouble communicating.
4. User requirements are often not conceived well enough; therefore a piece of software undergoes many modifications before it is implemented satisfactorily.
5. There are virtually no objective standards or measures by which to evaluate the progress of software development.
6. Testing a software is extremely difficult, because even a modest-sized program can contain enough executable paths so that the process of testing each path though the program can be prohibitively expensive.
7. Software does not wear out.
• Software normally does not lose its functionality with use.
• It may lose its functionality in time, however, as the user requirements change.
• When defects are encountered, they are removed by rewriting the relevant code, not by replacing it with available code. That means that the concept of replacing the defective code by spare code is very unusual in software development.
• When defects are removed, there is likelihood that new defects are introduced.
8. Hardware has physical models to use in evaluating design decisions. Software design evaluation, on the other hand, rests on judgment and intuition.
9. Hardware, because of its physical limitations, has practical bound on complexity because every hardware design must be realised as a physical implementation. Software, on the other hand, can be highly complex while still conforming to almost any set of needs.
10. There are major differences between the management of hardware and software projects. Traditional controls for hardware projects may be counterproductive in software projects. For example, reporting percent completed in terms of Lines of Code can be highly misleading. It is now time to give a few definitions. The next section does this.