• No results found

SUBTEAMS NEEDED IN SOFTWARE ENGINEERING PROJECTS

Project Management

2.1 SUBTEAMS NEEDED IN SOFTWARE ENGINEERING PROJECTS

It is clear that the systematic development of large, modern, software projects requires teams. It is often helpful to think of a software project team as being made up of several “subteams.” These subteams need not be as formally constituted as they are described here and, in fact, some of them will consist of a single person in many cases. In fact, the same person may perform all the actions of multiple subteams. However, the team’s activities still need to be performed, regardless of the overall team organization and the size of the project. The activities performed by these teams occur regardless of the software develop- ment life cycle used, although the timing of these activities will almost certainly differ.

Several of these subteams are not likely to be in existence during the entire lifetime of the software project. For some software projects, one or more of the teams may consist of a single person whose duties may be split among several projects or activities. In other projects, the teams may be very large and geographically separated. Team members may even report to different companies in some of the larger cooperative software development projects.

Some typical software engineering subteams and their duties are listed next. Although all activities are important, this list highlights some cases where a particular software development life cycle model requires special knowledge from a subteam.

Systems analysis team—This team is responsible for determining if the project is fea- sible. The feasibility study includes cost analysis, estimated revenues, and an estimate of the difficulty of engineering the project. After it produces the feasibility study, this team should interact with the requirements team, receiving its feedback. If the software development process is iterative, as in the rapid prototyping and spiral mod- els, then the interaction and feedback should be more frequent and may occur with additional subteams.

Planning team—This team is responsible for developing the overall management plan for the project and making sure that the project is proceeding within the expected time frame for various activities. This often involves staffing, which becomes espe- cially critical for agile software development processes, to make sure that the team has adequate knowledge of the application domain to know the capabilities of exist- ing software components and systems. The same is true for open source projects. Requirements team—The duties of this team are to meet with the customer and deter-

formal and informal meetings with the customer to finalize the requirements from relatively imprecise and incomplete initial requirements. If no customer is available, then the requirements team is to obtain the same information from one or more potential users. If no potential users are available, then surrogate customers may be used in their place. After it produces the system’s requirements, this team should interact with the design team, receiving its feedback. If the software development process is iterative, as in the rapid prototyping and spiral models, then the interaction and feedback should be more frequent and may occur with additional subteams. This type of feedback is crucial to agile software development processes.

System design team—The duties of this team will be to produce a detailed design of the system after the requirements have been set by the requirements team. If the software development process uses the classical waterfall model, then the system design team should provide feedback to the requirements team about any difficulties encountered. After it produces the design, the system design team should interact with the imple- mentation team, receiving its feedback. If the software development process is itera- tive, as in the rapid prototyping and spiral models, then the interaction and feedback should be more frequent and may occur with additional subteams.

Implementation team—The duties of this team will be to implement the software designed by the system design team. After they produce the implementation, this team should interact with the testing and integration team, receiving its feedback. If the software development process is iterative, as in the rapid prototyping and spiral models, then the interaction and feedback should be more frequent and may occur with additional subteams.

Testing and integration team—The duty of this team is the formulation of test cases for the modules and systems that are created by the implementation team. This team may take some modules from an incomplete system for testing by mutual agreement with the implementation team. After it produces the test plan and tests the software mod- ules produced, this team will integrate the software modules into a working system. This team should interact with the implementation team, receiving its feedback. If the software development process is iterative, as in the rapid prototyping and spiral models, then the interaction and feedback should be more frequent and may occur with addi- tional subteams. The integration team is responsible for an interface control document (ICD) that precisely describes the interfaces between major system components. This can be in the form of specifying APIs, or the interfaces between software subsystems. Training team—This team is responsible for the development and production of train-

ing materials.

Delivery and installation team—This team is responsible for the delivery and installa- tion of the software.

Maintenance team—This team is responsible for the maintenance of the software after it is delivered and installed. After the system is delivered and installed, this team should

interact with the implementation team, receiving its feedback. If the software develop- ment process is iterative, as in the rapid prototyping and spiral models, then the inter- action and feedback should be more frequent and may occur with additional subteams. Quality assurance (QA) team—This team has two duties. The first is to set standards for

the adherence of the project team to a set of agreed-upon processes for the system’s creation and set standards for performance of the software produced. The second is to provide an evaluation of how well the project teams meet those standards. Standard industry practice is for the information obtained by this team to be kept internal and not shared with the customer. The information can be released in the event of a legal action and, thus, cannot be destroyed. This information is to be presented to the proj- ect manager who will use it to evaluate performance of the QA team.

Metrics team—This team is responsible for keeping statistics on the performance of the teams on the project. Depending on the organization’s data collection procedures, some typical statistics kept might be the number of maintenance requests generated, number of maintenance requests serviced, number of lines of code written, num- ber of hours performed on each task, and values produced by the tool on each new version of the system. This team will interact with the requirements, design, imple- mentation, testing and integration, and maintenance teams, providing assessments of quality and efficiency, as well as feedback to these subteams.

Documentation team—This team is responsible for the project documentation. This includes external documentation of the requirements, design, source code, and other supporting documents.

System administration team—This team is responsible for ensuring that the underlying computer hardware, software, and network support are working as needed by the project team. This team often includes the network administration team.

Reuse and reengineering team—This team is responsible for selection and use of appro- priate existing reusable software components. Reengineering may be necessary if the software project depends upon some old code that must be changed because of new advances in technology.

It is not surprising that there are several managerial tasks involved here, one for each sub- team. Of course, if the teams are small enough, a manager may be one of the technical members of the team (or even the only team member).

The aforementioned tasks listed are required as part of most software projects. Therefore, it is reasonable to ask how they are scheduled. Of course, the scheduling of these tasks is highly dependent on the software life cycle model used by the project. For example, a soft- ware development process based on the classical waterfall software development model might have the tasks incorporated into the process as shown in Figure 2.1. You will be asked to produce similar diagrams for the rapid prototyping and spiral software develop- ment models in the exercises.

The plan for market-driven software development is interesting. The entire process is compressed, at least in comparison to the classical waterfall process. The steps usually include the following:

1. Determination of the market for the product 2. Requirements determination

3. Combined design and coding 4. Testing and integration 5. Delivery

At first glance, the process seems similar to others, except for the grouping of the design and implementation phases. The easiest way to see the difference is to consider the mile- stones that are typical in market-driven software development.

In this model, planning the product’s requirements and its marketing are often done in concert. The planning interval rarely exceeds five years and is often much shorter. The goal is to have a project plan that results in a product that the marketing and sales teams can sell. Since technology is changing so fast, longer development periods are not acceptable.

Specification (planning, systems analysis, QA, metrics, documentation, system administration, reuse, and reengineering)

Design (QA, metrics, documentation, system administration, reuse, and reengineering)

Code (QA, metrics, documentation, system administration, reuse, and reengineering)

Testing and integration (QA, metrics, documentation, system administration, reuse, and reengineering)

Maintenance (training, delivery and installation, QA, metrics, documentation, system administration, reuse, and reengineering)

FIGURE 2.1 Incorporation of basic software engineering tasks into a simplified illustration of the classical waterfall life cycle model.

Usability testing is often included in the design and early implementation phase. This is before the detailed testing phase begins.

The delivery process often includes determination of minimal, typical, and maximal installations, together with an installation suite that can select components depending on the user’s desires. The software may be packaged in academic, regular, or professional ver- sions, each of which has a different set of incorporated components or system configura- tion parameters and, therefore, different installation procedures.

In the highly competitive global economy, the product may be shipped to countries where the native language is not English. This means new versions of online help and manuals. It may also mean a different configuration of such things as the built-in security, since the United States government does not allow 128-bit encryption to be exported for nonmilitary applications without restriction. (There are different restrictions for military and nonmilitary products, and for products being sold to so-called rogue states.) See the Bureau of Industry and Security website at the URL www.bis.doc.gov/index.php/policy -guidance/encryption for the latest information.

You should note that there are several technical tasks that must be performed in addition to the tasks listed earlier. The persons performing these tasks are often given official or unof- ficial titles such as the ones listed next. Even without particular titles, software engineers often have to account for the percentage of their time that is spent on particular activities. This time accounting is often necessary to determine the cost of individual projects.

Human–computer interface evaluator—This person is responsible for evaluating the type of interaction between the software system and users. At the very least, he or she must have a mental model of the expected skills of both novice and experienced users of the final software product.

Tools support person—This person is responsible for making sure that supporting soft- ware environments are working properly. This person will work with system or net- work administrators.

Software economist—This person is responsible for development and use of appropriate models in order to estimate software costs, hardware and software resources, and the time needed for project completion.

Project librarian—This person is responsible for keeping track of all project documents. There may be other personnel needed in specialized software development environ- ments, particularly ones with extensive software reuse. For simplicity, we will ignore these specialists and concentrate on those responsibilities most likely to be encountered by the beginning software engineer.