Putting Requirements and Quality at the Core of Global Service Delivery: Current Efforts and Future Plans at Pace University

This paper outlines some initial steps we have taken at Pace University to prepare Computer Science students for working in a service-oriented business environment. In such an environment, we suggest that software procurement and development become tasks that revolve around articulating needs and finding a way to match these needs to available supply, wherever this supply may be sourced. The capability to act as either a client or a provider in this context thereby demands the mastery of a number of skills. Firstly, the ability to determine the changing services that are required and to describe these needs so as to support on-demand service acquisition. Secondly, the ability to develop, assure and assess the quality of component services as part of a l arger global supply chain. Our Software Engineering teaching emphasizes the centrality of requirements engineering and quality processes, and designs student projects that provide experience in co-production via distributed global software development. We believe these skills are fundamental to supporting service determination and delivery. INTRODUCTION Over the past few years, the way in which we procure and develop software has been changing to leverage the economic advantage of global markets. To prepare students for this way of working, we have been making incremental changes to the Computer Science curriculum at Pace University, both at the undergraduate and graduate levels. Our position has been that there are some prerequisite and enduring skills that need to be emphasized to fully realize the benefits of service-orientation and so enable on-demand business. These skills revolve around determining what customers need and specifying these needs in a service-oriented manner, along with the capacity to develop quality software to implement such services, assured to a sufficient level of quality and dependability. These skills pertain to the disciplines of requirements engineering, quality assurance and software testing. These are core skills that we advocate and promote at the graduate level in the curriculum of a specialist Masters degree in Software Design and Development. Within this degree we offer a sequence of courses on Systems Requirements Engineering, Software Reliability and Quality Assurance, and Software Testing. At the undergraduate level, we bring the essence of this graduate teaching into the capstone course on Software Engineering. This is a practical course that is centered on group project work. To give students requisite exposure to global working, we craft projects that enable students to experience multiple sides of the offshore outsourcing relationship. We have been working closely with the Institute of Technology of Cambodia and the University of Delhi to set up an innovative three-way partnership to achieve these objectives. This paper outlines our efforts to date with the graduate courses and the integration of this knowledge into the project-based undergraduate teaching. It highlights both why and how we propose these efforts support the move towards service orientation. We further illustrate how we have been using IBM technology in these courses, leveraging the benefits of the IBM Academic Initia tive, and also suggest how we hope to capitalize upon and contribute to the proposed Shared Software Infrastructure (SSI) initiative to further support our efforts. CENTRALITY OF REQUIREMENTS The term ‘service’ has been defined as “a provider/client interaction that creates and captures value”. ‘Value’ can be considered the quality that renders something desirable or worthwhile. Central to this definition is therefore an understanding of the stakeholders involved in an exchange and their respective needs. The area of Software Engineering that deals with these concerns is Requirements Engineering. Our teaching in the area of Requirements Engineering focuses on stakeholder identification, needs elicitation and negotiation, and requirements description. Notably, the issue of who is a provider and who is a client is not always trivial; there is often a reciprocal element to consider if the engagement is to be mutually beneficial. Students therefore learn about the dependencies and social networks that underpin any complex software development project. In addition, it is rarely sufficient to write a monolithic requirement specification, so students learn the skills required to break down needs into interlocking and smaller component areas, within a framework that is supportive of change and integration. These skills are critical to the articulation and definition of services. How the satisfaction of a requirement is sourced is increasingly immaterial. It may be outsourced to a software house, capability may be purchased off the shelf or a service may be requested dynamically over the Internet. Writing requirements in terms of services, and conversely the task of describing software components in 1 http://www.research.ibm.com/ssme/services.shtml. terms of services, is a focal aspect of our requirements training. ASSURING AND ASSESSING QUALITY In a service-oriented world, one can select off the shelf services, on the fly, to satisfy dynamically changing requirements. The issue here becomes one of not only ensuring that the selected service does what is required, but also one of trust or dependability. The service will have to satisfy specified functional requirements within certain constraints, be these with respect to performance, reliability or security, etc. There may also be the need to check that the selected service does not do anything that is not required, particularly when integrated into a wider systems context. Students need to acquire the skills that are essential to both assess candidate services and to assure services when initially developed prior to deployment. We provide training in these fundamental skills through a series of courses on Software Quality Assurance and Software Testing. Our Software Quality Assurance course focuses on the critical link between requirements and software quality, and considers the issue of testing at a systems and user acceptance level. Our Software Testing course covers developerlevel testing, such as unit testing. All our testingrelated courses revolve around test planning, test design and development, test execution, test reporting and test exit criteria. Inspired by the practices of the Agile Methodologies, our teaching emphasizes test-first, test-driven development and the close involvement of the client when considering software quality factors. The general ability to assess and assure quality of software is a skill critical to deploying and procuring dependable services. GLOBAL CO-PRODUCTION EXPERIENCE Since 2005, the focus of our undergraduate capstone Software Engineering course has been global software development. In 2005, teams of Pace University and Institute of Technology of Cambodia students worked together to develop software products for the Cambodian market [1]. We organized the student projects so that: (a) the Cambodian students acted as clients and end-