Instructions for CS 706 Project The purpose of the project is to let you choose a topic for an in-depth study. It is expected that you spend twenty hours on your project. Group projects are allowed. Note: I have posted a "project assignment". You can do this assignment as your project, or you can choose your own project topic. The project assignment involves writing and testing a concurrent program. Report for Project: Your report should double spaced. The format for the report is the following: - cover page - table of contents - text: problem definition, program design, test design, and analysis of test results. - references - program listings, with adequate comments. The text should be divided into sections. Your report should be stapled at the top left corner. Do NOT use binders. Everything you turn in will NOT be returned to you. In your report, you need to describe your effort as well as your results. It is possible that you will fail to achieve your original goal. However, this failure is not critical as long as you describe what you have done and explain the problems you have encountered. It is very important that you separate your own ideas from what you quote or extract from published literature. Use square brackets, e.g., [5] or [And91], to indicate references. Deadlines for submissions: - Tuesday, November 3. Send an email to the instructor with your topic, and a list of your group members (if any). - Last class (Tuesday, December 8): your final report is due at the beginning of the last class. No late reports will be accepted. Sample topics: - Install and use the NASA Java Pathfinder tool: https://sourceforge.net/projects/javapathfinder/ - Install and use the jCute testing tool: http://www.cs.berkeley.edu/~ksen/ - Threading in C++/CLI. Develop classes Thread and countingSemaphore. I have an article on C++/CLI - C++ IOstreams for TCP Connections: Implement the Ch. 6 TCPSender and TCPMailbox classes using the DTILIB IOStream/socket library (very similar to the Java socket classes). I have an article on this. - Write a paper on lock-free multithreading. - Apply reachability testing to one or more Java programs that you develop. (I can give you program ideas.) - Extend several classes in the java.util.concurrent package to support the testing and debugging techniques in the textbook. (Essentially, copy the code from our 706 classes into the right place in the java.util.concurrent classes.) - Research type problem: determine how to apply reachability testing to programs that contain VP operations - Convert (some of) the Chapter 5 Java message passing classes to C++. General topics in concurrent programming include: - specification of concurrency (CCS,LOTOS) - design of concurrent software systems - valuation/application/implementation of concurrent models/languages/ constructs - analysis/verification/testing/debugging of concurrent programs. Partial list of previously completed papers/projects: - implementation of monitor simulation tools in UCSD Pascal - implementation of testing and debugging tools for semaphores, monitors, Send/Receive, Ada, Concurrent C, OS/2, and Windows NT. - implementation of time-slicing for UCSD Pascal - comparison of concurrent languages - concurrent real-time issues in Ada and Ada 95 - static and dynamic analysis of real-time systems - implementation of concurrency control in distributed database systems - X-window visualization of SYN-sequences - survey of hardware constructs for concurrent programming Other Possible Topics: - Implement thread/semaphore/monitor/select class in C-sharp, Managed c++ - Performance analysis for distributed programs - Specification-based testing of semaphore- or monitor-based programs (modify the controller class in the lecture notes) - testing/debugging of concurrent CORBA programs - study of concurrent object-oriented programming (specification, design, testing) - study of communications protocol testing and debugging - integrating "specification" and "design" techniques - develop a graphical user interface for Java testing and debugging tools (using Java AWT) - test generation for concurrent programs or communications protocols - demonstrate the use of Lotos/CCS tools on a selected problem - explore the recent real-time extensions to Lotos The following journals publish papers related to concurrent programming: - ACM Transactions on Computer Systems - ACM Transactions on Programming Languages and Systems - Concurrency - Practice and Experience - Distributed Computing - IEEE Software - IEEE Transactions on Parallel and Distributed Systems - IEEE Transactions on Software Engineering - Journal of Parallel and Distributed Computing - Software - Practice and Experience Recent issues of these journals are kept in the periodical room of the library. The following conference proceedings contain papers on concurrent programming: - ACM Symposium on Software Testing and Analysis - IEEE Conference on Distributed Computing Systems. - Protocol Specification, Testing, and Verification. - Formal Description Techniques - Protocol Test Systems - International Conference on Network Protocols