Evaluation

Course Content

The British Computer Society define evaluation as:

“An objective review of what has been achieved to establish whether it meets the required criteria. The evaluation might also look at the wider context, the user needs and whether there are any undesirable consequences introduced into the solution.”

Burdett, Arnold. BCS Glossary of Computing (Kindle Locations 999-1001). BCS Learning & Development Limited. Kindle Edition. 

Evaluation Criteria

There are several criteria that could be used when evaluating your programs: 

Fitness for purpose

Fitness for purpose is establishing whether or not your software fulfils all the functional and user requirements detailed in the specification. Any omissions or issues should be described here. 

For example:

So when establishing fitness for purpose you need to refer to the requirements and ensure that they have been met.

Efficiency

Efficiency can be defined as:

“achieving maximum productivity with minimum wasted effort or expense”

Just because all functional requirements have been met does not that it has been done in the most efficient manner the picture to the right will demonstrate this:

Efficient use of coding constructs

This aspect of evaluation looks at whether the most appropriate programming constructs or data types have been used:

Efficiency does not always mean speed of execution - it could be memory footprint or limiting access to files/databases.

Suitable Data Types and Structures

Have you used appropriate variable types

Have you used arrays/records suitably?

Fixed and Conditional Loops

Where possible have you used a loop?

If you are using a fixed loop - is that the most efficient option?

Conditional Statements

Consider the following algorithm, the problem with it is that every IF statement will hsve to be evaluated (even if the first conditional statement was found to be true)

Every conditional statement in the above algorithm would be evaluated even if the first was evaluated as True

Nested Selection Statements

If you use a combination of nested or else if statements then it is possible that some conditions may never required to be evaluated and checked. This may not be possible in all cases as it may be that the correct option is the last one. The example below takes the grades from above and evaluates them in a more efficient manner.

We can use nested selection statements to (potentially but not in every case) limit the amount of comparisons.

Modularity and Parameter Passing

Modularity should allow you to reuse functions such as if you have written a FindMin subroutine which returns the lowest value in a list.

Can be used multiple times such as below by passing different parameters into it, assuming that the variables  prelims and courseworks are arrays:

Modularity also allows programmers to be working on different modules independently from each other (as long as they aware what the inputs and outputs are). It also assists in debugging as if  particular requirement isn't working properly than that may narrow it down to a subroutine or two.

Usability

You can have a functioning product but if it is not usable then it isn't really very useful. You need to test and evaluate the usability of your product.  The usability can be just as important as the functionality - if a product isn't usable then it is less likely to be successful.

You can ask participants to perform specific or routine tasks using your product

Then the important factor is the observation of the user under controlled conditions and the feedback that is given.

What info can you collect to evaluate?

Think Aloud Protocol

Think Aloud Protocol is when a user will be invited to think out loud whilst using a product. They will say what they are thinking and try to describe their thought processes whilst using a piece of software.

It doesn't even have to work yet

Usability testing doesn't even need a finished product. It can be conducted with a low or high fidelity prototype. This allows the client to provide feedback at a much earlier stage. When altering an interface will require minimal effort.

Maintainability

How readable is your code?

Meaningful variable names/identifiers assist you (and other developers) to identify the function of programs.

Indentation and the use of white space are also extremely useful

Remember that modularity can help maintainability as:

Robustness

A piece of software is robust if it can deal with exceptional or incorrect data or unusual situations. Your input validation or file access should be one of your main considerations. You cannot deal with every possible scenario but you should aim to test those that may happen - even if you cannot deal with them as yet.

Evaluation Summary

Your evaluation should: