What is Software Engineering?
Over the last several decades, software has become increasingly complex. As software has grown to be such a complex monster, the practices of informal software development quickly failed to demonstrate their value. Projects that were developing software informally were often years late, over budget, unreliable, and difficult to maintain. It is only natural that a new engineering discipline was created to provide order to the process of developing software and to work toward providing a solution to the problems software development were facing.
Software Engineering: a Definition
Software engineering is an engineering discipline that is involved in all aspects of software production, from start to finish (Sommerville, 2004). From the beginning phase of gathering requirements for a software product to the final phase of maintaining software after it’s been released, software engineering is ever present. As an engineering disciple, theories, methodologies, tools, and techniques are defined and used to provide organization and efficiency toward software production. Ultimately, developing software using a software engineer’s approach is done in an effort to meet the goals that today’s technological environment demands.
The Goals of Software Engineering
Software engineering is deeply concerned with providing a means to help development teams meet the expectations of their customers. Today’s companies and customers expect the following (Pressman, 2010):
Software is to be of high quality.
Customers expect that software they use will be reliable and will perform as expected.
Software is produced cost-effectively.
Software development teams are expected to produce software that will meet the expectations of the customer while at the same time staying within their set budget. In the real world, this is easier said than done. Nonetheless, software engineering helps to provide a systematic approach that will allow for better estimation of project costs.
Software is easily maintainable.
Most of us have heard of the term “spaghetti code.” It is definitely possibly to write a program that functions and performs what is required and still be written poorly. Through proper planning and design, development teams can ensure that their software is developed in ways to ensure it’s easily maintainable.
Software is developed in a timely fashion.
The world of technology is changing every day at a rapid pace. Companies rely on utilizing new technologies to enhance productivity and gain a competitive advantage. If software cannot be developed and delivered in a timely fashion, development teams run the risk of their products becoming outdated or cooled down.
The Practice of Software Engineering
Underneath all of the processes, methodologies, and tools within software engineering lies an underlying set of practices that really are at the heart of what the philosophy is behind an engineered approach to software development (Pressman, 2010). Think of the software development process as a problem solving process. The problem is that you have a software product to develop that needs to fulfill a list of requirements specified by your customer. The solution is a completed software product that meets the customer’s requirements. Software engineers use the following four engineering practices to solve the problem: understand the problem, plan a solution, carry out the plan, and examine the result for accuracy. These practices are present in various activities through software engineering process activities.
The Software Process Framework
Through review of all the various software processes that have been developed over the relatively young discipline of software engineering, a generic software process framework has been observed time and time again (Pressman, 2010). Within this framework is a set of framework activities and umbrella activities:
Framework Activities
Communication
It is absolutely essential to communicate and collaborate effectively in any software process. Requirements gathering, a major communication activity, is required to understand what functionality the software requires.
Planning
Planning allows for teams to look at the software project’s present and future paths in an organized manner. Without planning, any development team is destined to be ridden with inefficiency, stress, and an excess of complications.
Modeling
Allows development teams to look at the big picture when designing and developing the software product. Modeling helps in understanding the complexities of today’s modern software.
Construction
Consists of the actual code generation and testing activities. These two activities are generally found in all software development projects, even informal ones.
Deployment
The delivery of software to the customer. Can be either a release version or a partially completed, increment of the software product.
Umbrella Activities
Software project tracking and control
Monitors the progress of the project compared to planned progression. Allows teams to know if they are falling behind schedule so they have opportunities to take action to get caught up.
Risk Management
Allows teams to assess the risks a project faces that may affect the quality or outcome of the project.
Software Quality Assurance
Involves designing a test plan to ensure software meets quality requirements.
Technical reviews
Reviews the work done thus far in a project. The goal of this activity is to ensure that work products are complete before moving on to the next set of work activities.
Measurement
Also known as metrics. Provides information to assist in delivering software that meets the customers needs.
Software Configuration Management
Manages and monitors the effects of changes to through the software process
Reusability Management
Explores the potential for reuse of assets, such as existing code, to help reduce the costs and time of a software project.
Work Product Preparation and Production
Contains a collection of activities used in the development of work products such as models and documentation.
Software Engineering is a Layered Technology
As with all other engineering disciplines, software engineering is committed to delivering quality to the production of a product. A focus on quality is what drives software engineers to improving software engineering processes. This is the reason that a quality focus is the bedrock of software engineering (Pressman 2010).
In an effort to provide quality to a product’s development, processes are the foundation of software engineering. Processes exist as a collection of activities, actions, and tasks that are carried out during the development of a software product. Essentially all of the high-level management and strategies live in this realm.
Software engineering processes make use of methods to carry out the activities of the software development process. Think of methods as the technical know-how to actually carry out the work required to develop software. Communication, testing, requirements gathering, and design modeling are just a few examples of methods that processes use.
Methods in software engineering make use of tools to help with the execution of methods. Many of the tools used by software engineers are, in fact, software based! Communication makes heavy use of email and instant-messaging application. Programmers make use of text editors or integrated development environments. These tools help to provide automation and/or assist the methods with completion of work.
List of Works Cited
Sommerville, Ian. Software Engineering, 7th ed. Pearson Education Limited, Edinburgh Gate 2004.
Pressman, Roger S. Software Engineering: A Practitioner’s Approach, 7th ed. McGraw Hill, New York 2010.











