소스 검색

-- 2010/02/12: VERSION 0.9.1 released

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   bug
          Severity:     Major
          Module(s):    Processor
          Description:  Calculation of length and crc statistics corrected for global code

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   bug
          Severity:     Major
          Module(s):    Appraiser
          Description:  Calculation of avarage data fixed

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   bug
          Severity:     Major
          Module(s):    Duplication indexer
          Description:  By default, it is now enabled

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   improvement
          Severity:     Minor
          Module(s):    Images
          Description:  Logos attached to the source control system

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   improvement
          Severity:     Minor
          Module(s):    Parser (C++ language)
          Description:  Excessive blank symbols are removed in names of functions-operators

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   improvement
          Severity:     Minor
          Module(s):    Project description
          Description:  Minor stylistic improvements
avkonst 15 년 전
부모
커밋
9a6d4c3a6c
14개의 변경된 파일190개의 추가작업 그리고 36개의 파일을 삭제
  1. 61 0
      changelog.txt
  2. 15 0
      dupindex/Makefile
  3. BIN
      images/logo.png
  4. BIN
      images/logo.psd
  5. BIN
      images/logo_project.psd
  6. 11 0
      index.html
  7. 12 13
      lib/SWI/Appraiser.pm
  8. 0 6
      lib/SWI/Converter.pm
  9. 1 1
      lib/SWI/Launcher.pm
  10. 20 5
      lib/SWI/Processor.pm
  11. 63 7
      project.html
  12. 1 0
      style.css
  13. 3 3
      swi_config_sample.xml
  14. 3 1
      swi_main.pl

+ 61 - 0
changelog.txt

@@ -20,6 +20,67 @@
 ____________________________________________
 
 
+-- 2010/02/12: VERSION 0.9.1 released
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Major
+          Module(s):    Processor
+          Description:  Calculation of length and crc statistics corrected for global code
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Major
+          Module(s):    Appraiser
+          Description:  Calculation of avarage data fixed
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Major
+          Module(s):    Duplication indexer
+          Description:  By default, it is now enabled
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   improvement
+          Severity:     Minor
+          Module(s):    Images
+          Description:  Logos attached to the source control system
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   improvement
+          Severity:     Minor
+          Module(s):    Parser (C++ language)
+          Description:  Excessive blank symbols are removed in names of functions-operators
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   improvement
+          Severity:     Minor
+          Module(s):    Project description
+          Description:  Minor stylistic improvements
+
+       -- Date:         2010/02/11
+          Reference:    noref
+          Issue type:   feature
+          Severity:     Critical
+          Module(s):    Duplication indexer
+          Description:  Makefile added
+
+       -- Date:         2010/02/11
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Critical
+          Module(s):    Parser
+          Description:  C language, correction for nonamed enum, struct
+
+____________________________________________
+
+
 -- 2010/02/11: VERSION 0.9.0 released for internal beta testing
 
        -- Date:         2010/02/10

+ 15 - 0
dupindex/Makefile

@@ -0,0 +1,15 @@
+#
+# Note: use gmake
+#
+
+PROGRAM    = bin/dupindex.exe
+SRC_CPP    = $(wildcard *.cpp)
+OBJECTS    = $(SRC_CPP:.cpp=.o)
+
+all: clean $(PROGRAM)
+
+$(PROGRAM): $(SRC_CPP)
+	g++ -O2 -o $@ $<
+
+clean:
+	rm $(PROGRAM) || echo ""

BIN
images/logo.png


BIN
images/logo.psd


BIN
images/logo_project.psd


+ 11 - 0
index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-5" />
+<meta http-equiv="REFRESH" content="0;url=./project.html"></HEAD>
+<title>Index page, wait for redirect</title>
+</head>
+
+<body>
+</body>
+</html>

+ 12 - 13
lib/SWI/Appraiser.pm

@@ -113,7 +113,7 @@ sub swiAppraise
                           $subStat->{$keySubStat}->{'swi:exact'};
                         $fileStat->{$keyStat}->{$keySubStat}->{"swi:average"} =
                           $fileStat->{$keyStat}->{$keySubStat}->{"swi:total"} /
-                          $fileStat->{"swi:count"}->{"swi:functions"};
+                          $fileStat->{"swi:count"}->{"swi:functions"}->{'swi:exact'};
 
                         # add total per module
                         $moduleStat->{$keyStat}->{$keySubStat}->{"swi:total"} +=
@@ -122,7 +122,7 @@ sub swiAppraise
                           ->{"swi:average"} =
                           $moduleStat->{$keyStat}->{$keySubStat}
                           ->{"swi:total"} /
-                          $moduleStat->{"swi:count"}->{"swi:functions"};
+                          $moduleStat->{"swi:count"}->{"swi:functions"}->{'swi:exact'};
 
                         # add total per project
                         $projectStat->{$keyStat}->{$keySubStat}
@@ -132,7 +132,7 @@ sub swiAppraise
                           ->{"swi:average"} =
                           $projectStat->{$keyStat}->{$keySubStat}
                           ->{"swi:total"} /
-                          $projectStat->{"swi:count"}->{"swi:functions"};
+                          $projectStat->{"swi:count"}->{"swi:functions"}->{'swi:exact'};
 
                         # add minimum per file
                         if (
@@ -386,7 +386,7 @@ sub swiAppraise
                             $functionStat->{$keyStat}->{$keySubStat}
                               ->{'swi:exact'},
                             $functionBase->{"swi:statistic"}->{$keyStat}
-                              ->{$keySubStat}->{"swi:exact"}
+                              ->{$keySubStat}->{"swi:exact"}->{'content'}
                         );
                         print $fh "            <"
                           . $keySubStat
@@ -516,7 +516,7 @@ sub swiAppraise
                                 $fileDiff,
                                 $fileStat->{$keyStat}->{$keySubStat}->{$type},
                                 $fileBase->{"swi:statistic"}->{$keyStat}
-                                  ->{$keySubStat}->{$type}
+                                  ->{$keySubStat}->{$type}->{'content'}
 
                             );
                             print $fh "            <" . $type
@@ -597,7 +597,7 @@ sub swiAppraise
                             $moduleDiff,
                             $moduleStat->{$keyStat}->{$keySubStat}->{$type},
                             $moduleBase->{"swi:statistic"}->{$keyStat}
-                              ->{$keySubStat}->{$type}
+                              ->{$keySubStat}->{$type}->{'content'}
 
                         );
                         print $fh "          <" . $type
@@ -672,7 +672,7 @@ sub swiAppraise
                         $projectDiff,
                         $projectStat->{$keyStat}->{$keySubStat}->{$type},
                         $reportBase->{"swi:statistic"}->{$keyStat}
-                          ->{$keySubStat}->{$type}
+                          ->{$keySubStat}->{$type}->{'content'}
 
                     );
                     print $fh "        <" . $type
@@ -907,18 +907,18 @@ sub swiReportModificationGet
     my $newLength =
       $objNew->{"swi:statistic"}->{"swi:length"}->{"swi:source"}->{$statType};
     my $newDup =
-      $objNew->{"swi:statistic"}->{"swi:duplication"}->{"swi:executable"}
+      $objNew->{"swi:statistic"}->{"swi:duplication"}->{"swi:symbols"}
       ->{$statType};
 
     if ( $objBase->{"swi:statistic"}->{"swi:checksum"}->{"swi:source"}
-        ->{$statType} != $newCrc
+        ->{$statType}->{'content'} != $newCrc
         || $objBase->{"swi:statistic"}->{"swi:length"}->{"swi:source"}
-        ->{$statType} != $newLength )
+        ->{$statType}->{'content'} != $newLength )
     {
         return "modified";
     }
-    if ( $objBase->{"swi:statistic"}->{"swi:duplication"}->{"swi:executable"}
-        ->{$statType} != $newDup )
+    if ( $objBase->{"swi:statistic"}->{"swi:duplication"}->{"swi:symbols"}
+        ->{$statType}->{'content'} != $newDup )
     {
         return "cloned";
     }
@@ -935,7 +935,6 @@ sub swiCheckUselessPatterns
         {
             if ($key eq 'swi:pattern')
             {
-                # TODO process;
                 foreach my $pattern (@{$root->{'swi:pattern'}})
                 {
                     if (!defined($pattern->{'swi:used'}) || $pattern->{'swi:used'} == 0)

+ 0 - 6
lib/SWI/Converter.pm

@@ -63,12 +63,6 @@ sub swiConvert
       )
       or die("Can not open output file!");
 
-    if ( defined( $ENV{USER} ) )
-    {
-        print $fh "User\t" . $ENV{USER} . "\n";
-    }
-    print $fh "\n";
-
     my $projectStat     = $report->{"swi:statistic"};
     my $projectName     = $config->{"swi:info"}->{"swi:project"}->{"swi:name"};
     my $projectLocation = $config->{"swi:report"}->{"swi:destination"};

+ 1 - 1
lib/SWI/Launcher.pm

@@ -462,7 +462,7 @@ sub swiConfigurationValidate
                 }
                 if ( !defined( $module->{'swi:indexer:dup'}->{'swi:enabled'} ) )
                 {
-                    $module->{'swi:indexer:dup'}->{'swi:enabled'} = 'off';
+                    $module->{'swi:indexer:dup'}->{'swi:enabled'} = 'on';
                 }
                 if ( !defined( $module->{'swi:indexer:dup'}->{'swi:minlength'} )
                   )

+ 20 - 5
lib/SWI/Processor.pm

@@ -112,7 +112,7 @@ my $regexpCodeContainerModifier   =
 my $regexpCodeContainerArguments = '\s*[^;]*\s*';
 my $regexpCodeContainerDelimeter = '::';
 my $regexpCodeBlockStartIgnore   =
-  '=\s*|,\s*|\s+enum\s*|\s+union\s*|\s+struct\s*';
+  '=\s*|,\s*|\s*enum\s*|\s*union\s*|\s*struct\s*';
 my $regexpCodeStringBorder_Escape =
   '(([^\\\](\\\\\\\\)*\\\\)|^([\\\](\\\\\\\\)*))';
 my $regexpCodeStringBorder_Text          = '["\']';
@@ -204,6 +204,10 @@ sub swiProcess
         $dupindexHandler =
           open3( $dupindexIn, $dupindexOut, $dupindexErr,
             "$rootLocation/dupindex/bin/dupindex.exe" );
+        if (!defined($dupindexHandler) || !defined($dupindexIn) || !defined($dupindexOut) )
+        {
+             die("Can not start the internal platform native tool '$rootLocation/dupindex/bin/dupindex.exe'");
+        }
 
         my $dupfinderSettings =
           $config->{"swi:modules"}->{"swi:module"}[$moduleId]
@@ -786,8 +790,15 @@ s/($regexpCodeContainerDelimeter)?($regexpCodeContainerIdentifier$regexpCodeCont
         $function->{'swi:reference'} = [];
 
         # Calculate swi:length->swi:source
+        # Note: this statistic is used to detect differences
+        # Global code is compared without new lines
+        my $initialContent = $block->{'initial'};
+        if ($functionName eq $regexpCodeGlobalFunctionName)
+        {
+            $initialContent =~ s/\n+//g;
+        }
         $function->{'swi:statistic'}->{'swi:length'}->{'swi:source'}
-          ->{'swi:exact'} = length( $block->{'initial'} );
+          ->{'swi:exact'} = length( $initialContent );
 
         # Calculate swi:length->swi:executable
         $function->{'swi:statistic'}->{'swi:length'}->{'swi:executable'}
@@ -848,7 +859,9 @@ s/($regexpCodeContainerDelimeter)?($regexpCodeContainerIdentifier$regexpCodeCont
           ->{'swi:exact'} = $function->{'swi:depth'};
 
         # Calculate swi:checksum->swi:index
-        my @symbols = split( //, $block->{'initial'} );
+        # Note: this statistic is used to detect differences
+        # Global code is compared without new lines
+        my @symbols = split( //, $initialContent );
         my $crcSumTotal = 0;
         for ( my $pos = 0 ; $pos <= $#symbols ; $pos++ )
         {
@@ -1140,9 +1153,11 @@ m/^($regexpCodeFunctionModifier)*($regexpCodeFunctionIdentifier)($regexpCodeFunc
                     $mod  = $`;
                     $word = $&;
 
-                    # Remove empty symbols in indetifier
+                    # Remove empty symbols in identifier
+                    $word =~ s/\s+$//;
                     $word =~ s/[\n\t ]+/ /g;
-
+                    $word =~ s/\s*$regexpCodeContainerDelimeter\s*/$regexpCodeContainerDelimeter/;
+                    
                     # Remove empty symbols in modifier
                     $mod =~ s/^\s*//;
                     $mod =~ s/\s*$//;

+ 63 - 7
project.html

@@ -37,7 +37,7 @@
     <td valign="bottom">      <div align="right">
       <p><a href="http://sourceforge.net/projects/swi"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=275605&amp;type=10" alt="Get Software Index at SourceForge.net. Fast, secure and Free Open Source software downloads" width="80" height="15" border="0" /></a></p>
       <p>&nbsp;</p>
-      <p><a href="#Description">Description</a> | <a href="#Download">Download &amp; Installation </a> | <a href="#License">License</a> | <a href="#Documentation">Documentation</a> | <a href="#Getsupport">Get support </a>| <a href="#Fordevelopers">For developers</a></p>
+      <p><a href="#Description">Overview</a> | <a href="#Download">Download &amp; Installation </a> | <a href="#License">License</a> | <a href="#Documentation">Documentation</a> | <a href="#Getsupport">Get support </a>| <a href="#Fordevelopers">For developers</a></p>
     </div></td>
   </tr>
   <tr>
@@ -46,7 +46,7 @@
     <td colspan="2" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="10">
       
       <tr>
-        <td valign="top"><h3><a id="Description"></a>Description</h3>
+        <td valign="top"><h3><a id="Description"></a>Overview</h3>
           <p><span class="normalImportance">Software Index </span>measures, reports and validates software statistic,
             searches for duplications, scans for errors, 'coding style' violations
             and occasions of broken design patterns which are defined by your design team.</p>
@@ -60,7 +60,7 @@
                 <li>Number of <span class="normalImportance">symbols in name</span> of a function </li>
                 <li>Number of <span class="normalImportance">blocks</span></li>
                 <li>Maximum <span class="normalImportance">indent level</span> (depth level) </li>
-                <li><span class="normalImportance">Cyclomatic complexity</span> (McCabe's / Mayer's) index </li>
+                <li><span class="normalImportance">Cyclomatic complexity</span> (McCabe's / Myer's) index </li>
                 <li>Number of <span class="normalImportance">functions, files, modules</span></li>
                 <li>Number of symbols in <span class="normalImportance">duplicated fragments</span></li>
                 <li><span class="normalImportance">Code coverage</span> indexes<br />
@@ -102,7 +102,7 @@
             <li><span class="normalImportance">cloned</span> functions (objects)</li>
             <li><span class="normalImportance">unmodified</span> functions (objects)</li>
           </ul>
-          <h4>Internal tools helps to adapt the tool for your specific needs:</h4>
+          <h4>Internal tools helps to adapt Software Index for your specific needs:</h4>
           <ul>
             <li><span class="normalImportance">code preprocessor</span>: simplifies the code parsing and scaning with preprocessor definitions</li>
             <li> <span class="normalImportance">code scanner</span>: similar 'grep' tool, helps to find occasion of 'bad' coding style/formating and detect broken  rules which defined by your design team, has flexible suppress methods </li>
@@ -114,12 +114,66 @@
           <ul>
             <li>C (stable version) </li>
             <li>C++ (beta version) </li>
-          </ul>
+            </ul>
+          <h4>Limitations:</h4>
+          <ul>
+            <li>Parser does not detect functions (C language) with declarations of local variables outside of function's body. However, it is not a problem for a major part of software products. The example below demostrates problematic formatting/style:</li>
+            </ul>
+          <table width="80%" border="0" align="center" cellpadding="2" cellspacing="2">
+            <tr>
+              <td width="50%">This function is <span class="highImportance">not detectable</span> by Software Index. </td>
+              <td width="50%">This function is <span class="normalImportance">parsable</span>. </td>
+            </tr>
+            <tr>
+              <td><pre>int <strong>getMax</strong>(int* array, int length)
+<span class="highImportance">    int i = 0;
+    int curMax;</span>
+<strong>{</strong>
+    /* ... */
+<strong>}</strong></pre>                </td>
+              <td><pre>int <strong>getMax</strong>(int* array, int length)
+<strong>{</strong>
+<span class="normalImportance">    int i = 0;
+    int curMax;</span>
+    /* ... */
+<strong>}</strong></pre>
+              </td>
+            </tr>
+          </table>
+          <ul>
+            <li>Comments inside preprocessor strings are not acceptable (C/C++ languages). Otherwise, some code can be unrecognizable by Software Index.<br />
+            </li>
+            </ul>
+          <table width="80%" border="0" align="center" cellpadding="2" cellspacing="2">
+            <tr>
+              <td width="50%">This code is <span class="highImportance">not recognizable </span> by Software Index. </td>
+              <td width="50%">This code is <span class="normalImportance">parsable</span>.</td>
+            </tr>
+            <tr>
+              <td><pre>#define <strong>GET_MAX</strong>(a, b)       \
+<span class="highImportance">    /*                      \
+     * This macros returns  \
+     * maximum from a and b \
+     */                     \
+</span>    ((a &gt; b) ? a : b)</pre>
+              </td>
+              <td><pre><span class="normalImportance">/*
+ * This macros returns
+ * maximum from a and b
+ */
+</span>#define <strong>GET_MAX</strong>(a, b) \
+    ((a &gt; b) ? a : b)</pre>
+              </td>
+            </tr>
+          </table>
+          <ul>
+            <li>Interface with gcov tool is not tested for C++ language.</li>
+            </ul>
           <h3><a id="Download"></a>Download &amp; Installation</h3>
           <p>For the installation of the <span class="normalImportance">Software Index</span> <a href="http://sourceforge.net/projects/swi/files/">download</a> the archive with all required modules and unpack it to some folder. Also, you have got an option to get the <a href="http://swi.svn.sourceforge.net/viewvc/swi/">source code</a> from the version conrol sytem.</p>
           <p><em class="highImportance">Warning:</em> <span class="normalImportance">Software Index</span> has an internal tool (dupindex) which should be compiled for the target platform.
             By default, the distributable archive includes the compiled binary for PC Windows (x86) platform.
-            Recompile it if you need (only one file: dupindex.cpp), using g++ or some other C++ compiler for your specific platform. There is a project configuration file for users of Microsoft Visual Studio 2008. </p>
+            Recompile it if you need (only one file: dupindex.cpp), using g++ or some other C++ compiler for your specific platform. There is a project configuration file for users of Microsoft Visual Studio 2008. There is Makefile for users of gmake and g++ tools. </p>
           <h4>Prerequisites:</h4>
           <ul>
             <li>Perl Runtime Environment (version 5.6.x or later)</li>
@@ -150,7 +204,9 @@
           <h3><a id="Documentation"></a>Documentation</h3>
           <p>The context help is available by:</p>
           <pre>&gt; perl swi_main.pl --help</pre>
-          <p>The description of the configuration file is accessable by:</p>
+          <p>The sample/description of the configuration file is available by link:</p>
+		  <pre><a href="http://swi.svn.sourceforge.net/viewvc/swi/swi_config_sample.xml?view=markup" target="_blank">http://swi.svn.sourceforge.net/viewvc/swi/swi_config_sample.xml?view=markup</a></pre>
+          <p> In the command line context, it is accessable by:</p>
           <pre>&gt; perl swi_main.pl --sample</pre>
           <h3><a id="Getsupport"></a>Get support</h3>
           <p>The best way to get help is by <a href="https://sourceforge.net/tracker/?func=add&amp;group_id=275605&amp;atid=1170878">creating a new item</a> in the 'Request Tracker'.</p>

+ 1 - 0
style.css

@@ -34,6 +34,7 @@ body{
 
 pre{
     font-size: 100%;
+    padding-left: 50;
 }
 td{
 	background-position: left;

+ 3 - 3
swi_config_sample.xml

@@ -419,7 +419,7 @@
               swi:lines       / swi:executable     - number of executable lines
               swi:lines       / swi:comment        - number of lines with comments
               swi:complexity  / swi:blocks         - number of blocks
-              swi:complexity  / swi:cyclomatic     - McCabe's (Mayer's) Cyclomatic complexity metric
+              swi:complexity  / swi:cyclomatic     - McCabe's (Myer's) Cyclomatic complexity metric
               swi:complexity  / swi:maxdepth       - Maximum indent level
               swi:count       / swi:functions      - Number of functions
               swi:count       / swi:files          - Number of files
@@ -502,7 +502,7 @@
                 on  - the search tool is launched and the statistic is calculated
                 off - the search tool is not started, the statistic is reported by zeros
             
-            By default, the this is not enabled
+            By default, the this feature is enabled
         -->
         <swi:enabled>on</swi:enabled>
           <!--
@@ -883,7 +883,7 @@
               If it is so, the 'regular' level is attached to this function.
               If comment has 3-4 lines, level 'info' is assigned.
               If comment has 1-2 lines, level 'notice' is assigned.
-              If ther� is no comments at all (0 lines), level 'warning' is assigned.
+              If there are no comments at all (0 lines), level 'warning' is assigned.
           -->
           <swi:info>5</swi:info>
           <swi:notice>3</swi:notice>

+ 3 - 1
swi_main.pl

@@ -22,7 +22,9 @@
 
 Software Index measures, reports and validates software statistic,
 searches for duplications, scans for errors, 'coding style' violations
-and occasions of broken design patterns which are defined by your design team. 
+and occasions of broken design patterns which are defined by your design team.
+
+More information available at 'http://swi.sourceforge.net'.
 
 =head1 SYNOPSIS