Many people equate the term software with computer program. In fact, this is too restrictive a view. Software is not just the program but also all associated documentation and configuration data that are needed. Many people equate the term software with computer program to make this programs operate correctly. A software system usually consists of a number of separate programs, configuration files, which are used to setup these programs, system documentation, which describes the structure of the system, and user documentation which explains how to use the system and for software products, web sites for users to download recent product information. Software Engineering is a technological discipline that is used to provide a tool for developing a product. It is an outgrowth of software & hardware to meet the requirements. Software Engineering encompasses a process, management and technical methods and tools. When tools are integrated so that information created by one tool can be used by another, a system for the support of software development, called Computer-Aided Software Engineering, is established. CASE combines software, hardware, and a Software Engineering Database to create a Software Engineering environment analogous to CAD/CAE (Computer-Aided Design/Engineering) for hardware.
1.INTRODUCTION:
During the past decade, increasing intention has been focused
on the technology of computer software. As computing systems become more numerous, more complex and more deeply embedded in modern society the need for systematic approaches to software development and software maintenance become increasingly apparent. Software engineering is a field of study concerned with this engineering technology. Software systems are now ubiquitous. Every simple software systems have a high inherent complexity; so the engineering principles have to be used in their development. Software is nothing but the collection of instructions or the computer programs when executed by desired functions to obtain desired output or to meet the required performance. Software is intangible: it has no mass, no volume, no color, no odor – no physical properties. Software does not degrade with time as hardware does. Software failures are caused by design and implementation errors, not by degradation. Because software is intangible, extra-ordinary measures should be taken to determine the status of a product in development. Because software has no physical properties, it is not subject to the laws of gravity or the laws of electro dynamics. There are no Newton’s laws or Maxwell’s equation to guide software development. Intangibility and lack of physical properties for software limit the number of fundamental guidelines and basic constraints available to shape the design and implementation of a software product. Computer software has become a driving force; it is the engine that drives business decision-making. It serves as the basis for modern scientific investigation and engineering problem solving. It is a key factor that differentiates modern products and services. It is embedded in systems of all kinds: transportation, medical, telecommunications, military, industrial processes, entertainment, office products, ----------------- the list is almost endless. Software is virtually inescapable in a modern world. And as we more into the twenty first century, it will become the driver for new advances in everything from elementary education to genetic engineering. Computer software is the product that software engineering design and build. Today, software takes on a dual role. It is a product, at the same time, the vehicle for delivering a product. In order to develop a software product, user needs and constraints must be determined and explicitly stated: the product must be designed to accommodate implementers, users and maintainers; the source code must be carefully implemented and thoroughly tested; and supporting documents such as the principles of operation, the users manual, installation instructions, training aids, and maintenances documents must be prepared. The need for systematic approaches to developments and maintenance of computer software products became apparent in the 1960s.
2. SOFTWARE ENGINEERING:
Software Engineering is an engineering discipline, which is
concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. In this definition, there are two key phrases:
1. ‘Engineering discipline’ Engineer makes things work. They apply
theories, methods and tools where these are appropriate but they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods to support them. Engineers also recognize that they must work to organizational and financial constraints, so they look for solutions within these constraints. 2. ‘All aspects of software production’ Software Engineering is not just concerned with the technical processes of Software development but also with activities such as software project management and with the development of tools, methods and theories to support software production. “More than a discipline or a body of knowledge, engineering is a verb, an action word, a way of approaching a problem” - Scott Whit mire A workshop was held in Garmisch West Germany, in 1968 to consider the growing of software technology. That workshop, and a subsequent one held in Rome, Italy in 1969, simulated widespread interest in the technical and managerial processes used to develop and maintain computer software (NAU 76). The term “Software Engineering” was first used as a provocative theme for those workshops. According to Boehm (BOE7 6a), Software Engineering involves “the practical application of scientific knowledge to the design and construction of computer programs and the associated documentation required to develop, operate and maintain them”. As Boehm points out, the term “design” must be interpreted broadly to include activities such as software requirement analysis and redesign during software modification. The IEEE standard glossary of Software Engineering terminology (IEEE 83) defines Software Engineering as: “The systematic approaches to the development, operation, maintenance and retirement of software”, where “software” is defined as: “computer programs, procedure, rules and possible associated documentation and data pertaining to the operation of a computer system”. The primary goals of Software Engineering are to improve the quality of software products and to increase the productivity and job satisfaction of Software Engineers. Software Engineering is concerned with development and maintenance of technological products; problem- solving techniques common to all engineering disciplines are utilized. The customer may or may not be the end user of a software product, and the customer, developer, end user, and maintainer may be the same person; however, software products usually have multiple customer representatives, multiple developers, multiple users, and multiple maintainers. Some times, a software product is developed to satisfy a perceived marketing opportunity with out having a specific customer or group of users in mind. Software quality is a primary concern of a Software Engineers. Software reliability is “the ability of a program to perform a required function under stated conditions for a stated period of time” (IEE 83). The degree of reliability required for a particular product can be expressed in terms of the cost of product failure. The specification, development, management and evolution of these software systems makeups the discipline of Software Engineering. In general, Software Engineers adopt a systematic and organized approach to their work, as this is often the most effective way to produce high-quality software. However, engineering is all about selecting the most appropriate method for a set of circumstances and a more creative, informal approach to development may be effective in some circumstances.
2.1 DIFFERENCE BETWEEN SOFTWARE ENGINEERING &
COMPUTER SCIENCE:- Essentially, computer science is concerned with the theories and methods, which underline computers and software systems where as software engineering is concerned with the practical problems of producing software. Some knowledge of computer science is essential for software engineers in the same way that some knowledge of physics is essential for electrical engineers. Ideally, all of software engineering should be under pinned by theories of computer science but in reality this not the case. Software Engineers must often use ad hoc approaches to develop the software. Elegant theories of computer science cannot always be applied to real, complex problems, which require a software solution.
2.2 SOFTWARE CHARACTERISTICS:-
To gain an understanding of software, it is important to
examine the characteristics of software that make it different from other things that human beings build. Software is a logical rather than a physical system element. Therefore, software has characteristics that are considerably different than those of hardware. 1. Software is developed or engineered; it is not manufactured in the classical sense. 2. Software doesn’t “wear out”. 3. Although the industry is moving toward component based assembly, most software continuous to be custom built.
software engineering managers and practitioners in every activity associated with the software process. They automate project management activities, manage all work products produced throughout the process, and assist engineers in their analysis, design, coding and test work. CASE tools can be integrated within a sophisticated environment. Project managers and software engineers use CASE. Software engineering is difficult. Tools that reduce the amount of effort required to produce a work product or accomplish some project milestone have substantial benefit. But there’s something that’s even more important. Tools can provide new ways of looking at software engineering information – ways that improve the insight of the engineer doing and higher software quality. CASE is used in conjunction with the process model that is chosen. If a full tool set is available, CASE will be used during virtually every step of the software process. CASE tools assist a software engineer in producing high-quality work products. In addition, the availability of automation allows the CASE user to produce additional customized work products that could not be easily or practically produced without tool support. Use tools to complement solid software engineering practices – not to replace them. Before tools can be used effectively, a software process framework must be established, software engineering concepts and methods must be learned, and software quality must be emphasized. Only then will CASE provide benefit.
3.1 WHAT IS CASE?
A good workshop for any craftsperson – a mechanic, a
carpenter, or a software engineer – has three primary characteristics: (1) a collection of useful tools that will help in every step of building a product, (2) an organized layout that enables tools to be found quickly and used efficiently, and (3) a skilled artisan who understands how to use the tools in an effective manner. Software engineers now recognize that they need more and varied tools along with an organized and efficient workshop in which to place the tools. The workshop for software engineering has been called an integrated project support environment (discussed later in this chapter) and the tools that fill the workshop are collectively called computer-aided software engineering. CASE provides the software engineer with the ability to automate manual activities and to improve engineering insight. Like computer-aided engineering and design tools that are used by engineers in other disciplines, CASE tools help to ensure that quality is designed in before the product is built.
3.2 BUILDING BLOCKS FOR CASE:-
Computer aided software engineering can be as simple as a
single tool that supports a specific software engineering activity or as complex as a complete “environment” that encompasses tools, a database, people, hardware, a network, operating systems, standards, and myriad other components. Each building block forms a foundation for the next, with tools sitting at the top of the heap. It is interesting to note that the foundation for effective CASE environments has relatively little to do with software engineering tools themselves. Rather successful environments for software engineering are built on an environment architecture that encompasses appropriate hardware and systems software. In addition, the environment architecture must consider the human work patterns that are applied during the software engineering process. The environment architecture, composed of the hardware platform and system support, lays the groundwork for CASE. But the CASE environment itself demands other building blocks. A set of portability services provides a bridge between CASE tools and their integration framework and the environment architecture. The integration framework is a collection of specialized programs that enables individual CASE tools to communicate with one another, to create a project database, and to exhibit the same look and feel to the end-user Portability services allow CASE tools and their integration framework to migrate across different hardware platforms and operating systems without significant adaptive maintenance.
Quote: “The most valuable CASE tools are those that
contribute information to the development process”. - Robert Dixon.
4. A TAXONOMY OF CASE TOOLS:
A number of risks are inherent whenever we attempt to
categorize CASE tools. There is a subtle implication that to crate an effective CASE environment, one must implement all categories of tools – this is simply not true. Confusion (or antagonism) can be created by placing a specific tool within one category when others might believe it belongs in another category. Some readers may feel that an entire category has been omitted – thereby eliminating an entire set of tools for inclusion in the overall CASE environment. CASE tools can be classified by function, by their role as instruments for managers or technical people, by their use in the various step of the software engineering process, by the environment architecture (hardware and software) that supports them, or even by their origin or cost [QED89]. The taxonomy presented here uses function as a primary criterion.
4.1 PROCESS MODELLING & MANAGEMENT TOOLS:-
If an organization works to improve a business (or software)
process, it must first understand it. Process modeling tools are used to represent the key elements of a process so that it can be better understood. Process management tools provide links to other tools that provide support to define process activities.
4.2 PROJECT PLANNING TOOLS:-
Tools in this category focus on two primary areas: software
project effort and cost estimation and project scheduling. Estimation tools compute estimated effort, project duration, and recommended number of people for a project. Project scheduling tools enable the manager to define all project tasks, create a task network, represent task interdependencies, and model the amount of parallelism possible for the project.
4.3 ANALYSIS & DESIGN TOOLS:-
Analysis and design tools enable a software engineer to
create models of the system to be built. The models contain a representation of data, function, and behavior and characterizations of data, architectural, component-level and interface design. By performing consistency and validity checking on the models, analysis and design tools provide a software engineer with some degree of insight into the analysis representation and help to eliminate errors before they propagate into the design, or worse, into implementation itself.
4.4 REQUIREMENTS ANALYSIS TOOLS:-
When large systems are developed, things “fall into the
cracks.” That is, the delivered system does not fully meet customer specified requirements. The objective of requirements tracing tools is to provide a systematic approach to the isolation of requirements, beginning with the customer request for proposal or specification.
4.5 PROGRAMMING TOOLS:-
The programming tools category encompasses the
compilers, editors, and debuggers that are available to support most conventional programming languages.
4.6 INTEGRATION & TESTING TOOLS:-
In their directory of software testing tools, software quality
engineering (SQE95) defines the following testing tools categories.
Data acquisition – tools that acquire data to be used during
testing. Static measurement – tools that analyze source code without executing test cases. Dynamic measurement – tools that analyze source code during execution. Simulation – tools that simulate function of hardware or other externals. Test management – tools that assist in the planning, development, and control of testing. Cross-functional tools – tools that cross the bounds of the preceding categories. It should be noted that many testing tools have features that span two or more of the categories.
4.7 RISK ANALYSIS TOOLS:-
Identifying potential risks and developing a plan to
mitigate, monitor, and manage them is of paramount importance in large projects. Risk analysis tools enable a project manager to build a risk table by providing detailed guidance in the identification and analysis of risks.
4.8 DOCUMENT TOOLS:-
Document production and desktop publishing tools support
nearly every aspect of software engineering and represent a substantial “leverage” opportunity for all software developers. Documentation tools provide an important opportunity to improve productivity.
4.9 PROJECT MANAGEMENT TOOLS:-
The project schedule and project plan must be tracked and
monitored on a continuing basis. Tools in the category are often extensions to project planning tools.
4.10 REENGINEERING TOOLS:-
Tools for legacy software address a set of maintenance
that currently absorb a significant percentage of all software-related effort the reengineering tools category can be sub-divided into following functions.
Reverse engineering to specification tools takes source code as
input and generate graphical structured analysis and design models where-used lists and other design information. Code restructuring and analysis tools analyze program syntax, generate a control flow graph, and automatically generate a structured program. On – line system reengineering tools are used to modify on-line database systems (e.g. convert IDMS or DB2 files into entity- relationship format). These tools are limited to specific programming languages and require some degree of interaction with the software engineer.
5. CONCLUSION:
As computing systems became larger and more complex, it
became apparent that the demand for computer software was growing faster than our ability to produce and maintain it.
6. REFERENCES:
1. Software Engineering –6th edition by IAN SOMMERVILLE.
2. Software Engineering concepts by Richard Fairly. 3. Software Engineering –A practitioner’s Approach- 5th edition by Roger S. Pressman. 4. (B0E76a) Boehm, B.: “Software Engineering,” IEEE Transactions on Computers, vol. C-25, no. 12, December 1976. 5. (IEEE83) IEEE Standard Glossary of Software Engineering Terminology, IEEE Standard 729-1983. 6. (NAU76) Naur, P., et al. (eds): Software Engineering: Concepts and Techniques, Petrocelli /Charter, New York, 1976.