BugRep Software Project Plan Academic College of Tel-Aviv Yaffo Software Engineering Course Year 2006-2007 Project lead names Shmuel Tyszberowicz, Yair Aviv Project name BugRep Document Software Project Plan Document Version 0.2 Last update date 10/06/2007 Date First Version 25/03/2007 Team Members: Name

ID#

e-mail

duty

Irit Lovenberg

033145558

[email protected]

Tests manager

Yael Shemla

034279125

[email protected]

Requirements manager

Sagy Rozman

038356036

[email protected]

Implementation manager, Design manager

Chen Levkovich

033026055

[email protected]

Software configuration manager, SQA manager

Galit Daniel

034188334

[email protected]

Team Leader

1

BugRep Software Project Plan Revision Sheet Revision Number

Date

Brief Summary of Defects

0.1

25/03/2007

Baseline draft document

0.2

06/10/2007

Added second iteration planning

2

BugRep Software Project Plan Confirmation Sheet SQA manager

Team Leader

Name

Software Configuration Manager Chen Levkovich

Chen Levkovich

Galit Daniel

Signature

Chen Levkovich

Chen Levkovich

Galit Daniel

Date

25/03/2007

25/03/2007

25/03/2007

Author

3

BugRep Software Project Plan

TABLE CONTENTS 1

INTRODUCTION.............................................................................................. 6 1.1 PROJECT OVERVIEW ..................................................................................... 6 1.2 PROJECT DELIVERABLES ............................................................................... 6 1.3 DOCUMENT OVERVIEW ................................................................................. 6 1.4 DEFINITIONS, ACRONYMS, AND ABBREVIATIONS ......................................... 7 1.4.1 Key Definitions .................................................................................... 7 1.4.2 Key Acronyms and Abbreviations........................................................ 7 1.5 KEY REFERENCES ......................................................................................... 7

2

ITERATIONS PLAN......................................................................................... 8

3

PRODUCTS........................................................................................................ 8

4

METHODS, LANGUAGES, AND TOOLS .................................................... 9 4.1 4.2 4.3

5

WORD (FOR REQUIREMENT) ......................................................................... 9 JAVA ............................................................................................................. 9 NETBEANS .................................................................................................... 9

ROLES IN TEAM.............................................................................................. 9 5.1 PROJECT MANAGER ...................................................................................... 9 5.2 REQUIREMENT MANAGER............................................................................ 10 5.3 DEVELOPMENT MANAGER ........................................................................... 12 THE DEVELOPMENT MANAGER (ALSO KNOWN AS SOFTWARE CONSTRUCTION MANAGER) IS RESPONSIBLE FOR THE CODING VERIFICATION, UNIT TESTING AND DEBUGGING OF THE SOFTWARE. .............................................................................. 12 5.4 SOFTWARE QUALITY ASSURANCE MANAGER ............................................. 13 5.5 DESIGN MANAGER....................................................................................... 14 5.6 TEST MANAGER ........................................................................................... 15 5.7 CONFIGURATION MANAGER ........................................................................ 16

6

PLANNING, TRACKING AND REPLANNING......................................... 17 6.1 6.2 6.3

PLANNING ................................................................................................... 17 TRACKING ................................................................................................... 17 REPLANNING ............................................................................................... 17

7

PLANNED DOCUMENTS PEER REVIEWS.............................................. 17

8

PLANNED SOFTWARE (PROTOTYPES) PEER REVIEWS .................. 17

9

RESOURCES ................................................................................................... 18

10

MONTHLY EFFORT ................................................................................. 18

11

TRACEABILITY MAPPING..................................................................... 18

12

FIRST ITERATION PLANNING.............................................................. 18 DEFECT MANAGEMENT ........................................................................................... 18 12.1 SCHEDULE................................................................................................... 18 4

BugRep Software Project Plan 12.2 12.3 12.4 12.5 13

MAIN FUNCTIONALITIES.............................................................................. 19 INFRASTRUCTURE ARCHITECTURE .............................................................. 19 RISKS .......................................................................................................... 19 MARKETING ................................................................................................ 19 SECOND ITERATION PLANNING......................................................... 19

PROJECT AND USER MANAGEMENT ......................................................................... 19 13.1 SCHEDULE................................................................................................... 19 13.2 MAIN FUNCTIONALITIES.............................................................................. 19 13.3 INFRASTRUCTURE ARCHITECTURE .............................................................. 19 13.4 RISKS .......................................................................................................... 20 13.5 MARKETING ................................................................................................ 20

5

BugRep Software Project Plan

1 Introduction 1.1 Project Overview The BugRep tool enables the automation, tracking and analysis of reporting defects in the company's software products. Users of this product will be able to report defects, track progress of defect handling, and change status of defects according to organizational needs and demands. The product will be highly adaptable and configurable and therefore its intended users are of different size and nature, such as: • Management of the specified software, at all levels – relevant team that uses this tool as a means for appreciating the status and project. • Development team working on the relevant software – use this tool for monitoring and updating the status of the defects detected in the software under their responsibility. • Testing team in charge of the quality assurance of the relevant software – user this tool for registering the detected defects and monitor their status. • Customer related teams – use this tool for registering the problems detected during the day-to-day work with the relevant software. The development of the BugRep tool is divided into 5 software versions and is planned to be finalized by the end of June.

1.2 Project Deliverables As mentioned above, the deliverables of the BugRep tool are 5 software versions and additional documentation deliverables. The due dates of the software deliverables are as following: • First Version 5/5/2007 • Second Version 19/5/2007 • Third Version 2/06/2007 • Fourth Version 16/06/2007 • Fifth Version 30/06/2007

1.3 Document Overview The purpose of this document is to outline the Bug Rep tool project plan. This document project plan consists of the following sections: - General description of the tool and the target audience intended to use it (this chapter).

6

BugRep Software Project Plan

-

High level overview of the iteration and deliverables planning including timeline. High level overview of the team structure and the relevant roles and responsibilities of each team member.

1.4 Definitions, Acronyms, and Abbreviations 1.4.1

Key Definitions

1.4.2

Key Acronyms and Abbreviations

ANSI

American National Standards Institute

CMU

Carnegie Mellon University

DFD

Data Flow Diagram

IEEE

Institute of Electrical and Electronics Engineers

RTM

Requirements Traceability Matrix

SCM

Software Configuration Management

SEI

Software Engineering Institute

EPG

Engineering Process Group

SMM

Software Measurement and Metrics

SQA

Software Quality Assurance

SRS

Software Requirements Specification

PM

Project Manager

RM

Requirement Manager

DM

Design Manager

1.5 Key References [1]

SWEBOK

[2]

SRS Document

Software engineering body of knowledge Software Requirements Specification

7

BugRep Software Project Plan

2 Iterations Plan We are planning 5 iterations. #Iteration

Start Date

End Date

Time Interval

Defect Management

15/04/2007

05/05/2007

3 weeks

Project and User Management

06/05/2007

11/06/2007

4 weeks

Reporting Management

11/06/2007

24/06/2007

2 weeks

Customized statemachine

7/07/2007

21/07/2007

2 weeks

3 Products Product Name

Delivery Date

Initiation document

12/11/2006

SRS Peer Review

04/01/2006

SRS

10/04/2007

Design Peer Review

19/04/2007

Design

26/04/2007

Test plan

26/04/2007

First Iteration Peer Review

03/05/2007

First Version

05/05/2007

Second Version

11/06/2007

Third Version

24/06/2007

Forth Version

21/07/2007

8

BugRep Software Project Plan

4 Methods, languages, and tools 4.1 Word (for Requirement) 4.2 Java 4.3 Netbeans

5 Roles in Team 5.1 Project Manager The PM is responsible to the application management activities which include planning, coordinating, measuring, monitoring, controlling and reporting to ensure that the development and maintenance of the software are systematic, disciplined and quantified. The PM role consists on management and measurement. The PM is responsible of six sub areas: 1. Initiation and scope definition The PM determines the scope of the project, objectives and constraints. The PM must be assured that adequate capability and resources are available in the form of people, expertise, facilities, infrastructure and support. 2. Software Project Planning The PM selects the appropriate life cycle and determines the deliverables. The PM is responsible for the schedule, effort and cost estimation in essence of allocating resources to tasks and for determining the risks, quality and management plan. 3. Software Project Enactment The PM prepares and executes agreements with suppliers, monitors supplier performance and accepts supplier products. The PM is also responsible to implement of the project plans throughout monitoring and controlling the process and may change the plan if required. Reporting to the organization and the stakeholders about the progress the

9

BugRep Software Project Plan

plans is required on a periodical basis. 4. Review and Evaluation The PM determines periodically the stakeholders' satisfaction of the requirements. In all appropriate actions that are taken, change control and software configuration management procedures are adhered to, decisions are documented and communicated to all relevant parties. Plans are revisited and revised when necessary and reviews are being done periodically to personnel who provide insights as to the likelihood of adherence to plans as well as possible areas of difficultly. 5. Closure The PM determines the closure of the project according to the planned products that delivered, to the requirement that checked off and confirmed as satisfied and according to the objectives of the project that have been achieved. These processes involve all the stakeholders. The PM is also responsible to closure activities such as archiving of the project, analysis the issues, problems and opportunities encountered during the process, drawn from the process lessons for the organization. 6. Software Engineering Measurement The PM defines the scope of measurement and commits resources for them; assigning resources includes allocation of responsibility for the various tasks of the measurement process. Moreover, planning of the measurement process, characterizing the organization unit, identifying information needs, selecting measures, and defining data collection for analyses, and reporting is required. The PM performs the Measurement process (by collect analysis and communicating the results to the peers). All the information products are being evaluated and the PM determines the results strengths’ and weaknesses’.

5.2 Requirement manager Requirement Manager is responsible for defining and managing software requirements across the five critical requirements process areas: elicitation, analysis, specification, validation and management. The following paragraphs will provide a brief explanation about the role of RM in each area: 1. Requirement Elicitation The RM should be concerned with where software requirements come from and how the software engineer can collect them. The last two questions deals with: • Identification of sources (i.e. goals, domain knowledge, stakeholders, operational environment),

10

BugRep Software Project Plan



Adopted techniques (i.e. interviews, scenarios, prototypes, facilitated meetings, observations).

2. Requirement Analysis The RM should detect and resolve conflicts between requirements, discover the bounds of the software and how it must interact with its environment, and elaborate system requirements to derive software requirements. In order to achieve the aforementioned demands, RM uses the following methods: • requirement classification (i.e. functional/non-functional, product/process, priority, scope, and volatility/stability) • requirement modelling; as an aid for understanding the problem (e.g. using UML) • Architectural design and requirements allocation • Requirements negotiation; this method is required when there are conflicts between two stakeholders requiring mutually incompatible features, in this cases the RM should reach a consensus on an appropriate trade-off. 3. Requirement Specification In this area RM role is production of document, such that it can be systematically reviewed, evaluated and approved. For complex systems, particularly those involving substantial non-software components, as many as three different types of documents are produced: system definition document, system requirements and software requirements. 4. Requirement Validation RM should ensure two important things regarding this area: first is that the software engineer has understood the requirements, and second is that all requirements document conform to company standards, and is understandable, consistent and complete. The RM is responsible of accomplishing it using the following methods: • Requirements review (i.e. assign representative group of reviewers for a brief look for errors, mistaken assumption, lack of clarity and deviation from standard practice). • Prototyping (i.e. means of validating the software engineer's interpretation of the software requirements). • Model validation (i.e. quality validation of models developed during analysis phase). • Acceptance tests (i.e. plan how to verify each requirement). 5. Requirement Management. As product start to evolve, companies discover that they need to recover the requirements that motivated product features in order to assess that impact of proposed changes. Hence, requirements documentation and change

11

BugRep Software Project Plan

management are key to success of any requirement process. The RM executes these using the following methods: • Iterative nature of requirements process; in almost all cases, requirements continues to evolve as design and development proceeds. This often leads to the revision of requirements late in the life cycle. • Change management, which concerned with the procedure that need to be in place and the analysis that should be applied to proposed changes. Change has to be managed by ensuring that proposed changes go through a defined review and approval process. • Requirement attributes, this method refer to ancillary information which helps manage and interpret the requirements, which means various classification dimensions of the requirement and verification or acceptance test plan. • Requirement tracing, this method is concerned with recovering the source of requirement and predicting the effect of requirement change. • Measuring, this method interested in a practical meter for evaluating the "size" of a change in requirement, in estimating the cost of development and maintenance tasks. Above all this, the RM should make sure that requirements adhere to the following characteristics: Quantifiable, Verifiable, and Prioritized. Requirements should be stated as clearly and as unambiguously as possible, and where appropriate, quantitatively. It is very important to avoid vague and unverifiable requirements which depend for their interpretation on subjective judgment. In addition, requirements priority rating is extremely important since it enable trade-offs in the face of finite resources and a status value, to enable project progress to be monitored.

5.3 Development manager The development manager (also known as software construction manager) is responsible for the coding verification, unit testing and debugging of the software. The input to the construction phase is the design and the output is the source for the testing, although depending on the software life cycle process these boundaries tend to blur. For example in a highly iterative process such as Extreme Programming, a lot of the design work is performed while in the construction phase. In other – more linear processes such as Waterfall the software construction manager’s role is minimized to coding and a much greater emphasis is given to the detailed design which is done upfront. The fundamental responsibilities of the construction manager are:

12

BugRep Software Project Plan

1. Minimizing complexity Emphasizing the creation of code that is simple and readable (rather than clever), through the usage of coding standards 2. Anticipating change Building software that will support change as requirements change. This is achieved by using different coding and testing techniques, languages and tools. 3. Construction for verification It is the software construction manager’s role to ensure a product which can be easily tested and verified. This can be achieved by writing unit tests (also known as developer tests), restricting the usage of complex or hard to understand software constructs, and following a given set of coding standards. 4. Following standards in construction The development manager should adhere to external standards, issued by bodies such the OMG or IEEE and ISO. Internal standards which relate to the organizational or corporate level should also be defined and followed. Some of the measurements used and collected by the development manager are the amount of code developed, code modified, code reused, code complexity, number of bugs found and fixed, etc. 5. Testing in the context of software construction The development manager is responsible for testing activities which relate to the construction of the software, specifically the unit tests and integration tests. Both are performed and written by the software construction team. In some construction models the tests are written after the coding. In others (such as Extreme Programming) the tests are written before the code which is known as Test Driven Development. 6. Construction quality It is the responsibility of the development manager to ensure the quality of the construction product. The tools used for this purpose are unit tests and integration test, Test driven development, usage of assertions, technical code reviews. The focus in the construction quality is on the code and the small scale design.

5.4 Software Quality Assurance Manager This position oversees all employees and functions of the Software Quality Assurance (SQA) Department. The incumbent will ensure that goals are set and that the mission of the department is communicated clearly to all. It is the sole responsibility of this position to intervene when situations escalate. This position will also provide guidance and coaching to all subordinates. The SQA

13

BugRep Software Project Plan

manager has the ability to be influential on technology used and should stay knowledgeable of new software and suggest upgrades as needed. 1. Report bugs, create and provide metrics on bugs as they move through the bug cycle 2. Communicate the status to all involved departments 3. Report environment changes that effect clients (internal or external) to the Development manager and Tests manager 4. Update, oversee and train team on the knowledge base of code related problems and fixes 5. Facilitate fixes through software development lifecycle 6. Track where each bug is in the process 7. Report turnaround times on all severities 8. Track bug trends 9. Track and monitor fixes and problems reported 10. Create and manage Internal Release Notes (i.e. what bugs where pushed, what was fixed, how many new bugs were created) 11. Document test use scenarios and processes 12. Train team on documentation of processes and scenarios

5.5 Design manager The design manager is responsible for the definition of the architecture, components and interfaces of a software system at a level of detail that enables their construction. There are two levels of design: • Software architectural design (also called top level design) Describes how software is decomposed and organized into components • Software detailed design – Describes the specific behaviour of these components Some of the key issues that the DM must handle are quality related – for example the system performance and also the decomposition, organization and packaging of the system into highly cohesive and low coupled modules. Other issues involve cross-cutting concerns which relate to the semantic behaviour of all or a subset the modules of the system and are called aspects. 1. Defining the software structure and architecture: It is the responsibility of the design manager to define the internal structure of the resulting software. The architecture of a software system can be described and documented using facets or views. Different aspects of the system which are orthogonal for example: the functional view vs. the structural view vs. the behavioural view vs. the data modelling view. 2. Detailed design and design patterns

14

BugRep Software Project Plan

A pattern can be defined as a common solution to a common problem in a given context. In the context of software design, patterns can be used by the design manger to described the detailed or lower level design – also known as micro architecture. A part of the design mangers role is to identify and design software product lines also known as Frameworks. In the context of Object-Oriented software construction Frameworks are defined as a partially complete software subsystem that can be extended by appropriately instantiating specific plugins. 3. Quality related software design issues The quality of the design can be measured by different attributes such as maintainability, robustness etc. Some are related to run time performance, while other is non runtime related (such as reusability or testability). The design manager can use design reviews to ensure the high quality of the software’s design. Other quality measurement tools are static analysis and simulation and prototyping. 4. Software design notations The design manager can use a set of tools and notations to describe the structural (static) and behavioural (dynamic) attributes of a software system.

5.6 Test manager Testing is an activity performed for evaluating product quality, and for improving it, by identifying defects and problems. Software testing is seen as an activity which should encompass the whole development and maintenance process and is itself an important part of the actual product construction. Planning for testing starts with the early stages of the requirement process, and test plans and procedures are systematically and continuously developed, and possibly refined, as development proceeds. Following are roles and responsibilities of the test manager: • Recruit and manage the testing team staff • Plan test budgeting and scheduling including test effort estimations • Test planning including development of testing goals and strategies • Selecting and introducing the test tools and environments • Verifying the quality of the requirements, including testability, requirement definition, test design and test execution • Analyze requirements and coordinate the planning and execution of test cases • Identify, report and track defects in the software • Design and develop test scripts, if relevant, (manual or automated) • Manage and perform different levels of testing (depending on the software nature), such as. o Unit Tests (Design Assistance only) – Since these tests are usually performed by development team, the role of the testing manager in this

15

BugRep Software Project Plan



• •

case is to work closely with the development team and assist them in their unit test design and other quality-assurance related issues o Integration Tests – The testing process for verifying the interaction between different software components o System Tests – Tests hat attempt to discover defects that are properties of the entire system rather than of its individual components o Regression Tests – Selective retesting of a system or component to verify that modifications have not caused unintended effects o Performance Tests – Tests that are aimed at verifying that the software meets the specified performance requirements, for instance, capacity and response time Test the software using various testing techniques, such as o Tests based on the software engineer’s intuition and experience with similar programs. o Specification-based tests – verify that the software is aligned with the relevant specifications o Code-based techniques – Tests that are aimed at covering all the statements or blocks of statements in a program, or specified combinations of them o Application-related tests – Tests that are based on the nature of the application, such as object-oriented testing, component testing, etc. Produce and continuously update relevant test documents, for example, Test Plan, Test Design Specification, Test Procedure Specification, Test Case Specification, Test Log, and Test Incident or Problem Report. Issue status reports that reflect the actual status of the different testing stages. These reports may cover such aspects as number of test cases specified, number of test cases executed, number of test cases passed, and number of test cases failed, among others.

5.7 Configuration manager 1. Coordinate software releases by maintaining documentation such as Environmental plan, release notes, release baseline documentation, and other artifacts required for the release. 2. Participate in project planning and coordination for major launches and upgrades. 3. Manage source control management system 4. Write and maintain application build scripts 5. Write and maintain application deployment scripts 6. Analyze and trouble shoot deployment issues 7. Install software into the various environments based on build requests submitted by the project manager or development team. 8. Ensure all build requests are associated with an approved scope item.

16

BugRep Software Project Plan

9. Publish a final build document to the Development teams for review and approval prior to movement of code to the client environment.

6 Planning, Tracking and Replanning 6.1 Planning We are planning 3 iterations throughout the version. The version will be tested and according to the feedback we'll decide whether to publish the version or fix it. For the fist version we will do a peer review 2 weeks before it will be published.

6.2 Tracking The team leader will track the schedule on a weekly basis. At the end of each month the team leader will examine the number of open calls against the closed ones, this will be another parameter whether to release the version or time or not.

6.3 Replanning The team leader will decide to either descope features or defer them to the next version in case there will be a fall behind schedule. The team leader will decide whether it's required to delay the release date of the version.

7 Planned Documents Peer Reviews Peer Review

Delivery Date

SRS Peer Review

04/01/2006

Design Peer Review

19/04/2007

8 Planned Software (prototypes) Peer Reviews Peer Review

Delivery Date

First Iteration Peer Review

03/05/2007

17

BugRep Software Project Plan

9 Resources 1 Team leader 1 Requirement manager 1 Development manager 1 Software quality manager 1 Design manager 1 Test manager 1 Configuration manager

10 Monthly Effort It is planned for each member in team 4 hours for a week (16 for months). Monthly effort for the team is 64 hours.

11 Traceability Mapping In order to enhance and complete the quality assurance process (as described in test manager role, see section 5.6), we have to perform traceability map, which document the links through User Requirements, items in the Design Model, Source Code units, Tests and User Documentation. Moreover, this process must be executed through all phases of software life-cycle to ensure capture and consideration of new software requirement or design changes. Information about the two ways mapping between the aforementioned subjects will be provided in one of the tests documents.

12 First Iteration Planning Defect management 12.1 Schedule Begin 15/4/2007 End 5/5/2007

18

BugRep Software Project Plan

12.2 Main functionalities • • •

Defect CRUD Defect details screen Search and Filter Defects

12.3 Infrastructure architecture •

Use Java DB

12.4 Risks •

Design complications The design phase has not started. Some unexpected complication might evolve. • Not all team members are familiar with the technology Due to short time frame, the team members will have to study the technology during the development phase. It might delay the first iteration. • Backend development might take more time than expected, and/or might no meet the requirements.

12.5 Marketing •

TBD

13 Second Iteration Planning Project and User management 13.1 Schedule Begin 6/5/2007 End 11/6/2007

13.2 Main functionalities • •

Project and User CRUD Project and User screen

13.3 Infrastructure architecture •

Use Java DB

19

BugRep Software Project Plan

13.4 Risks •

Deployment problems were not solved in the previous iteration

13.5 Marketing •

TBD

20

Software Requirements Specification

THE DEVELOPMENT MANAGER (ALSO KNOWN AS SOFTWARE ..... The PM is responsible to the application management activities which include planning ...

173KB Sizes 5 Downloads 316 Views

Recommend Documents

Software Requirements Specification
and Defect are entities that implement create, read, update and delete actions, but .... public String createDomain(String domainName) – Method creates a new.

Architectural Requirements Specification - GitHub
cumbersome tool to have to port to mobile application clients. 4. Page 7. Description of Components .1 Odin-CLI .1.1 Technologies. The command line interface will be implemented in Python 3, using built-in classes and libraries to provide a usable in

System Requirements Specification - GitHub
This section describes the scope of Project Odin, as well as an overview of the contents of the SRS doc- ument. ... .1 Purpose. The purpose of this document is to provide a thorough description of the requirements for Project Odin. .... Variables. â€

Architectural Requirements Specification - GitHub
porchetta tri-tip kielbasa kevin chicken hamburger sirloin. Cow pastrami short ribs shank. Sirloin spare ribs jowl, beef ham hock kielbasa ribeye prosciutto cow. Capicola pork chop landjaeger jowl venison beef ribs sirloin tri-tip tenderloin pastrami

System Requirements Specification - GitHub
System Requirements Specification. Project Odin. Kyle Erwin. Joshua Cilliers. Jason van Hattum. Dimpho Mahoko. Keegan Ferrett. Note: This document is constantly under revision due to our chosen methodology, ... This section describes the scope of Pro

Software Requirements Specification versi 2.pdf
There was a problem loading this page. Retrying... Whoops! There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Main menu. Whoops! There was a problem previewing

Modern Requirements Specification
However, trends in system development have made the numerous problems ... not only enabled better requirements management; they have also enabled the ..... requirements methods, and better-standardized content for our requirements.

Agile Software Requirements
and the Enterprise (Agile Software Development ... Enterprise (Agile Software Development Series), Full PDF Agile Software Requirements: Lean .... author of Managing the Design Factory; and leading expert on rapid product development.

HELM Web-based Editor Requirements Specification V1_0.pdf ...
3.1 Web-Editor Functional Requirements. ... 3.2 Non-Functional requirements . ... Page 3 of 15. HELM Web-based Editor Requirements Specification V1_0.pdf.

software design specification example pdf
There was a problem previewing this document. Retrying... Download. Connect more ... software design specification example pdf. software design specification ...

pdf-1480\agile-software-requirements-lean-requirements-practices ...
... of the apps below to open or edit this item. pdf-1480\agile-software-requirements-lean-requirements-practices-for-teams-programs-and-the-enterprise.pdf.