Thursday, January 23, 2014

Tuesday, January 21, 2014

The Cocomo model class in things/var/darren/coco/cocomo.py has been updated now with four different methods to calculate the desired objective functions of:

Effort

Months

Defects

Risks

These are simple in terms of the arguments required (ultimately, none should be needed, although several may be optionally provided so as to preload or precompute values used repeatedly in the calculations).

I have begun filling in jmoo_problems.py with the code to support this model with these functions, but I have not yet begun testing and debugging. Below is an example output of the cocomo class's new method, xys():

One unresolved question I have, which may be evident from the data above, is that while COCOMO calibration values were calculated from a PRNG (calling a y() method on the decision range's subclass), the COQUALMO calibrations here are read in from the hardcoded values provided in the original coco.awk script. If this is not correct, I am unclear on how exactly these values should be computed, and so far my searches of literature on the subject have not been successful other than to see that it is recommended to use the calculator on the COQUALMO website, which is loaded with the "most current" calibration values.

Tuesday, January 14, 2014

Introducing multiple objective functions to cocomo.py to support monte carlo simulations, it is found that certain values may need to be saved in the model. Here is a sample output computing both estimated effort and estimated months to completion. Also of note is that the estimations are generally at the upper end of previous data seen.

Finally, the numbers to the right in the 3-column sets do not seem to be the same used in the effort/etc calculations, y() is called each time to generate a random.uniform() based value (?) These can either be kept or replaced with the hardcoded array versions from coco.awk

With relational transfer, it is the relationship among data from a source domain to a target domain that is transferred [1]. In our experiments so far, we are looking at synonym learning (source and target with different features) based in relational transfer.

Experiment

Data

The source data is a combination of the following OO data:
poi-3.0
ant-1.7
camel-1.6
ivy-2.0
jEdit-4.1
and the target data is jm1 (Halstead metrics).

Procedure

x% of the target is labelled and all others are unlabeled.

Only 50% of the target data are used as test instances (these are from the unlabeled bunch).

BORE is applied separately to the labelled x% from the target and the source data.

Each instance now has a score that is the product of the ranks from the power ranges (the scores are normalized).

Each target instance gets a BORE score by using the ranks from the x%.

These are then matched to their nearest [instances scores] from the source data and the majority defect label is assigned to the target instance.

For the within experiment, the x% of labelled target data is used as the train set and the 50% test instances are the test.

The above is also benchmarked with a 10 x 10 cross-validation experiment on jm1 with Naive Bayes.