ABSTRACT

Software developers have an array of methods, tools, and techniquesgenerically, “practices”—to choose from in tackling the complexities of engineering good software. Practice choices can range from large-scope issues that will impact almost all the other decisions on a project (such as whether to use an iterative life cycle model to organize the work) to fine-grained decisions such as whether to use a specific testing approach. In addition to the suite of well-tested practices already in existence, new practices are being created all the time in an attempt to keep up with the ever-growing needs of contemporary software teams. Software developers are bombarded by these practices all the time in books, magazines, podcasts, and even in the scientific literature, yet remarkably little information is easily available that describes the usefulness of a particular practice in any given situation.