ECE 417/617: Project Assignment

Contents:  Overview -- Schedule of deliverables -- Suggested project topics -- Computer laboratories -- Project documents -- Suggested C++ coding conventions -- CVS instructions


Overview

A significant part of this class is the semester-long project.  Each group will operate as a small software team, designing, implementing, and documenting a software system of their choice.  Teams will consist of 4-5 members and are expected to build working systems, with features added in successive milestones.  In the first phase of the semester students will form teams, select a problem to solve, and plan and document their project.  In the second phase the teams will implement their solutions by coding.  This two-fold division should not be taken too strictly:  Design and documentation will continue to some extent throughout the second phase, and some exploratory coding should be conducted in the first phase.

Projects should be implemented primarily in C++, have a significant UI interface, and link with at least one external library.  C++ is the most popular and most powerful development language in use today, builds on the widely prevalent C language, and is essential to a well-rounded computer engineering curriculum.  (Portions of the project may be implemented in other languages, though, depending upon the needs of the project.)  UI interfaces present a dimension of design problems, such as event-driven processing, communicating effectively with a user, and possibly multi-threading, that are not necessarily present in other systems.  External libraries enable teams to build upon the work of others and to learn how to use such work effectively.  Deviations from these requirements (such as using Java instead of C++) require prior approval from the instructor and will be allowed only if a compelling argument can be made.


Schedule of deliverables

Date Deliverable
1/16 team formation
1/21 project web page
1/28 problem statement
2/4 Software Project Management Plan (SPMP)
2/11 Requirements Analysis Document (RAD)
2/18 System Design Document (SDD)
2/25 Milestone 1
3/1 - 3/5 [design review]
3/10 Milestone 2
3/24 Milestone 3
3/29 - 4/2 [code review]
4/7 Milestone 4
4/19 - 4/23 Final demos
4/23 Final report

Documents (problem statement, RAD, SPMP, SDD, and final report) are due by 11:59pm on the date shown.  Documents should be posted on your web page and emailed to the instructor, and a hardcopy turned in by the next morning.  Teams are expected to conduct weekly meetings throughout the semester, submitting the minutes to the instructor via email with the subject line, "Meeting minutes".  Milestones are in-class presentations in which teams communicate their progress to the class via working demos, diagrams, etc; they also include submission of source code.  Each team will meet with the instructor midway through the project for a design review and a code review.  In the final week, teams must present a working demo of their integrated system to the class.  There will be no final exam.


Suggested project topics

Some suggested projects (but feel free to think of your own):


Computer laboratories


Project documents

These documents are required as part of your project:

Other documents include


Suggested C++ coding conventions

Writing code that compiles and runs is not enough.  An important part of software engineering is writing code that is also easy to read by other programmers, not only those in your team but also those whom you've never met.  Although there is no single agreed-upon standard, here are some conventions that are not uncommon in the industry.

Example:

   /**
    This class keeps track of time.
   
    @author Ima Coder
   */
   
   class TimeManager
   {
   public:
       typedef int SecondType;
       TimeManager();
       double GetTime(int day, const TimeStamp& anotherTime);
   private:
    double m_dayOfTheWeek;
   };

Among the many standards on the web, Todd's very extensive and helpful C++ coding standard is similar to that above and also contains some insightful points about software engineering in general.  Wallach has a shorter coding convention.  Lott maintains an extensive list of conventions, some of which are quite extensive.   Linus Torvald's conventions for the Linux kernel makes a fun read, though it's geared toward C rather than C++.  And, for something completely different, don't forget to check out Microsoft's Hungarian notation.


CVS (concurrent versions system) instructions

To start using CVS through WinCvs, either follow Saurabh's "Intro to WinCvs" or do the following:

First, encrypt your password using
    /usr/local/bin/perl -e 'print crypt("MyPassword","St") . "\n";
then copy and paste the result and send it to the T.A. so we can put it into the CVS passwd file.  Replace MyPassword with your password, and use /usr/bin/perl instead if the above doesn't work.  Then,

  1. Download and install WinCvs/MacCvs/gCvs on your development machine
    (Or, if you're working on a Clemson DCIT Windows machine and do not have permission to install software, then copy the file wincvs-postinstall.zip (the resulting install directory) to your U: drive and unzip it)
  2. Download and install an external diff program (e.g., WinMerge for Win32 or xxdiff for Unix)
  3. Start WinCvs (wincvs.exe)
  4. Click Admin.Preferences
    1. Under General tab,
      1. Set CVSROOT to yourid@cvs.ces.clemson.edu:/pub/cvsprojects/ece417
        (Replace yourid with your student id)
      2. Set Authentication to "passwd" file on the cvs server
    2. Under WinCvs tab,
      1. Enter path of external diff program, and click checkbox
      2. Set Home folder
  5. Click Admin.Login and type your password (this will store your password locally in your Home folder/.cvspass)
  6. Click Create.Checkout module
    1. Enter module name, one of either {3dmm, bibtex-manager, gim, klt-ui, or virtual-advisor}
    2. Enter local folder to checkout to
  7. Now CVS is ready for you to add your own files, modify them, etc.!  For reference, see the on-line CVS Cederqvist manual or Redbean manual

Alternatively, if you would prefer to use the command-line version,

  1. Download and install cvs on your development machine
  2. Create ~/.cvsrc file with a single line: 
    cvs -d :pserver:yourid@cvs.ced.clemson.edu:/pub/cvsprojects/ece417
    (Replace yourid with your student id)
  3. type cvs login at the command prompt, along with your password (this will store your password locally in your ~/.cvspass file)
  4. cd to the directory in which you want to copy files from the repository
  5. type cvs checkout name, where name is one of {3dmm, bibtex-manager, gim, klt-ui, or virtual-advisor}
  6. Now CVS is ready!  For reference, see one of the manuals above