Saturday, June 16, 2012

Chapter 1. Introduction to Software Engineering


Loading
Introduction to Software Engineering
In all industrialized countries, and in developing countries, computer systems are economically critical. More and more products incorporate computers in some form. Educational, administrative and health care systems are dependent on computer systems. The software in these systems represents a large and increasing proportion of the total system costs. The effective functioning of modern economic and political systems therefore depends on our ability to produce software in a cost-effective way.
Software engineering is concerned with the theories, methods and tools that are needed to develop the software for computers. Software Engineering is a field of computer science that deals with the building of large complex systems. These systems are not built by a single person; they are built by a team or several teams of software engineers.
Software Engineering is the application of science and mathematics by which the capabilities of computer equipment are made useful to man via computer programs, procedures and associates.
This definition of software engineering contains two key points. Firstly, software includes a good deal more than just computer programs. Thus, learning to be a good software engineer means a good deal more than learning how to generate computer programs. It also involves learning the skills to produce good documentation, databases and operational procedures for computer systems. The "mathematics and science" of software engineering is to provide methodologies for developing software as close to the scientific method as possible.
Secondly, the software products must be useful to man. The phrase "useful to man" emphases the needs of the user and the software's interface with the user. Software engineers must apply their skills and judgement to the job of developing appropriate set of specifications and ensuring that the resulting software does indeed make the computer equipment perform functions useful to society.
The basic goal of software engineering is to produce high quality software at low cost. There are various approaches to estimate cost and also measure the quality of a software product.


Software Products
The objective of software engineering is to produce software products. Software products are software systems delivered to a customer with the documentation that describes how to install and use the system. In some cases, software products will be part of systems products where hardware as well as software is delivered to a customer.
Software products fall into two broad classes:
(i) Generic products: These are stand-alone systems which are produced by a development organization and sold on the open market to any customer who is able to buy them. These types of software are also known as package software.
(ii) Bespoke (customized) products: These are systems which are commissioned by a particular customer. The software is developed specially for that customer by some contractor. This type of software is also known as tailor software.


Software Engineering Environment (SEE)
The term "environment" is used to describe a vast range of support systems ranging from simple systems that support program development in a single language to very large systems offering support for multiple projects using many different languages and design methods.
More specifically, a software engineering environment can be defined as follows:
A software engineering environment (SEE) is a set of hardware and software tools which can act in combination in an integrated way to provide support for the whole of the software process from initial specification through to testing and system delivery.

The key characteristics of an SEE are:
(i) The environment facilities are integrated. Ideally, the environment should support all five levels of integration: platform integration, data integration, presentation integration, controls integration and process integration.
(ii) The environment assumes team-based rather than individual development and provides configuration management support for all activities. The management of multiple versions of system documents and code and their dependencies is a particularly expensive activity for large long-lifetime systems.
(iii) Facilities are available to support a wide range of software development activities (specification, design, documentation, programming, testing, debugging and so on).


Professional Responsibility
Like other engineers, software engineers must accept their job involves wider responsibilities than simply the application of technical skills. Their work is carried out within a legal and social framework. Software engineering is obviously bounded by local, national and international laws. Software engineers must behave in an ethical and morally responsible way if they are to be respected as professional.
It goes without saying that engineers should uphold normal standards of honesty and integrity. They should not use their skills and abilities to behave in a dishonest way or in a way that will bring disrepute to the software engineering profession. However, there are areas where standards of acceptable behaviour are not bounded by laws but by the more tenuous notion of professional responsibility. Some of these are:
(i) Confidentiality: Engineers should normally respect the confidentiality of their employers or clients irrespective of whether or not a formal confidentiality agreement has been signed.
(ii) Competence: Engineers should not misrepresent their level of competence. They should not knowingly accept work which is beyond their competence (capability or skill).
(iii) Intellectual Property Rights: Engineers should be aware of local laws governing the use of intellectual property such as patents, copyright and so on. They should be careful to ensure that the intellectual property of employers and clients is protected.
(iv) Computer Misuse: Software engineers should not use their technical skills to misuse other people's computers. Computer misuse ranges from relatively trivial (game-playing on an employer's machine, say) to extremely serious (dissemination (affecting) of viruses.)


Software Process
The software process is a set of activities and associated results which produce a software product. These activities are mostly carried out by software engineers.
There are four fundamental process activities which are common to all software processes. The activities are:
(1)   Software specification: The functionality of the software and constraints on its operation must be defined.
(2)   Software Development: The software to meet the specification must be produced.
(3)   Software Validation: The software must be validated to ensure that it does what the customer wants.
(4)   Software Evolution: The software must evolve to meet changing customer needs.


Computer-Based System Engineering
Software on its own is completely useless. Until software (merely a string symbols) is combined with some processor and other hardware to form a system, it cannot do anything at all. Software engineers must understand that there are more general problems of system engineering.
These concern the interactions between software and hardware system components and the human users of the system.
System engineering is the activity of specifying, designing, implementing, validating, installing and maintaining systems as a whole. System engineers must take a broad view of a system. They must think about the services that the system provides, the constraints under which the system must be built and operated, the interactions of the system with its environment and so on.
A system is a collection of interrelated components that work together to achieve some objective.

Systems and their environment: Systems are not independent entities but exist in an environment. This environment affects the functioning and the performance of the system. When a system is part of another system, it is called a sub-system.


The above figure shows some of the systems that might be incorporated in an office building. The heating system, the power system, the lighting system, the plumbing system, the waste system and the security system are all sub-systems within the building which is itself a system. The building is located in a street that is in a town, and so on.
There are two main reasons why the environment of a system must be understood by system engineers:
(1)   In many cases, the reason for the existence of a system is to make some changes in its environment.
(2)   There are many relationships between a system and its environment and some of these are indirect rather than direct relationships. The functioning of a system can be affected by changes in the system’s environment in ways which can be very difficult to predict. For example, the electrical system in a building may be affected by environmental changes that take place outside the building.

System engineers, therefore, should not consider systems as completely self contained entities but must have knowledge of the environment where the system is to be installed.






System Development Life Cycle
System development life cycle divides the life of a system into two stages,
(i)    Systems development and
(ii)    Systems operation and support

      First we build it; then we use it, keep it running, and support it. Eventually, we cycle back from operation and support to redevelopment.


The two life cycle stages and the two key events between the stages are:
  (i)    When a system cycles from development to operation and support, a conversion must take place.
(ii)    At some point, obsolescence occurs and a system cycles from operation to redevelopment.
        For Eg. Version-1 may be in operation and support while version-2 is in development.

No comments:

Post a Comment