# A-level Computing/AQA/The Computing Practical Project/Analysis

Before you start making your project you need to know what you are going to make. This is where your analysis comes in useful and it's also worth 9 marks, that's 12% of the overall project! We'd better get started.

## What do you need to include?

Hopefully by now you have some idea of your user and what they want you to do, we need to codify (write it down) it all so we can start getting some marks. The exam board has been very kind and if you check out the mark scheme they even provide a list of things that you need to include in your Analysis. We're going to take these and use them as our headings.

### Research Methods

This should be done first. You have an idea on the sections that you need to present so you should put together some questions for your main user to get the answers you need to start putting this together. From your research you need to know the following:
* The current system and how it runs
* The problems with the current system
* The users
* The skill levels of people using it
* What they want the new system to do
* Any preferences in terms of web based, phone based, application based. What platform are you developing for
A structured interview might do the trick and you need to note down all the responses to each of your questions. You should try to understand the current situation and the problem and it is recommended you perform and evidence at least two of the following methods and explain why you used each:
* Interview
* Questionnaire (for multiple users)
* Observation of current system
Once you have finished presenting your research you need to summarise what it said and explain why you used each research method.
* Don't forget to:
* Make sure that all information on users, current system problems, proposed system features etc. comes directly from your research, otherwise it looks like you haven't done your research properly

### Background to/identification of the Problem

You need to introduce your problem, a quick two paragraphs of what the problem is and how a computer might solve it. For example mention how the current system is paper based, slow and people are always losing things, the computerised system would be faster, secure and allow them to run reports and calculate things. But don't mention any languages or databases at this point, we will decide that at the end of the analysis.

### Description of the current system

Describe the current system, what it does and how it currently stores its data. Describe the flaws in the current system, is it slow, secure, easy to query, easy to use, can it have multiple people use it at once, is it easy to access? Back up your description using as many resources as you can, including interviews, observations and pictures. This will prove to the marker that your project has a real client.

### Identification of prospective user(s)?

In some instances your system will involve only one user, the person you are writing it for. In most cases it will involve more than one person. You need to recognise all the users, big and small, of your system.
For example if you were making a maths revision website you have the maths teacher as your main user, but who else is going to use the system? The students of course! You would then need to write how each of these user groups would use the system and how some users would have more access than others. The teacher would be able to change the tests and see the results of all their students, they should be able to add and delete student users. The students should be able to take tests and only see their results.
For example if you were making a stock control system then the system administrator should be able to add/delete/update and re-order items of stock, run reports and add/delete/update users and suppliers. The general shop floor staff should only be able to sell items and print out receipts. The customers will have no direct use of the system.
You should also mention for each user the skills they possess. For example if they use a Mac all the time then an interface similar to an OS X interface would be useful. If they use Microsoft Office 2010 then an interface similar to that software suite would be suitable.

### Identification of user needs and acceptable limitations

Summarise your research findings, what do each of your users want you to do? For example:
The teacher needs me to create a system that
* stores students high scores
* shows student progress
* allows them to add, edit and delete questions
The students need me to create a system that
* allows them to log in
* allows them to answer exam style questions
Limitations are slightly harder to list. You need to write down what your system won't be doing for reasons of time, complexity, or user preference. These might include the system not storing user log in details as these will be managed by LDAP or, a system not enforcing spin on a pool ball, as that specific feature isn't needed by the teacher and the developer not having enough time to implement it.

### Data source(s) and destination(s)

In most cases you'll use a database, but you could also use a file-based system or xml. By now you should have mentioned a couple things that your project will need to store and process (this should have come from your interviews). Where are you going to get this data from?
* What is it -> where is it from -> where is it going
For example the current system might say:
| What is it | Source | Destination |
| Customer Details | new customers filling in forms | customers paper records |
| Questions for exams | past papers and teachers | photocopies for students |
The new system would then look like (notice that there might be some more attributes):
| What is it | Source | Destination |
| Customer Details | new customers filling in online forms | customers db table |
| Questions for exams | past papers and teachers | questions XML file |
| Admin details | Manager | users db table |

### Data volumes

An important thing to think about when building any system is how much data you will need to store and how much processing is required. This should come directly from your research and will influence how you complete your project and what sort of hardware you will need to use. For example if you only have one person sitting an online test at one time, you only need a simple computer. If you are looking to have hundreds of people using your system at once then you will need a very fast computer and probably a web based solution.
For example:
* I will be storing several hundred customers and...
* The revision system will store up to 100 different questions and 300 student details
* Each student will have their attempt at each question recorded, making potentially 300*100 = 30000 question answer results
* The system only needs to process one sale at a time because...

### Data Dictionary

Like a dictionary describing all the words you can use in a sentence, this will record all the pieces of data that you want to store and process in your system. You will need to provide the following information for everything you will store data on:
| Field Name | Field Purpose | Field Type | Field Size | Example Data | Validation |
| First Name | Stores the name of the player | String | 30 | Peter | Not blank |
| Date of Birth | Stores the date of birth of the player | Date/Time | DD/MM/YY (6 figures) | 19/08/76 | Date/Time format |
| Score | Stores the top score of the player | integer | 4 | 7643 | bigger than 0, less than 10000 |
If you are storing a database make sure that you have stored data on all the fields that will be in your database, for example the data above is storing data on a student in a school. What data will you need to store for your system to work?
If you are making a program, you will want to list all the variables that your program will store whilst it is running. For example, if you were creating a program to tally the score someone achieved in a quiz, you should list the variable that will store this score.
| Field Name | Field Type | Start Value | Description |
| Score | Integer | 0 | This will keep track of the score of the player |
| First Name | String | NULL | This will keep track of the first name of a player |
| Date of Birth | Date | 01/01/1990 | This will keep track of the date of birth of the player |
Warning: A very common mistake is to mis-size your fields. For example you are making a markbook system where you will store the age of students. The ages are between 11 and 16, so why not make the age 16 in length? The answer is because length sixteen allows you to store the age "9999999999999999 years", and this is impossible to have a student (let alone a human) that old. The length should be a more sensible 3. While the expected numbers are two digits long it is conceivable that the software may be extended to be used for older students one day and so the length should be set to cover this contingency. Do not repeat the "Y2K problem" where developers stored the year as only two digits causing millions of pounds to be spent fixing it when the year "ticked over" to zero again.

### Data Flow Diagrams

There are many ways that you can draw data flow diagrams, so if your teacher tells you one way and the way you read here is completely different, don't worry. The important thing is that you show how data moves through the current system, where it is stored, where it will be processed and how you plan it to move through the new system. It is called a data flow diagram after all! For these examples we are using the Gane Sarson method.
There are four main components that you need to be aware of:
| Name | Description | Symbol |
| Entity | This generally shows all the people involved in the system. It may also indicate other external systems that you are interacting with | Circle |
| Process | This describes the processing that happens to the data as it is moved from one location to another, it has data inputted and will output to a data store, another process or an entity | Square |
| Store | Generally this indicates the different computational stores used to hold your data, such as hard disk files, databases, CD ROMs etc. | Rectangle |
| Transfer | This shows how data moves from one part of the system to another. You need to label the arrows to explain exactly what is moving about. | Arrow |
Using the descriptions we can see the diagram above means the following:
* A customer can enquire about store items, the system processes the enquiry and fetches the data from the item datastore, sending the results to the customer
* A customer can order an item, the system checks that the customer is real, checks the item is in stock, sends an order and finally sends the item and an invoice to the customer.
You need to produce four data flow diagrams, two showing the current situation and two showing the proposed system (this is not necessary on the current spec). For each you must show the following diagrams:
* Level 0
* Level 1
You can make them using a word processor but it's far easier to use specialist software. You can try to use dia or Open ModelSphere, which are both free. Alternatively you can use Microsoft Visio.
* Extension: Use Cases
* In software and systems engineering, a use case is a list of steps, typically defining interactions between a role (known in UML as an "actor") and a system, to achieve a goal. The actor can be a human or an external system. For example in a system where a user wants to invite some people to a party on a social network. Person:
* logs in
* selects to create an event
* picks a date and time from, using a date picker
* picks a date and time to, using a date picker
* selects a location, using a map
* adds a picture of the venue from their picture collection
* adds description
* selects private event
* sends invites

### Entity Relationship Diagrams (for databases)

When thinking about how you are going to save data on your system you might decide to use a database, if this is the case you must include an E-R Diagram. If you aren't using a database explain that there is no need to complete this section. You need to recognise your main tables. There should be at least 3 tables and relationships between them. The tables don't have to be normalised at this stage but the relationships should be described in a little detail.
* see chapter on Databases

### Object Orientation planning (for Object Orientation)

For each class that you are using describe:
* overview of what it does
* inheritance
* overriding
* public and private variables
* public and private methods
For example, the attributes of a monster class might contain:
| Access Type | Field Name | Field Type | Initial Value | Description |
| Private | Health | Integer | 100 | This will store the health of the monster, when the health gets to 0 the monster should die |
| Private | x | Integer | 0 | This will track the x location of the monster |
you also need to note the methods that the monster class would use:
| Access Type | Method Name | Parameters | Return Values | Description |
| Public | MoveLeft | none | none | This will move the monster 3 points to the left |
| Public | Hurt | damage | the current health of the monster | this allows you to damage monsters |
* see chapter on object orientation

### Objectives

This is the most important part of your Analysis, because this is how you are going to check if your end system meets all your user needs. You need to outline three sets of objectives that are all SMART and numbered:
* System Objectives
* Processing Objectives
* User Objectives
As far as possible all your objectives should be SMART. But what does SMART mean?
| Letter | Major Term | Description | Example | Not acceptable! |
| S | Specific | Make sure that it's not ambiguous and it concerns a part of your system | The system should be able to display 5 top scores in descending order | My system should be good |
| M | Measurable | Is there any way that you can easily prove that you have met this objective. | Each page should load in less than 5 seconds | My pages will be beautiful |
| A | Attainable | Make sure that within the time and resources available you will be able to complete the objective | My system will allow the saving of user preferences | There will be a facial recognition system to allow users to log into the system |
| R | Relevant | Is the objective going to help you meet your user needs? | A receipt will be printed and emailed to the customer | My cashier system will play MP3s in the background |
| T | Time-bound | You are limited in the time you have to complete this project. You must list the deadline in your Analysis somewhere and can you finish each objective in time? | I will show the player position on the map using 2D Vector graphics | The game will have 3D graphics as good as League of Legends |
As you can probably recognise, several of the incorrect objectives above fail to meet multiple SMART criteria. Test yourself, which of these objectives are SMART enough to get you started on a good project:
* Don't forget to:
* Get these numbered objectives signed off by your client and put evidence in your writeup. This might involve copying an email into the document.

### Potential Solutions

There are several ways that you could solve the problem at hand you need to list at least 3 different options. For each of them you need to mention positive and negative things and then argue out your chosen solution.
For example. If I was tasked with making a stock control system I could use the following things (with a lot more detail!)
| Suggested Solution | Positives | Negatives |
| Excel and VBA desktop application | I know how to use excel the user also has experience in excel Excel and VBA will allow me to perform calculations and display results | Excel is a flat file database and won't let me handle links between data. The solution will only be available offline |
| Visual Basic.NET application and Access Database backend | I have some experience of Visual Basic from the first year VB.NET lets me easily build a solution that will have similar interfaces to MS Office programs They already own Access and use Windows | I need to learn more VB.NET to complete this project This solution will be offline only |
| ASP.NET and MSSQL database website based solution | This solution will allow the user to login online. Relationships will be enforceable I will be able to use SQL to perform searches | I have a lot to learn in ASP.NET The user doesn't need to access it from multiple computers It requires a server and networking know-how |

### Chosen Solution

From the choices that you suggested pick the best one and explain why. This is going to be how you are going to solve this problem!

### Other evidence (OPTIONAL)

In this section you need to justify that the techniques you used to write your analysis were correct and made sure that you managed to get all the objectives of the new system. Go back to the questionnaires, interview and observations. Include them here and explain how this made sure that you could produce a comprehensive Analysis.

## Next steps

Now you have completed your Analysis you need to start making your project. You should have some idea of how you are going to make your system and you now need to start acquiring all the skills you will need to complete this project. Get yourself a text book about the programming language you have chosen and make sure you can perform some simple tasks using it. At this point it would be a good idea to write a quick list of skills that you will need to learn.
Whilst you are getting those skills, head over to Design