Teams rather than individuals develop software products such as for integrating in other devices or in the form of information systems or CAD systems etc. The entire system not only consists of software products but also documentation aided by other programs, guides and data to make the whole system in the process of professional software development. An amateur software development would consist of an individual developing software for his needs without documentation and guides but a fully professional software development would consist of people developing software products including code, programs and documentation.
There are two kinds of software products that software engineers develop. They are:
Generic Products: These are stand-alone systems designed to meet customers’ needs generally who are able to buy them. They include databases, word processors, drawing packages, and project-management tools. Software products in this category also include library information systems, accounting systems, or systems for maintaining dental records, which are designed for a specific purpose.
Customized Products: These are systems that are tailored according to the needs of a particular customer. Examples of such software products include control systems for electronic devices or systems to support a particular business process.
The specific set of attributes you would like to expect from a software system are summarized below:
Maintainability: There should be scope for software change in a changing business environment.
Dependability and Security: Dependable software should be reliable, secure and safe. They should not damage physically or economically in the case of system failure.
Efficiency: Software efficiency includes responsiveness, processing time and memory utilization.
Acceptability: Software should be acceptable which means they should be understandable, usable and compatible with other systems the users use.
The problems centered around software development and the goals software developers seek to achieve are:
It is obvious that software engineers should build products according to their clients’ needs but all along evidence has shown that 2% is only used as delivered. This shows that requirements engineering or analysis should play an important role in the whole process rather than reliability or cost. However, it should be taken into account that smaller systems can be tailored to serve clients’ needs better.
Industrialized nations spend on software development in significant proportions. The cost of software is influenced by the productivity of the software developers and their salaries. The performance of these software developers is dependent not only on their ability to code but also to carry out clarifying the problem specification, software design, coding, testing and documentation. It is sort of difficult to predict how much time a piece of software will take to develop and hence the cost and delivery date of software is also affected.
In the early days of computers, hardware was costly and software relatively cheap. Nowadays due to mass production and miniaturization, hardware is cheap and software costly. For instance in 1955, software cost only 10% of about a project while hardware cost 90%. Nowadays software has risen to about 90% of a project’s cost, while the remaining 10% cost comprises hardware. These proportions should be treated carefully. They hold for certain projects only and not in each and every case.
Some software is simple and easy to write but most commercially used software is large and extremely complex. Clearly, the cost of testing is enormous, whereas coding constitutes only a small part of software development.
In summary, what we see today is that software is expensive:
Examples of software performance include:
Software should be portable from one hardware to another and that is what is expected given the advent of high-level languages and international standards. But that’s not actually the case because clients are tied to their suppliers for switching allegiance at a considerable cost in converting software.
This factor comes into the picture after a piece of software has been written and put into operation. There are two types:
1) Remedial Maintenance: The software is tested for faults or bugs.
2) Adaptive Maintenance: The software is modified either because the user’s needs have changed or the computer, operating system or the programming language has changed.
A software piece is reliable if it keeps working and working without undesirable malfunctions.
Now we need to coin three terms that would make a software piece undesirable:
1) Error : a wrong decision made during software development.
2) Fault: a problem or bug causing software to malfunction.
3) Failure: an event causing software to malfunction.
An error is a mistake causing one or more faults in software. Failure will result while the system is tested. Failures are symptoms that end-users experience while faults are what the developers have to solve.
The fewer faults or bugs a software piece has, the higher the chances that it will be delivered to the client on time.
A software crisis arises when:
There are problems in developing software and so what is the remedy? A number of methods and tools comprising software engineering is the likely answer. Some of them are as follows:
Like other engineering disciplines, software engineering imposes professional responsibilities without pertaining to laws among teams of people working to develop software products. These responsibilities cover more than the appropriate application of technical skills such as honesty and integrity as well as ethical and moral ways on the part of the employees. Some of these responsibilities on a wider range are:
1) Confidentiality: You must respect the confidentiality of your employers or clients although no such treaty may have been signed.
2) Competence: You should accept work only that you know you have the right skill set and are competent. Accepting any other work might end in jeopardy and chaos.
3) Intellectual property rights: You should be aware of local laws governing intellectual property rights such as patent and copyrights and protect those property rights of employers and clients.
4) Computer misuse: You may not mishandle your employer’s computers by applying your technical skills. This may range from playing games on their computers, for instance, to infecting them with viruses and malware.