T B H P N

Project #4 - Remote Package Dependency Analysis

Version 1.1
Due Date: Wednesday, December 5th, 2018
Project #4 helper files

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 tools for code analysis. We will emphasize C# code but want our tools to be easily extendable to other similar languages like C++ and Java.

Code analysis consists of extracting lexical content from source code files, analyzing the code's syntax from its lexical content, and building a Type Table holding the dependency results. Alternately you can provide an Abstract Syntax Tree (AST) that holds the results of our analysis. It is then fairly easy to build several backends that can do further analyses on the AST to construct code metrics, search for particular constructs, evaluate package dependencies, or some other interesting features of the code.

You will find it useful to look at the Parsing blog for a brief introduction to parsing and code analysis.

In this fourth project we will build and test a remote package dependency analyzer in C# that consists of, at least, these packages:

A typical application of remote code analysis is for Code Repositories. For that, Quality Assurance staff will run analyses on code in a remote repository from clients on their desktops. Also, developers will analyze code, written by other developers, that they need for their own work.

Requirements:

Your Remote Dependency Analysis Solution:
  1. Shall use Visual Studio 2017 and its C# Windows Console Projects, as provided in the ECS computer labs.
  2. Shall use the .Net System.IO and System.Text for all I/O.
  3. (2) Shall provide C# packages as described in the Purpose section.
  4. (4) The Server packages shall evaluate all the dependencies between files in a specified file set, based on received request messages.
  5. (3) The Server packages shall find all strong components, if any, in the file collection, based on the dependency analysis, cited above.
  6. (4) The Client packages shall display requested results in a well formated GUI display.
  7. (3) Shall include an automated unit test suite that demonstrates you meet all of the functional requirements, stated above4.
  8. (4) Shall update the OCD you developed in Project #1 to include all the things you've added to Project #2 in Projects #3 and #4.

  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. You will be asked to demonstrate the operation of the Remote Dependency Analyzer, using two processes on the same machine, e.g., your connection will be to 'localhost'. We do this to make the grading process as painless as possible.
  4. This is in addition to the construction tests you include as part of every package you submit.

What you need to know:

In order to successfully meet these requirements you will need to know:
  1. Basics of the WCF and WPF frameworks
  2. Basics of the C# language: C# tutorial - PROGRAMIZ
  3. The .Net Containers.