in reply to Development Directory Structure and Technique
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
|
|---|