S T B H P N

Project #4 - Remote Code Page Management

Version 1.1
Due Date: Tuesday, April 30th, 2019

Purpose:

One focus area for this course is understanding how to structure and implement big software systems. By big we mean systems that may consist of hundreds or even thousands of packages1 and perhaps several million lines of code. We won't be building anything quite that large, but our projects may be considerably bigger than anything you've worked on before. In order to successfully implement big systems we need to partition code into relatively small parts and thoroughly test each of the parts before inserting them into the software baseline2. As new parts are added to the baseline and as we make changes to fix latent errors or performance problems we will re-run test sequences for those parts and, perhaps, for the entire baseline. Managing that process efficiently requires effective tools for code analysis as well as testing. How we do that code analysis is illustrated by the projects for this year.
The projects this Fall focus on building software testing tools. We will emphasize C++ code but want our tools to be easily extendable to other similar languages like C# and Java. In this fourth project we build and test a Remote Code Publisher, using parts we've built in Project #2 and Project #3, and an asynchronous Message-passing Communication channel we build in this project. Here's what we need to do for this project:
Implement a communication channel:
Most of that is already provided in https://github.com/JimFawcett/CppCommWithFileXfer.
Design messages:
You need to design messages for remote operations that mimic what you provided in Project #3. A Message class is provided as part of the communication channel implementation. You simply configure messages with that to trigger remote operations and to retrieve results.
Develop a server:
A server is needed to accept request messages, and use the Project #2 Code Publisher facility, as modified by Project #3 to carry out publishing operations. The server needs a message dispatcher that routes messages to the appropriate publication facilities. These diagrams will help you understand what is needed.
Connect Client to Publisher Server:
Use the C++\CLI translater you built in Project #3 to connect the Client GUI to the Code Publisher Server. That works in a manner very similar to the local connection you made there between Client and your local Code Publisher.
We will discuss each of these steps in class, spending a lot of time with the Communication channel. That will be covered in detail in Lecture #18. The TAs and I will give you some help during Help Sessions and Office Hours, but we won't layout the entire design for you.

Requirements:

Your Remote Code Publisher Solution:
  1. Shall use Visual Studio 2017 and its C++ Windows Console Projects, as provided in the ECS computer labs.
  2. Shall use Windows Presentation Foundation (WPF) for the Client's user display.
  3. (3) Shall assemble working parts from Projects #1, #2, and #3 into a Client-Server configuration. Unlike conventional Client-Server architectures, the Client need not wait for a reply from the Publisher server for a request before sending additional requests.
  4. (3) Shall provide a Graphical User Interface (GUI) for the client that supports navigating remote directories to find a project for conversion, and supports displaying the conversion results in a way that meets Project #3 requirements.
  5. (2) Shall provide message designs appropriate for this application. All messages are instances of the same Message class, but have a specified set of attributes and body contents suited for the intended task.
  6. (2) Shall support converting source code in the server and, with a separate request, transferring one or more converted files back to the local client, using the communication channel.
  7. (1) Shall demonstrate correct operations for two or more concurrent clients.
  8. (4) Shall include an automated test that accepts the server url and remote path3 to your project directory on its command line, invokes the Code Publisher, through its interface, to convert all the project files matching a pattern that accepts *.h and *.cpp files, and then opens the Client GUI's Display view. Please set the remote analysis path to the root of your Project #4 directory.

  1. In C#, a package is a single source code file that contains:
    • prologue, providing a name, brief descriptive phrase, author information, and environment information
    • description of the package's responsiblities and required files
    • maintenance history
    • class definitions
    • a main function that implements construction tests for all the defined code
  2. A software baseline is the set of all code considered to be part of the current system, excluding experimental code that individual developers are working on.
  3. The remote path is a path relative to the Server's file storage root, used to find the files to convert (remote path #1) and access the conversion results (remote path #2).

What you need to know:

In order to successfully meet these requirements you will need to know:
  1. How the Asynchronous Message-passing Communication Channel works.
  2. The standard Containers.