Introduction
Any technology product that is designed to meet the specific needs of customers must be 'engineered'. Hence, software too needs to be engineered to achieve its purpose. This requires an approach that has to be suitable for software and its unique characteristics. To build high-quality software products, you need to understand what this approach involves.
In this section, you will learn about software engineering—the approach used to build software. You will also learn about the three layers of software engineering—process, methods, and tools.
Definitions of software engineering
Let us look at some accepted definitions of software engineering, to understand what it is.Bauer provided one of the original definitions of software engineering in 1969. He looked at software engineering as an approach for economically building useful software by using sound engineering principles.
Bauer defines software engineering as "the in establishment and use of sound engineering principles order to obtain economically software that is reliable and works efficiently on real machines".
In his book, Software Engineering Economics, Dr. Barry Boehm talks of using science and mathematics for defining how software can be built. He defines software engineering as "the application of science and mathematics by which the capabilities of computer equipment are made useful to man via computer programs, procedures, and associated documentation".
A standard formal definition from IEEE Standard 610.12-1990 states that software engineering is:
1. The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software
2. The study of approaches as in (1)
The IEEE definition describes software engineering as a systematic approach covering the aspects of development, operation, and maintenance. This approach is disciplined and quantifiable.
The primary goal of software engineering
You have seen that all definitions of software engineering focus on using a systematic approach for building software. The primary goal of software engineering is 'to build a high-quality product in a timely manner'. It aims to achieve this primary goal by using an 'engineering approach'.
Engineering involves a set of fundamental principles that should always be followed. These include explicit activities for understanding the problem and communicating with the customer, defined methods for representing a design, the best practices for implementing the solution, and sound strategy and tactics for testing. If the basic principles are followed, it results in technology products of high quality.
Software engineering as a collection of practices
To achieve the goal of building high-quality products within schedule, software engineering employs a set of practices to:
- Understand the problem
- Design a solution
- Implement the solution correctly
- Test the solution
- Manage the above activities to achieve high quality
Software engineering represents a formal process that incorporates a series of well-defined methods for the analysis, design, implementation, and testing of software and systems. In addition, it may encompass a broad array of project management methods and techniques for software quality assurance (SQA) and software configuration management (SCM).
Relevance of software engineering
Now that you understand what software engineering is, let us discuss its relevance in the present scenario.Today, software products are built with a level of urgency that was not seen in previous years. The top priority for companies is to reduce the time-to-market, which in turn requires 'rapid development'.
Software engineering is perceived by some practitioners as being too formal, time-consuming, and structured for the flexibility required during development today. They argue that they cannot afford the formality of an engineering approach for building software because they need to develop products rapidly. People raising such objections view engineering as a static discipline that they think, cannot adapt to the changing needs of business and industry. The truth however is, software engineering is adaptive and is, therefore, relevant for anyone building a software product.
Software engineering is adaptive
Let us now look at the layers of software engineering.
Software engineering is an adaptive technology and not a fixed methodology. It is a philosophy that can be adapted and applied across all software development activities and application domains.
Software engineering provides a broad array of options that professionals can choose from to build high-quality products. However, there is no single engineering approach or a set of software engineering processes, methods or tools to build a software product.
The software engineering approach, including the processes, methods, and tools, can and should be adapted to the product, the people who build it, and the business environment.
Software professionals, therefore, should not be dogmatic about software engineering. It is not a religion and there are no absolutes
The layers of software engineering
A software engineering approach relies heavily on an organizational commitment to quality because it is not possible to incorporate software engineering in an organization that is not focused on achieving quality.
We can view software engineering as a set of layered components, with the foundation being the organization's quality approach, that is, its Total Quality Management (TQM) philosophy.
The layers resting on this foundation are:
- Process: A framework that helps the project manager control project management and engineering activities
- Methods: The technical activities required for the creation of work products
- Tools: The automated assistance for processes and methods
We will now discuss each of these layers in detail.
The process layerThe process layer defines the process that will be used to build the software and the activities and tasks that a project manager will have to manage. Therefore, it forms the basis for planning and managing all the project activities for building a product. The process layer is essentially the 'harness' into which we place the technology for building the software product.
The process layer:
- Enables the project manager to plan for the successful execution of the project
- Provides practitioners the context of their work
Importance of a process
A process is helpful because it provides clarity on how the work has to be performed. Any complex set of human activities can become chaotic if there is no guidance for the people performing the activities. A defined process answers the following questions:
- Who communicates with whom?
- How are inter-dependent activities coordinated?
- Who is responsible for what work?
- Who produces what work products, and how is each assessed for 'goodness'?
A process:
- Identifies all the software engineering activities and tasks
- Defines the flow of work among activities and tasks
- Identifies the work products that are produced
- Specifies the quality checkpoints that are required
Some people view software development with a perspective that it requires artistic skill and craftsmanship and is inherently chaotic. They resist the idea of using a defined process because they view it as being cumbersome and bureaucratic, and therefore hindering creativity.
While there is no doubt that software development requires creativity, most of the quality software in the industry is produced by the coordinated effort of more than one person. For any team effort, coordinated control is a better alternative than anarchy. The road-map provided by a process is useful for people who build software products or manage projects.
All approaches to building software have a process, but in many cases, it is ad hoc, invisible, and chaotic. Good software engineering makes the software process more visible, predictable, and useful to those who build software.
Features of the process layer
The following features are included in the process layer.
- The common process framework (CPF)
- Software engineering activities and tasks
- Quality checkpoints
- Work product definitions
- Project management
- Software quality assurance (SQA)
- Software configuration management (SCM)
- Project monitoring
- Measurement and metrics
You have seen that the process layer identifies the engineering tasks that must be performed to build high-quality software.
The next layer, the methods layer focuses on the technical activities that must be performed to accomplish the engineering tasks. It provides the technical 'how to' and covers the fundamental engineering activities.
Building software involves performing a broad array of technical activities. The methods layer contains the methods defined to perform these activities effectively. It focuses on how the technical activities are to be performed. The practitioners use the methods to perform the fundamental engineering activities that are required to build the software.
Technical activities in the methods layer
Let us obtain an overview of the technical activities that are addressed by the methods layer. The fundamental technical activities required to build software are:
- Analysis: Analysis is the foundation of all engineering work that follows. During analysis, the model of what is required from the software is created.
- Design: Design activities follow analysis and translate the analysis model into how the product will provide this functionality through software.
- Code: Once the design is complete, coding translates the design model into an executable form.
- Test: The testing process helps to uncover errors in the code and the underlying design.
In addition, several umbrella or support activities are also performed as part of the software process.
Technical methods in the methods layerFor various process activities, the methods layer contains the corresponding set of technical methods to be used. These encompass a set of rules, the modes of graphical or text-based representation, and the related guidelines for assessing the quality of the information represented. Let us look at an example.
Consider the activity 'understand and describe a problem' that may be present in the process layer. For this, we need to define the technical methods for attributes such as:
- Communication with the customer
- Requirements elicitation
- Modeling
- Description of the data objects to be manipulated, the functionality to be delivered, and the system behavior
We may decide that the technical method we will use for analysis will be object-oriented analysis and that the specifications will be documented using the standard template of the organization.
Selecting a methodTo define a methods layer, we need to select suitable methods from the wide range of available methods.
Consider the analysis and design activities. There is a wide variety of methods available for these, with exhaustive books written for each. The software project team should select the method that is most appropriate to the problem, the development environment, and the knowledge and background of the team members.
For example, analysis and design methods are used to produce models that represent the problem and the design. These models are depicted using text and graphics. Both the technical team and the customer should be able to understand and use the depiction. The models should also be usable as input for subsequent engineering activities. The methods selected, therefore, must provide a clear and concise engineering description of how the models will be created and depicted.
The tools layer
The tools layer provides support to the process and methods layers by focusing on the means that automate the various manual activities. Tools can be used for automating the following activities.
- Project management activities
- Technical methods used in software engineering
- General system support
- Framework for other tools
Tools for various activities
Various tools can be used for performing project management and technical activities. The list of tools is as follows:
- Project management tools
- Change control tools
- Analysis and design tools
- Code generation tools
- Testing tools
- Re-engineering tools
- Documentation tools
- Repository support tools
- Prototyping tools
These tools support the process and methods layer in various activities.
Example of what a tool can doLet us take an example of a project management tool. Some of the activities that can be performed by the tool include:
- The definition of resources
- The definition of tasks
- The allocation of resources to tasks
- The scheduling of tasks and milestones
- The tracking of actual versus scheduled tasks
- The depiction of tasks as a Gantt chart
- The generation of management reports based on the actual data. These reports may be a project summary, the critical tasks and milestones, the slipping tasks, the over-budgeted tasks, a list of over-allocated resources, and who does what and when.
We have seen a list of the tools that are a part of the tools layer. The tools layer can also use integrated tools, that is, tools that function as an integrated set and use a common repository.
Integrated tools help to provide comprehensive support for development. They use a repository for storing all the software engineering work products, and this repository can be used by all the tools.
We can look at software engineering as a set of activities performed in a workshop called 'integrated project support environment (IPSE)' with the tools supporting it collectively called 'computer-aided software engineering (CASE)'. CASE can be a single tool supporting a specific activity or an integrated set of tools supporting a complex environment that includes software, hardware, and a software engineering database.
9 comments:
easy to understand...thnks
why software engineering is called layer technology?
Any engineering approach (including software engineering) must rest on an organizational commitment to quality. Explain this considering Software engineering layers?
Buy Fresh Sniff Stuff Inbox Mailer Awesome article, it was exceptionally helpful! I simply began in this and I'm becoming more acquainted with it better! Cheers, keep doing awesome!
Ferum shop Free cracked account giveaway loaded bitcoin Thank you because you have been willing to share information with us. we will always appreciate all you have done here because I know you are very concerned with our.
Workflow management software I think this is an informative post and it is very useful and knowledgeable. therefore, I would like to thank you for the efforts you have made in writing this article.
I found this is an informative and interesting post so i think so it is very useful and knowledgeable. I would like to thank you for the efforts you have made in writing this article. digital marketing agency
I read your blog frequently and I just thought I’d say keep up the amazing work! denver airport transportation
I think this is an informative post and it is very useful and knowledgeable. therefore, I would like to thank you for the efforts you have made in writing this article. social automation tool
Post a Comment