You will need to demonstrate decomposition in your code (ie it should contain multiple functions, rather than one large single function). You may therefore need to decompose a large unstructured program from the Internet into smaller functions that are easier to understand.
Main Report Sections:
1. System Requirements and Your Algorithm (10%)
Describe your management problem or business-idea and outline the purpose of the software system/application that addresses this problem/idea in the form of a brief set of system requirements, listing:
The functional requirements, identifying the key functions with their data inputs and outputs.
Any non-functional requirements you believe may be important for this problem.
(Note: The topic of Functional and Non-functional Requirements are covered in Week 8.)
Describe your algorithm, identifying:
How your algorithm works.
How your algorithm helps solve your problem.
Which functional requirements are associated with your algorithm.
2. Explain how the code works (30%)
Explain the design of your code, particularly commenting on:
The overall structure of the code in terms of the key functions it contains and how the code decomposes into a hierarchy of functions.
The flow of the overall code as it progresses from loading/inputting/generating some input data to providing the final solution to your problem.
In what ways the code is generalised, i.e. in what ways can the code you are using be used to solve more other, more generalised, problems to the specific scenario problem you have applied it to?
How data is represented in your code and why it is represented in this way.
The use of any particularly noteworthy or advanced coding features such as: recursive functions, use of list comprehensions, use of dictionaries and sets, passing functions as input parameters.
You must also identify and comment on which parts of the code are re-used (you must reference the source of all re-used code), any re-used code you have improved or changed (how and why), and which parts you have coded fully yourself.
3. Analyse the complexity of your code (10%)
Explain how the key inputs to your problem can vary in size and nature. Assess the expected running time complexity of your code in terms of an order of magnitude of the size of your input value(s). Justify your results.
Record the run time performance of your code using a range of different input size values and produce a run time Big(O) plot based on these timings.
Provide additional loop-counter-based and/or theoretical Big(O) plots to support your findings.
Explain you results and compare any theoretical or loop-counter-based analysis with your experimental timing results.
Explain any realistic limits of your code, in regard to runtime performance.
4. Describe the data used to test your code (10%)
Describe the data you used to illustrate how your algorithm could solve your particular management problem or business-idea software. Did you use an open data source for this or did you create/generate the data yourself? Explain the choices you made in this regard.
Explain how you tested your code using this test data.
Explain how you selected or generated different ‘sizes’ of data to analyse the running time complexity of your code.
5. Conclusions (10%)
Briefly conclude by discussing the benefits and limitations of your code. Things you may like to consider are:
Explain in what ways you believe your code follows good design principles.
Discuss any alternative approaches to solving this problem.
Suggest how your code could be improved.
Discuss whether and how you think this code can be generalised for use on different problems.
Discuss any limitations in your test data and the implications for your findings