示例#1
0
        public IList <AssemblyNode> InitMutantsForOperators(ProgressCounter percentCompleted)
        {
            var root = new MutationRootNode();

            int[]      id    = { 1 };
            Func <int> genId = () => id[0]++;

            //var originalModules = _choices.WhiteSource;//_whiteCache.GetWhiteModules();
            percentCompleted.Initialize(_originalCodebase.ModulesToMutate.Count);
            var subProgress = percentCompleted.CreateSubprogress();

            var sw = new Stopwatch();

            var assNodes = new List <AssemblyNode>();

            foreach (var module in _originalCodebase.ModulesToMutate)
            {
                sw.Restart();

                var mergedTargets = _mutationExecutor.FindTargets(module, subProgress);
                var assemblyNode  = BuildMutantsTree(module.Module.Name, mergedTargets);

                _log.Info("Found total of: " + mergedTargets.Values.Count() + " mutation targets in " + assemblyNode.Name);

                assNodes.Add(assemblyNode);
                percentCompleted.Progress();
            }

            assNodes = modifyAssNodes(assNodes);

            root.State = MutantResultState.Untested;

            return(assNodes);
        }
        public MultiDictionary<IMutationOperator, MutationTarget> FindTargets(CciModuleSource module, ProgressCounter subProgress)
        {
            _log.Info("Finding targets for module: " + module.Module.Name);
            _log.Info("Using mutation operators: " + _mutOperators.Select(_ => _.Info.Id)
                .MayAggregate((a, b) => a + "," + b).Else("None"));

            var mergedTargets = new MultiDictionary<IMutationOperator, MutationTarget>();
            _sharedTargets = new MultiDictionary<IMutationOperator, MutationTarget>();
            subProgress.Initialize(_mutOperators.Count);
            foreach (var mutationOperator in _mutOperators)
            {
                try
                {
                    subProgress.Progress();
                    var ded = mutationOperator.CreateVisitor();
                    IOperatorCodeVisitor operatorVisitor = ded;
                    operatorVisitor.Host = module.Host;
                    operatorVisitor.OperatorUtils = _operatorUtils;
                    operatorVisitor.Initialize();

                    var visitor = new VisualCodeVisitor(mutationOperator.Info.Id, operatorVisitor, module.Module.Module);

                    var traverser = new VisualCodeTraverser(_filter, visitor, module);

                    traverser.Traverse(module.Module.Module);
                    visitor.PostProcess();

                    IEnumerable<MutationTarget> mutations = LimitMutationTargets(visitor.MutationTargets);


                    mergedTargets.Add(mutationOperator, new HashSet<MutationTarget>(mutations));
                    _sharedTargets.Add(mutationOperator, new HashSet<MutationTarget>(visitor.SharedTargets));

                }
                catch (Exception e)
                {
                    _svc.Logging.ShowError("Finding targets operation failed in operator: {0}. Exception: {1}".Formatted(mutationOperator.Info.Name, e.ToString()));
                    //throw new MutationException("Finding targets operation failed in operator: {0}.".Formatted(mutationOperator.Info.Name), e);
                }
            }
            return mergedTargets;
        }
示例#3
0
        public MultiDictionary <IMutationOperator, MutationTarget> FindTargets(CciModuleSource module, ProgressCounter subProgress)
        {
            _log.Info("Finding targets for module: " + module.Module.Name);
            _log.Info("Using mutation operators: " + _mutOperators.Select(_ => _.Info.Id)
                      .MayAggregate((a, b) => a + "," + b).Else("None"));

            var mergedTargets = new MultiDictionary <IMutationOperator, MutationTarget>();

            _sharedTargets = new MultiDictionary <IMutationOperator, MutationTarget>();
            subProgress.Initialize(_mutOperators.Count);
            foreach (var mutationOperator in _mutOperators)
            {
                try
                {
                    subProgress.Progress();
                    var ded = mutationOperator.CreateVisitor();
                    IOperatorCodeVisitor operatorVisitor = ded;
                    operatorVisitor.Host          = module.Host;
                    operatorVisitor.OperatorUtils = _operatorUtils;
                    operatorVisitor.Initialize();

                    var visitor = new VisualCodeVisitor(mutationOperator.Info.Id, operatorVisitor, module.Module.Module);

                    var traverser = new VisualCodeTraverser(_filter, visitor, module);

                    traverser.Traverse(module.Module.Module);
                    visitor.PostProcess();

                    IEnumerable <MutationTarget> mutations = LimitMutationTargets(visitor.MutationTargets);


                    mergedTargets.Add(mutationOperator, new HashSet <MutationTarget>(mutations));
                    _sharedTargets.Add(mutationOperator, new HashSet <MutationTarget>(visitor.SharedTargets));
                }
                catch (Exception e)
                {
                    _svc.Logging.ShowError("Finding targets operation failed in operator: {0}. Exception: {1}".Formatted(mutationOperator.Info.Name, e.ToString()));
                    //throw new MutationException("Finding targets operation failed in operator: {0}.".Formatted(mutationOperator.Info.Name), e);
                }
            }
            return(mergedTargets);
        }
示例#4
0
        public IList<AssemblyNode> InitMutantsForOperators(ProgressCounter percentCompleted)
        {
            var root = new MutationRootNode();

            int[] id = { 1 };
            Func<int> genId = () => id[0]++;

            //var originalModules = _choices.WhiteSource;//_whiteCache.GetWhiteModules();
            percentCompleted.Initialize(_originalCodebase.ModulesToMutate.Count);
            var subProgress = percentCompleted.CreateSubprogress();

            var sw = new Stopwatch();

            var assNodes = new List<AssemblyNode>();
            foreach (var module in _originalCodebase.ModulesToMutate)
            {
                sw.Restart();

                var mergedTargets = _mutationExecutor.FindTargets(module, subProgress);
                var assemblyNode = BuildMutantsTree(module.Module.Name, mergedTargets);

                _log.Info("Found total of: " + mergedTargets.Values.Count() + " mutation targets in " + assemblyNode.Name);

                assNodes.Add(assemblyNode);
                percentCompleted.Progress();
            }
            root.State = MutantResultState.Untested;

            return assNodes;
        }