Using the file system as the main datastore, this tool helps manage work breakdown methodology, milestones and time management.
The core elements will be strongly guided, and completion of them equates to approximately 40% of the marks. Beyond that, students should problem solve, in a graded hierarchy of difficulty and completion to achieve higher marks.
It is unrealistic to expect to meet all the feature criteria listed
Part of the task therefore involves deciding which elements to implement in order to maximise your mark.
Some of the features may be best implemented using shell (bash or zsh) scripting, or could be done directly in C.
Tests will be provided for 1...10, which will also define the command line arguments required (including the sub-command name for the features, where appropriate e.g. pm feature feature_name or pm feature move new_feature_name ).
Coursework submission will include creating project documentation (using doxygen) so code must be well commented. Any shell scripts or make files included in the solution must be included in the documentation. The submission itself must be the URL of the CSGitLab repository used.
- Be able to create basic file structure for project
- Abort if requested project/feature name already exists under 'root' folder. Here 'root' does not mean the / root of the file system, but the folder from which the program is run.
- Requires checking existing file system for matching name
- Requires using branching (if) to exit program if necessary
- Initialise git repository
- Should set up CSGitLab project etc.
- Feature management
- Must implement a method of having a shorthand code for feature e.g. F1, F2.1..., stored in a file.
- Must implement lookup to facilitate getting path from shorthand code
- Should include setting up git branch as appropriate
- Include mechanism for renaming features (subtrees)
- Include mechanism for moving feature to new location in tree (folder hierarchy)
- Output tree diagram - PBS or WBS (svg, using plantuml)
- Requires tree walk (iterative or recursive)
- Must exclude folders that start with a '.'
- Should use the plantuml tool
- Could implement from scratch (much harder, more marks)
- Time/workload estimate information stored in files in subfolders
- Should have mechanisms for adding these from the program not just editing the files
- Should include subtrees costs in parent tree total
- Time/workload added to output diagram
- Could also produce Gantt chart (using plantuml)
- Output diagram includes links (when used in browser, for example)
- Should use plantuml to do this
- Dependencies information across tree branches
- Must identify relevant other paths in tree to do this
- Guided work breakdown wizard (Slightly advanced, would require interactive questions/answer handling)
- Needs a number of sub-features, such as minimum time allocation threshold, user input parsing
- Multi-user (Advanced, would require some form of permissions model)
- may be best done using a traditional SQL database, but can use flat files. Complex task.
- Available as web application (Advanced, probably easiest creating a simple embedded server)
- sample code for simple communications between applications will be covered
- GOAP recommendation of suitable pathway (Advanced, can use existing GOAP library, however)
- GOAP uses a 'heap' data structure