Exemple #1
0
        public IList <IList <double> > DistanceMatrix(IList <Snapshot> snapshots, MarkovModelOptions options,
                                                      DirectoryHandler handler, DevAssignment assignment)
        {
            var distances = CreateSquareMatrix(snapshots.Count);

            for (var row = 0; row < snapshots.Count; ++row)
            {
                var left     = snapshots[row];
                var leftRoot = CreateOrDefualtAbstractSyntaxTreeNode(left, handler, assignment);

                for (var col = row + 1; col < snapshots.Count; ++col)
                {
                    var distance = 0.0;
                    var right    = snapshots[col];
                    distance += CalculateBuildDistance(left, right, options);
                    distance += CalculateTestDistance(left, right, options, assignment);

                    var rightRoot = CreateOrDefualtAbstractSyntaxTreeNode(right, handler, assignment);

                    distance += CalculateMetricDistance(leftRoot, rightRoot, assignment, options);

                    distances[row][col] = distance;
                    distances[col][row] = distance;
                }
            }
            return(distances);
        }
Exemple #2
0
        public double CalculateBuildDistance(Snapshot left, Snapshot right, MarkovModelOptions options)
        {
            var leftValue  = left.Report.Type == SnapshotReport.SnapshotReportTypes.Success ? options.BuildWeight : 0.0d;
            var rightValue = right.Report.Type == SnapshotReport.SnapshotReportTypes.Success ? options.BuildWeight : 0.0d;

            return(Math.Pow(leftValue - rightValue, 2.0d));
        }
Exemple #3
0
 private async Task RunMarkovModelImpl(DevAssignment assignment, MarkovModelOptions options)
 {
     using (var handler =
                new DirectoryHandler(Path.Combine(Options.RootDirectory, GetUniqueFolderName(Options.RootDirectory))))
     {
         await Runner.RunMarkovModel(assignment, options, handler);
     }
 }
        public async Task RunMarkovModel(DevAssignment assignment, MarkovModelOptions options, DirectoryHandler directory)
        {
            var snapshots = assignment.Snapshots.ToList();

            if (options.BuildOnly)
            {
                snapshots = snapshots.Where(x => x.Report.Type == SnapshotReport.SnapshotReportTypes.Success).ToList();
            }
            await MarkovModelGenerator.Generate(snapshots, options, directory, assignment);
        }
Exemple #5
0
 public async Task RunMarkovModel(DevAssignment assignment, MarkovModelOptions options)
 {
     try
     {
         await RunMarkovModelImpl(assignment, options);
     }
     catch (Exception exception)
     {
         LogException(exception, assignment);
     }
 }
        public async Task <IActionResult> OnGetAsync()
        {
            Assignment = await Assignments.FindAsync(Id);

            if (Assignment == null)
            {
                return(NotFound());
            }
            Context.Entry(Assignment).Collection(x => x.Snapshots)
            .Query().Include(x => x.Report).Load();
            Options = new MarkovModelOptions();
            return(Page());
        }
Exemple #7
0
        public async Task Generate(IList <Snapshot> snapshots, MarkovModelOptions options, DirectoryHandler handler, DevAssignment assignment)
        {
            var markovModel = new MarkovModel()
            {
                Assignment = assignment,
                Finished   = false,
            };
            await MarkovModelRepository.Add(markovModel);

            var distanceMatrix = DistanceMatrix(snapshots, options, handler, assignment);

            markovModel.States   = MarkovModelCreator.Create(snapshots, distanceMatrix, options.NumberOfStates);
            markovModel.Finished = true;
            await MarkovModelRepository.Update(markovModel);
        }
Exemple #8
0
        private double CalculateTestDistance(Snapshot left, Snapshot right, MarkovModelOptions options, DevAssignment assignment)
        {
            if (left.Report.Type == SnapshotReport.SnapshotReportTypes.Failure &&
                right.Report.Type == SnapshotReport.SnapshotReportTypes.Failure)
            {
                return(0.0d);
            }

            if (left.Report.Type == SnapshotReport.SnapshotReportTypes.Failure)
            {
                var report = (SnapshotSuccessReport)right.Report;

                var sum = report
                          .UnitTestResults
                          .Select(x => x.Passed ? Math.Pow(options.TestWeight, 2.0f) : 0.0d)
                          .Sum();
                return(sum);
            }

            if (right.Report.Type == SnapshotReport.SnapshotReportTypes.Failure)
            {
                var report = (SnapshotSuccessReport)left.Report;

                var sum = report
                          .UnitTestResults
                          .Select(x => x.Passed ? Math.Pow(options.TestWeight, 2.0f) : 0.0d)
                          .Sum();
                return(sum);
            }

            var leftReport  = (SnapshotSuccessReport)left.Report;
            var rightReport = (SnapshotSuccessReport)right.Report;
            var accumulator = 0.0d;

            foreach (var unitTest in assignment.TestProject.UnitTests)
            {
                var leftTest   = leftReport.UnitTestResults.Single(x => x.UnitTestId.Equals(unitTest.Id));
                var rightTest  = rightReport.UnitTestResults.Single(x => x.UnitTestId.Equals(unitTest.Id));
                var leftValue  = leftTest.Passed ? options.TestWeight : 0.0d;
                var rightValue = rightTest.Passed ? options.TestWeight : 0.0d;
                accumulator += Math.Pow(leftValue - rightValue, 2);
            }
            return(accumulator);
        }
 public void RunMarkovModel(int id, MarkovModelOptions options)
 {
     BackgroundJob.Enqueue(() => RunMarkovModelImpl(id, options));
 }
        public async Task RunMarkovModelImpl(int id, MarkovModelOptions options)
        {
            var assignment = await AssignmentRepository.Get(id);

            await Engine.RunMarkovModel(assignment, options);
        }
Exemple #11
0
        private double CalculateMetricDistance(AbstractSyntaxTreeNode leftRoot, AbstractSyntaxTreeNode rightRoot, DevAssignment assignment, MarkovModelOptions options)
        {
            if (leftRoot == null && rightRoot == null)
            {
                return(0.0d);
            }

            var accumlator = 0.0d;

            foreach (var methodDeclarration in assignment.Solution.MethodDeclarations)
            {
                var leftNode  = leftRoot == null ? null : GetMethodOrDefault(leftRoot, methodDeclarration);
                var rightNode = rightRoot == null ? null : GetMethodOrDefault(leftRoot, methodDeclarration);

                if (leftNode != null && rightNode != null)
                {
                    var abstractSyntaxTreeMetric = AbstractSyntaxTreeMetricCreator.Create(leftNode, rightNode);
                    var bagOfWordsMetric         = BagOfWordsMetricCreator.Create(leftNode, rightNode);
                    accumlator += Math.Pow(abstractSyntaxTreeMetric.Rotations * options.AbstractSyntaxTreeWeight, 2);
                    accumlator += Math.Pow(abstractSyntaxTreeMetric.Insertations * options.AbstractSyntaxTreeWeight, 2);
                    accumlator += Math.Pow(abstractSyntaxTreeMetric.Deletions * options.AbstractSyntaxTreeWeight, 2);
                    accumlator += Math.Pow(bagOfWordsMetric.Difference * options.BagOfWordsWeight, 2);
                }
                else if (leftNode != null)
                {
                    var amount = leftNode.NumberOfNodes();
                    accumlator += Math.Pow(amount * options.AbstractSyntaxTreeWeight, 2);
                    accumlator += Math.Pow(amount * options.BagOfWordsWeight, 2);
                }
                else if (rightNode != null)
                {
                    var amount = rightNode.NumberOfNodes();
                    accumlator += Math.Pow(amount * options.AbstractSyntaxTreeWeight, 2);
                    accumlator += Math.Pow(amount * options.BagOfWordsWeight, 2);
                }
            }
            return(accumlator);
        }
 public Task Generate(IList <Snapshot> snapshots, MarkovModelOptions options, DirectoryHandler handler, Assignment assignment)
 {
     throw new System.NotImplementedException();
 }