1.2 Software
1.2.1 A Formal Definition of Software
Software is both a logical and a physical system element. Software is a set of items or objects that form a “configuration” that includes programs, documents, data and other related items.{1}Software is an abstract representation of a process (software process is introduced in the following chapter).
1.2.2 Characteristics of Software
Software has characteristics that are considerably different from those of hardware. Some of the major differences are the following [Mohapatra2010]:
1) Software is developed or engineered, it is not manufactured.
● The concept of ‘raw material’ is non-existent here. It is better visualized 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 organization
● 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.
● It cannot be assembled from existing components. Hence each product is custom-built and unique.
● 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.
● Programmers tend to be optimistic, not realistic, and their time estimates for task completion reflect this tendency. 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.
● Interesting work gets done at the expense of dull work, like documentation, being a dull work, gets the least priority.
● Programmers have trouble in communication.
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 (< 5,000 executable statements) can contain enough executable paths (i.e., ways to get from the beginning of the program to the end), 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) 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.
1.2.3 The Dual Roles of Software
On one side, software is a product which delivers computing potential and produces, manages, acquires, modifies, displays, or transmits information.
On the other side, software is a vehicle for delivering a product:
● Supports or directly provides system functionality
● Controls other programs (e.g., an operating system)
● Effects communications (e.g., networking software)
● Helps to build other software (e.g., software tools)
● Many others
1.2.4 Classification of Software
There is more than one classification for software based on different standards. The following is one of them:
● System software (OS)
● Application software (MS)
● Engineering/scientific software (Matlab, Maple)
● Embedded software (iPod, Cell)
● Product-line software (Intel, Siemens)
● WebApps (Web applications)
● Ubiquitous computing—wireless networks
● Netsourcing—the Web as a computing engine
● Open source—“free” source code open to the computing community (a blessing, but also a potential curse!)
● Grid/Cloud computing
1.2.5 Why does Software Change Very Fast?
The following reasons may explain why software changes very fast:
● Computing: software must be adapted to meet the needs of new computing environments or technology.
● Business: software must be enhanced to implement new business requirements.
● Embedded: software must be extended to make it interoperable with other more modern systems or databases.
● Architecture: software must be re-architected to make it viable within a network environment.