Abstract
We describe the Modern Multithreading (MM) class library. MM is a class library consisting of thread and synchronization classes that provide significant support for testing and debugging multithreaded programs. The synchronization classes implement commonly used synchronization objects such as semaphores, monitors, and asynchronous and synchronous message passing channels, for programs that run on a single computer or on a distributed system. MM uses controlled executions to provide program tracing and replay and to support a number of implementation-based and specification-based testing techniques, including non-deterministic and deterministic testing and several forms of reachability testing. MM is portable and easy to use, and has been implemented in Java and C++, with C++ versions for the POSIX Pthreads library and for the Windows Win32 API.
Similar content being viewed by others
References
Carver, R., Lei, Y.: A general model for reachability testing of concurrent programs. In: International Conference on Formal Engineering Methods, pp. 76–98 (2004)
Carver R., Tai K.: Replay and testing for concurrent programs. IEEE Softw. 8(2), 66–74 (1991)
Tai K., Carver R., Obaid E.: Debugging concurrent ada programs by deterministic execution. IEEE Trans. Softw. Eng. 17(1), 45–63 (1991)
Tai, K.: On testing concurrent programs. In: COMPSAC 85, pp. 310–317 (1985)
Carver, R., Tai, K.: Deterministic execution testing of concurrent Ada programs. In: Tri-Ada ’89: Ada Technology in Context: Application, Development, and Deployment, pp. 528–544 (1989)
Hwang G., Tai K., Huang T.: Reachability testing: an approach to testing concurrent software. Int. J. Softw. Eng. Knowl. Eng. 5(4), 493–510 (1995)
Lei, Y, Tai, K.: Efficient reachability testing of asynchronous message-passing programs. In: 8th IEEE International Conference on Engineering for Complex Computer Systems, pp. 35–44 (2002)
Lei, Y., Carver, R.: Reachability testing of semaphore-based programs. In: 28th Computer Software and Applications Conference (COMPSAC), pp. 312–317 (2004)
Lei, Y., Carver, R.: Reachability testing of monitor-based programs. In: International Conference on Software Engineering and Applications, pp. 312–317 (2004)
Lei Y., Carver R.: Reachability testing of concurrent programs. IEEE Trans. Softw. Eng. 32(6), 382–403 (2006)
Feitelson D.: Deadlock detection without wait-for graphs. Parallel Comput. 17(12), 1377–1383 (1991)
Carver R., Tai K.: Modern Multithreading. Wiley, New York (2006)
Tai K., Carver R.: VP: A new operation for semaphores. ACM Oper. Syst. Rev. 30(3), 5–11 (1996)
Magee J., Kramer J.: Concurrency: State Models & Java Programs. Wiley, New York (1999)
Ada Language Reference Manual. ISO/IEC 8652:1995(E) (1983)
Lea D.: The java.util.concurrent synchronizer framework. Sci. Comput. Program. 58(3), 293–309 (2005)
Lamport L.: Time, Clocks, and the ordering of events in a distributed system. Commun. ACM. 21(7), 558–565 (1978)
Carver R., Tai K.: Use of sequencing constraints for specification-based testing of concurrent programs. IEEE Trans. Softw. Eng. 24(6), 471–490 (1998)
Godefroid, P.: Model checking for programming languages using VeriSoft. In: 24th ACM Symposium on Principles of Programming Languages, pp. 174–186 (1997)
Ricart G., Agrawala A.: An optimal algorithm for mutual exclusion in computer networks. Commun. ACM 24(1), 9–17 (1981)
Kuhn D., Reilly, M.: An investigation of the applicability of design of experiments to software testing. In: 27th NASA/IEEE Software Engineering Workshop. NASA Goddard Space Flight Center, pp. 91–95 (2002)
Kuhn D., Wallace D., Gallo A.: Software fault interactions and implications for software testing. IEEE Trans. Softw. Eng. 30(6), 418–421 (2004)
Cohen, B., Colbourn, C., Gibbons, P., Mugridge, W.: Constructing test suites for interaction testing. In: International Conference on Software Engineering, pp. 38–48 (2003)
Tung, Y., Aldiwan, W.: Automating test case generation for the new generation mission software system. In: IEEE Aerospace Conference, pp. 431–437 (2000)
Wallace D., Kuhn D.: Failure modes in medical device software: an analysis of 15 years of recall data. Int. J. Reliab. Qual. Saf. Eng. 8(4), 351–371 (2001)
Lei Y., Carver R., Kacker R., Kung D.: A combinatorial testing strategy for concurrent programs. J. Softw. Test. Verification Reliab. 17(4), 207–225 (2007)
Lei, Y., Tai, K.: In-parameter-order: A test generation strategy for pairwise testing. In: 3rd IEEE International Conference on High-Assurance Systems Engineering Symposium, pp. 254–261 (1998)
Tai K., Lei Y.: A test generation strategy for pairwise testing. IEEE Trans. Softw. Eng. 28(1), 109–111 (2002)
Garg V.: Concurrent and Distributed Computing in Java. Wiley, New York (2004)
Suzuki I., Kasami T.: A distributed mutual exclusion algorithm. ACM Trans. Comput. Syst. 3(4), 344–349 (1985)
Ma Y., Offutt J., Kwon Y.: MuJava: an automated class mutation system. J. Softw. Test. Verification Reliab. 15(2), 97–133 (2005)
Katz S., Peled D.: Defining conditional independence using collapses. Theor. Comput. Sci. 101, 337–359 (1992)
Alpern, B., Choi, J.D., Ngo, T., Sridharan, M.: DejaVu: Deterministic Java replay debugger for Jalapeno VM. In: 2000 ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA’00), pp. 165–166 (2000)
Konuru, R., Srinivasan, H., Choi, J.: Deterministic replay of distributed Java applications. In: 14th International Parallel & Distributed Processing Symposium (IPDPS 00), pp. 219–228 (2000)
Edelstein O., Farchi E., Goldin E., Nir Y., Ratsaby G., Ur S.: Framework for testing multi-threaded Java programs. Concurr. Comput. Pract. Experience 15(3–5), 485–499 (2003)
Havelund K., Pressburger T.: Model checking Java programs using Java PathFinder. Int. J. Softw. Tools Technol. Transf. 2(4), 366–381 (2000)
Savage S., Burrows M., Nelson G., Sobalvarro P., Anderson T.: Eraser: a dynamic data race detector for multithreaded programs. ACM Trans. Comput. Syst. 15(4), 391–411 (1997)
Pozniansky, E., Schuster, A.: Efficient on-the-fly data race detection in multithreaded C++ programs. In: Principles and Practice of Parallel Computing, pp. 179–190 (2003)
Itzkovitz A., Schuster A., Zeev-Ben-Mordehai O.: Toward integration of data race detection in DSM systems. J. Parallel Distributed Comput. 59(2), 180–203 (1999)
Bacon, D., Strom, R., Tarafdar, A.: Guava: a dialect of Java without data races. In: OOPSLA ’00, pp. 382–400 (2000)
Musuvathi, M., Qadeer, S.: Iterative context bounding for systematic testing of multithreaded programs. In: 2007 ACM SIGPLAN Conference on Programming language design and implementation, pp. 446–455 (2007)
Qadeer, S., Wu, D.: KISS: keep it simple and sequential. In: ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), pp. 14–24 (2004)
Long B., Hoffman D., Strooper P.: Tool support for testing concurrent Java components. IEEE Trans. Softw. Eng. 29(6), 555–566 (2003)
Lei, Y., Carver, R., Kung, D., Gupta, V., Hernandez, M.: A state exploration-based approach to testing Java monitors. In: International Symposium on Software Reliability Engineering (ISSRE), pp. 256–265 (2006)
Carver R.: Testing abstract distributed programs and their implementations. J. Syst. Softw. 33, 223–237 (1996)
Koppol P., Carver R., Tai K.: Incremental integration testing of concurrent programs. IEEE Trans. Softw. Eng. 28(6), 607–623 (2002)
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Carver, R.H., Lei, Y. A class library for implementing, testing, and debugging concurrent programs. Int J Softw Tools Technol Transfer 12, 69–88 (2010). https://doi.org/10.1007/s10009-009-0102-9
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10009-009-0102-9