BUSINESS PROCESS ENGINEERING
The goal of business process engineering is to define architectures that will enable a business to use information effectively. When taking a world view of a company’s information technology needs, there is little doubt that system engineering is required. Not only is the specification of the appropriate computing architecture required. But the software architecture that populates the organization’s unique configuration of computing resources must be developed. Business process engineering is one approach for creating an overall plan for implementing the computing architecture.
The different architectures must be analyzed and designed within the context of business objectives and goals:
• Data architecture
• Applications architecture
• Technology infrastructure
The data architecture provides a framework for the information needs of a business or business function. The individual building blocks of the architecture are the data objects that are used the business. A data object contains a set of attributes that define some aspect. Quality, characteristic, or descriptor of the data that are being described.
Once set of data objects is defined, their relationships are identified. A relationship indicates how objects are connected to one another. As an example, consider the objects: customer and product A. The two objects can be connected by the relationship purchases; that is, a customer purchases product A or product is purchased by customer. The data objects (there may be hundreds or even thousands for a major business activity) flow between business functions, are organized within a database, and are transformed to provide information that serves the needs of the business.
The application architecture encompasses those elements of a system that transform objects within the data architecture for some business purpose. In the context of this book, we consider the application architecture to be the system of programs (software) that performs this transformation. However, in a broader context, the application architecture might incorporate the role of people (who are information transformers and users) and business procedures that have not been automated.
The technology infrastructure provides the foundation for the data and application architectures. The infrastructure encompasses the hardware and software that are used to support the applications and data. This includes computers, operating systems, networks, telecommunication links, storage technologies, and the architecture (e.g., client/ server) that has been designed to important these technologies.
Requirement Engineering
Requirements engineering helps software engineers to better understand the problem they will work to solve. It encompasses the set of tasks that lead to an understanding of what the business impact of the software will be, what the customers want, and how end-users will interact with this software.
Understanding the requirements of a problem is among the most difficult tasks that a software engineer faces. When you first think about it, requirements engineering doesn’t seem that hard. After all, doesn’t the customer know what is required? Shouldn’t the end-users have a good understanding of the features and functions that will provide benefit? Surprisingly, in many instances the answer to these questions is no. And even if customers and end-users are explicit in their needs, those needs will change throughout the project. Requirements engineering is hard.
In the forward to a book by ralph young in effective requirements practices, it is written:
“It’s your worst nightmare. A customer walks into your office, sits down, looks you straight in the eye, and says,” I know you think you understand what I said, but what you don’t understand is what I said is not what I mean.” Invariably, this happens late in the project, after deadline commitments have been made, reputations are on the line, and serious money is at stake.”
All of those who have worked in the systems and software business for more than few years have lived this nightmare, and yet, few of them have learned to make it go away. We struggle when we try to elicit requirements from our customers. We have trouble understanding the information that we do acquire. We often record requirements in a disorganized manner, and we spend far too little time verifying what we do record. We allow change to control us, rather than establishing mechanisms to control change. In short, we fail to establish a solid foundation for the system or software. Each of these problems is challenging. When they are combined, the outlook is daunting for even the most experienced managers and practitioners. But solutions do exist.
It would be dishonest to call requirements engineering the “solution” to the challenges noted above. But it does provide us with a solid approach for addressing these challenges.
What is it? Requirements engineering helps software engineers to better understand the problem they will work to solve. It encompasses the set of tasks that lead to an understanding of what the business impact of the software will be, what the customer wants, and how end-users will interact with the software.
Who does it? Software engineers (sometimes referred to as system engineers or analysis in the IT world) and other project stakeholders (managers, customers, end- users0 all participate in requirements engineering.
Why is it important? Designing and building an elegant computer program that solves the wrong problem serves no one’s needs. That’s why it is important to understand what the customer wants before you begin to design and build a computer-based system.
What are the steps? Requirements engineering begins with inception--- a task that defines the scope and nature of the problem to be solved. It moves onward to elicitation task that helps the customer to define what is required, and then elaboration—where basic requirements are refined and modified. As the customer defines the problem, negotiation occurs--- what are the priorities, what is essential and when is it required? Finally, the problem is specified in some manner and then reviewed or validated to ensure that your understanding of the problem and the customer’s understanding of the problem coincide.
What is the work product? The intent of the requirements engineering process is to provide all parties with a written understanding of the problem. This can be achieved through a number of work products: user scenarios, functions and features lists, analysis models, or a specification.
How do I ensure that I’ve done it right? Requirements engineering work products are reviewed with the customer and end-users to ensure that what you have learned is what they really meant. A word of warning: even after all parties agree, things will change, and thy will continue to change throughout the project.
A Bridge to Design and Construction:
Designing and building computer software is challenging, creative, and just plain fun. In fact, building software is so compelling that many software developers want to jump right in before they have a clear understanding of what is needed. They argue that things will become clear as they build : that project stakeholders will be able to better understand need only after examining early iterations of the software; that things change so rapidly that requirements engineering is a waste of time; that the bottom line is producing a working program and that all else is secondary. What makes these arguments seductive is that they contain elements of truth. But each is flawed, and all can lead to a failed software project.
Fred Brooks: “The hardest single part of building a software is deciding what to build. No part of the work so cripples the resulting system if done wrong. No other part is more difficult to rectify later.”
Requirements engineering, like all other software engineering activities, must be adapted to the needs of the process, the project, the product, and the people doing the work. From a software process perspective, requirements engineering (RE) is a software engineering action that begins during the communication activity and continues into the modeling activity.
In some cases an abbreviated approach may be chosen. In others, every task defined for comprehensive requirements engineering must be performed rigorously. Overall, the software team must adapt its approach to RE. But adaptation does not mean abandonment. It is essential that the software team makes a real effort to understand the requirements of a problem before the team attempts to solve the problem.
Requirements engineering builds a bridge towards design and construction. But where does the bridge originate? One could argue that it begins at the feet of the project when user scenarios are described, functions and features are delineated, and project constraints are identified. Others might suggest that it begins with a broader system definition, where software is but one component of the larger system domain. But regardless of starting point, the journey across the bridge takes us high above the project, allowing the software team to examine the context of the software work to be performed; the specific needs that design and construction must address; the priorities that guide the order in which work is to completed; and the information, functions, and behaviors that will have a profound impact on the resultant design.
Requirements Engineering Tasks:
Requirements engineering provides the appropriate mechanism for understanding what the customer wants, analyzing need, assessing feasibility, negotiating a reasonable solution, specifying the solution unambiguously, validating the specification, and managing the requirements as they are transformed into an operational system. The requirements engineering process is accomplished through the execution of seven distinct functions: inception, elicitation, elaboration, negotiation, specification, validation, and management.
It is important to note that some of these requirements engineering functions occur in parallel and all are adapted to the needs of the project. All strive to define what the customer wants, and all serve to establish a solid foundation for the design and construction of what the customer gets.
Inception:
How does a software project gets started? Is there a single events that becomes the catalyst for a new computer-based system or product, or does the needs evolve over time? There are no definitive answers to these questions.
Capers jones: “The seeds of major software disasters are usually sown in the first three months of commencing the software project.”
In some cases, a casual conversation is all that is needed to precipitate a major software engineering effort. But in general, most projects begin when a business need is identified or a potential new market or serve is discovered. Stakeholders from the business community (e.g., business managers, marketing people, and product managers) define a business case for the idea, try to identify the breadth and depth of the market, do a rough feasibility analysis, and identify a working description of the project’s scope.
All of this information is subject to change (a likely outcome), but it is sufficient to precipitate discussions with the software engineering organization.
The intent is to establish a basic understanding of the problem, the people who want a solution, the nature of the solution that is desired, and the effectiveness of preliminary communication and collaboration between the customer and the developer.
Elicitation:
It certainly seems simple enough- ask the customer, the users, and others what the objectives for the system or product are, what is to be accomplished, how the system or product fits into the needs of the business, and finally, how the system or product is to be used on a day-to-day basis. But it isn’t simple—it‘s very hard.
Christel and Kang identify a number of problems that help us understand why requirements elicitation is difficult:
•
Problems of scope: The boundary of the system is ill-defined or the customers/ users specify unnecessary technical detail that may confuse, rather than clarity, overall system objectives.
•
Problem of understanding: The customers/users are not completely sure of what is needed, have a poor understanding of the capabilities and limitations of their computing environment, don’t have a full understanding of the problem domain, have trouble communicating needs to the system engineer, omit information that is believed to be “obvious” specify requirements that conflict with the needs of other customers/ users, or specify requirements that are ambiguous or untestable.
•
Problems of volatility: The requirements change over time.
To help overcome these problems, requirements engineers must approach the requirement the requirements gathering activity in an organized manner.
Elaboration:
The information obtained from the customer during inception and elicitation is expanded and refined during elaboration. This requirements engineering activity focuses on developing a refined technical model of software functions, features, and constraints.
Elaboration is an analysis modeling action that is composed of a number of modeling and refinement tasks. Elaboration is driven by the creation and refinement of user scenarios that describe how the end-user (and other actors) will interact with the system. Each user scenario is parsed to extract analysis classes - business domain entities that are visible to the –user. The attributes of each analysis class are defined and the services that are required by each class are identified and a variety of supplementary UML diagrams are produced.
The end- result of elaboration is an analysis model that defines the informational, functional, and behavioral domain of the problem.