This is a very interesting question, and I too would very much like to hear about other people's experiences.

This is how I set up one project. The directory structure seemed to work fine and has now become a kind of template when I start new projects. The basic structure looks like this:

PlayerReport
PlayerReport\Project Management
PlayerReport\Modules
PlayerReport\Release
PlayerReport\lib
PlayerReport\man

The end product is a application used to parse log files from online casino games (like Blackjack, Craps etc) and create reports from them.

PlayerReport
The name of the project

PlayerReport\Project Management
Various documents regarding external documentation, formats, planning, schedules etc. Word-, Excel-, text files.

PlayerReport\Notes
Misc notes and files that could be nice to keep but doesn't belong anywhere else in the project anymore, e.g. obsoleted source files.

PlayerReport\Modules
All external modules that needs to be installed for the application to be run/installed.

PlayerReport\Release
Two things: First, the entire application ready to be installed in another environment (production or test). In my case this means a ZIP file with a standalone .exe version of the application created with perlapp, along with all other external files like config files, data files, images etc. When/if this application will be ported to Unix, this package will be the main thing to change.

Second, a script that makes a "build" of the application, performing regression tests (see below), creating the standalone .exe-file, and creating the distribution ZIP file.

PlayerReport\lib
This is where the actual code lives. In this directory I have a .pl file for the application. Also, all files needed to run the script, like config-files, small test-scripts for trying things out, etc. Modules live in subdirs:

PlayerReport\lib\GameLog
PlayerReport\lib\GameLog\Userlog
PlayerReport\lib\GameLog\Session
PlayerReport\lib\GameLog\Round
PlayerReport\lib\Game
PlayerReport\lib\Game\Hand
PlayerReport\lib\Game\Bet
PlayerReport\lib\Game\Decoder
PlayerReport\lib\Game\Card
PlayerReport\lib\Game\Reels
PlayerReport\lib\GameView

PlayerReport\lib\t
The test code for the most important, most coupled, most volatile classes. I still don't perform regression tests on all classes :(

I perform regression tests both on a "holistic" level, feeding the entire system certain input, excpecting certain output, and on a unit level.

PlayerReport\lib\t\Holistic
PlayerReport\lib\t\Game
PlayerReport\lib\t\GameView
PlayerReport\lib\t\GameLog
PlayerReport\lib\t\...

PlayerReport\man
The automatically generated man pages for all classes. I have written a tool that "flattens" class documentation, bringing the POD of all parent classes into one HTML page so I have the entire interface for a class in one file.

PlayerReport\man\GameView
PlayerReport\man\...

...

/J


In reply to Re: Development Directory Structure and Technique by jplindstrom
in thread Development Directory Structure and Technique by ichimunki

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.