コード例 #1
0
        public RiskMetricGeneratedMessage GetRiskMetricsFor(string cacheName)
        {
            var ret   = new RiskMetricGeneratedMessage();
            var graph = _minimizer.GetGraphFor(cacheName, false);

            Logger.WriteDebug("risk graph generated with " + graph.AllNodes().Count() + " nodes " +
                              graph.AllConnections().Count() + " connections.");
            ret.Signature = cacheName;
            var root = graph.AllNodes().FirstOrDefault(x => x.IsRootNode);

            ret.Found = root != null;
            var profilerEntries = new List <string>();

            if (_configuration.AllSettings("mm-ProfilerSetup") == "DONTRUN")
            {
                ret.NumberOfTests = graph.AllNodes().Count(x => x.IsTest);
                graph.AllNodes().Where(x => x.IsTest).ForEach(x => x.MarkAsProfiled());
            }
            else
            {
                EnrichGraphWithProfilerInformation(cacheName, graph);
                profilerEntries   = _profilerData.GetTestsFor(cacheName).ToList();
                ret.NumberOfTests = profilerEntries.Count;
            }
            ret.NodeCount = graph.AllNodes().Count();
            Logger.WriteDebug("node count = " + ret.NodeCount + " tests = " + ret.NumberOfTests);
            if (root != null)
            {
                ret.Descriptors = new List <string>();
                if (root.TestDescriptors != null)
                {
                    foreach (var desc in root.TestDescriptors)
                    {
                        ret.Descriptors.Add(desc.TestRunner);
                    }
                }
                ret.Complexity = root.Complexity;
            }
            var counts = _profilerData.GetCountsAndTimesFor(cacheName);

            if (counts != null)
            {
                ret.AverageTime      = counts.AverageTime;
                ret.CalledCount      = counts.TimesCalled;
                ret.AverageTimeUnder = counts.AverageTimeUnder;
            }
            else
            {
                Logger.WriteDebug("null for timing counts");
            }
            var testsScore = _coverageClassifier.CalculateRiskFor(graph);
            var graphScore = _graphPathsClassifier.CalculateRiskFor(graph);

            ret.RiskMetric = (int)(testsScore * .7m + graphScore * .3m);
            ret.TestsScore = 100 - testsScore;
            ret.GraphScore = 100 - graphScore;
            return(ret);
        }
コード例 #2
0
        public static void Update(RiskMetricGeneratedMessage message)
        {
            RiskEntry entry;

            if (Cache.TryGetValue(message.Signature, out entry))
            {
                Logger.Write("updating " + message.Signature + " count =" + message.NodeCount + " time = " + message.AverageTime + " called count = " + message.CalledCount);
                entry.SetNewData(message.NumberOfTests, message.Found, message.Descriptors, message.RiskMetric, message.NodeCount, message.CalledCount, message.AverageTime,
                                 message.AverageTimeUnder, message.TestsScore, message.GraphScore, message.Complexity);
            }
        }