snap10
1、SI-NS图技术简介 3、SI-NS图表达规范 5、SI-NS图技术影响
2、国内外研究现状 4、SI-NS图表达实例 6、参考文献和附图
 
2、国内外研究现状

        “程序图型化表达”是世界上都在致力研究的一项技术,旨在提高程序的可读性。
  日本日立公司提出过PAD图(Problem Analysis Diagram),国内对此有过一阵研究,但多少年过去了,至今没有看到相应的产品化软件。2000年4月,美国以CSD图(Control Structure Diagram)为表示形式的GRASP项目在网上公开发布。据网上介绍,该项目得到了美国国家科学基金会、美国太空总署、国防部研究开发署以及国防信息系统署的多项资助[6]。(见附图1)
  比较而言,本公司研发和创立的SI-NS图及相应技术,无论从结构二维性、清晰性、信息完整性、空间效率、图形与其表达逻辑的一致性、可读可理解性、实际可用性等方面都要优于日本的PAD图和美国的CSD图。正如清华大学出版社“编译设计与开发技术”一书的编审委员会评价所说,“这项技术在国际上处于领先地位”。

1、比较SI-NS图与日本PAD图

        笔者从严桂兰编著的《PAD与Turbo C程序设计》[5]任选了一题:求解一元二次方程根的C程序:

#include"stdio.h"
#include "math.h"
main()
{
  float a,b,c,d,xl,x2,re,im;
  do{
    printf("Input three numbers:");
    scanf ("%f%f%f",&a,&b,&c);
    if(a!=0)
    {
      d=b*b-4*a*c;
      if(d>=O)
      { 
        xl=(-b+sqrt(d))/(2*a);
        x2=(-b-sqrt(d))/(2*a);
        printf("xl=%f x2=%f\n",xl,x2);
      }
      else
      {
        re=-b/(2*a);
        im=sqrt (-d)/(2*a);
        printf("re=%f im=%f\n",re,im);
      }
    }
  }while(a! =0);
  printf("program end !");
}

  由C程序生成的PAD图如下。这里的字体较小,是因为原PAD图还要大,被缩小的缘故。

图12

  由同一个求解一元二次方程根的C程序生成的SI-NS图:

图13

  显然,SI-NS图在空间效率、图形与其表达逻辑的一致性、结构二维性、自上而下,一点进,一点出、信息完整性、实际可用性方面要优于PAD图。

2、比较SI-NS图与美国CSD图

  以下左边是一个函数名Binary_Search执行二叉树搜索算法的C函数。右边是由GRASP生成的CSD图。据CSD的网站介绍,左边“虽然是一个缩排得很好,非常简单的C程序函数,但也不是一下子能看出函数内各个控制层次的。”而右边的CSD,“程序内各个控制层次一目了然。” [6]

图14

  以下是由同一个执行二叉树搜索算法的C函数程序生成的SI-NS图:

图15

  CSD图只是在原来的程序上勾画,仍然是一维的,仍然包含if、else等语法词汇。显然,SI-NS图在结构二维性、清晰性、自上而下,一点进,一点出、易读易理解性方面要优于CSD图。

3、SI-NS图的技术优势

  SI-NS图相对于日本PAD图、德国NS图、美国CSD图的优势可以用表1概括为:

表1