Skip to main content
Log in

A class library for implementing, testing, and debugging concurrent programs

  • Regular Contribution
  • Published:
International Journal on Software Tools for Technology Transfer Aims and scope Submit manuscript

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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Similar content being viewed by others

References

  1. Carver, R., Lei, Y.: A general model for reachability testing of concurrent programs. In: International Conference on Formal Engineering Methods, pp. 76–98 (2004)

  2. Carver R., Tai K.: Replay and testing for concurrent programs. IEEE Softw. 8(2), 66–74 (1991)

    Article  Google Scholar 

  3. Tai K., Carver R., Obaid E.: Debugging concurrent ada programs by deterministic execution. IEEE Trans. Softw. Eng. 17(1), 45–63 (1991)

    Article  Google Scholar 

  4. Tai, K.: On testing concurrent programs. In: COMPSAC 85, pp. 310–317 (1985)

  5. 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)

  6. 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)

    Article  Google Scholar 

  7. 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)

  8. Lei, Y., Carver, R.: Reachability testing of semaphore-based programs. In: 28th Computer Software and Applications Conference (COMPSAC), pp. 312–317 (2004)

  9. Lei, Y., Carver, R.: Reachability testing of monitor-based programs. In: International Conference on Software Engineering and Applications, pp. 312–317 (2004)

  10. Lei Y., Carver R.: Reachability testing of concurrent programs. IEEE Trans. Softw. Eng. 32(6), 382–403 (2006)

    Article  Google Scholar 

  11. Feitelson D.: Deadlock detection without wait-for graphs. Parallel Comput. 17(12), 1377–1383 (1991)

    Article  Google Scholar 

  12. Carver R., Tai K.: Modern Multithreading. Wiley, New York (2006)

    Google Scholar 

  13. Tai K., Carver R.: VP: A new operation for semaphores. ACM Oper. Syst. Rev. 30(3), 5–11 (1996)

    Article  Google Scholar 

  14. Magee J., Kramer J.: Concurrency: State Models & Java Programs. Wiley, New York (1999)

    MATH  Google Scholar 

  15. Ada Language Reference Manual. ISO/IEC 8652:1995(E) (1983)

  16. Lea D.: The java.util.concurrent synchronizer framework. Sci. Comput. Program. 58(3), 293–309 (2005)

    Article  MathSciNet  Google Scholar 

  17. Lamport L.: Time, Clocks, and the ordering of events in a distributed system. Commun. ACM. 21(7), 558–565 (1978)

    Article  MATH  Google Scholar 

  18. Carver R., Tai K.: Use of sequencing constraints for specification-based testing of concurrent programs. IEEE Trans. Softw. Eng. 24(6), 471–490 (1998)

    Article  Google Scholar 

  19. Godefroid, P.: Model checking for programming languages using VeriSoft. In: 24th ACM Symposium on Principles of Programming Languages, pp. 174–186 (1997)

  20. Ricart G., Agrawala A.: An optimal algorithm for mutual exclusion in computer networks. Commun. ACM 24(1), 9–17 (1981)

    Article  MathSciNet  Google Scholar 

  21. 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)

  22. Kuhn D., Wallace D., Gallo A.: Software fault interactions and implications for software testing. IEEE Trans. Softw. Eng. 30(6), 418–421 (2004)

    Article  Google Scholar 

  23. Cohen, B., Colbourn, C., Gibbons, P., Mugridge, W.: Constructing test suites for interaction testing. In: International Conference on Software Engineering, pp. 38–48 (2003)

  24. Tung, Y., Aldiwan, W.: Automating test case generation for the new generation mission software system. In: IEEE Aerospace Conference, pp. 431–437 (2000)

  25. 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)

    Article  Google Scholar 

  26. 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)

    Article  Google Scholar 

  27. 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)

  28. Tai K., Lei Y.: A test generation strategy for pairwise testing. IEEE Trans. Softw. Eng. 28(1), 109–111 (2002)

    Article  Google Scholar 

  29. Garg V.: Concurrent and Distributed Computing in Java. Wiley, New York (2004)

    Book  Google Scholar 

  30. Suzuki I., Kasami T.: A distributed mutual exclusion algorithm. ACM Trans. Comput. Syst. 3(4), 344–349 (1985)

    Article  Google Scholar 

  31. Ma Y., Offutt J., Kwon Y.: MuJava: an automated class mutation system. J. Softw. Test. Verification Reliab. 15(2), 97–133 (2005)

    Article  Google Scholar 

  32. μJava, http://ise.gmu.edu~ofut/mujava/

  33. Katz S., Peled D.: Defining conditional independence using collapses. Theor. Comput. Sci. 101, 337–359 (1992)

    Article  MATH  MathSciNet  Google Scholar 

  34. 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)

  35. 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)

  36. 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)

    Article  MATH  Google Scholar 

  37. Havelund K., Pressburger T.: Model checking Java programs using Java PathFinder. Int. J. Softw. Tools Technol. Transf. 2(4), 366–381 (2000)

    Article  MATH  Google Scholar 

  38. 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)

    Article  Google Scholar 

  39. 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)

  40. 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)

    Article  Google Scholar 

  41. Bacon, D., Strom, R., Tarafdar, A.: Guava: a dialect of Java without data races. In: OOPSLA ’00, pp. 382–400 (2000)

  42. 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)

  43. 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)

  44. Long B., Hoffman D., Strooper P.: Tool support for testing concurrent Java components. IEEE Trans. Softw. Eng. 29(6), 555–566 (2003)

    Article  Google Scholar 

  45. 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)

  46. Carver R.: Testing abstract distributed programs and their implementations. J. Syst. Softw. 33, 223–237 (1996)

    Article  Google Scholar 

  47. Koppol P., Carver R., Tai K.: Incremental integration testing of concurrent programs. IEEE Trans. Softw. Eng. 28(6), 607–623 (2002)

    Article  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Richard H. Carver.

Rights and permissions

Reprints 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

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10009-009-0102-9

Keywords

Navigation