專利名稱::Si-ns程序化圖形生成方法
技術領域:
:本發(fā)明涉及一種既是程序又是流程圖的"SI-NS程序化圖形"生成方法,它也可以稱為"SI-NS圖形化程序",或者簡稱"SI-NS圖"。
背景技術:
:近二十年來,伴隨著面向?qū)ο蠛痛翱诩夹g的出現(xiàn),軟件技術有了長足的發(fā)展和進步。曾經(jīng)是十分繁瑣的程序界面和一些標準軟件的設計,現(xiàn)在變得十分方便,甚至不需要編寫任何代碼就輕而易舉地實現(xiàn)了。然而算法才是程序的靈魂。實際情況里往往蘊含著遠比我們預期要復雜得多的問題和算法。遺憾的是我們對算法程序的分析、測試和維護,至今仍只能依賴可讀性較差、一維的文字性程序。"讀程序難,讀別人的程序更難。"一直是困擾軟件行業(yè)的一個難題。軟件行業(yè)普遍存在的"軟件開發(fā)成功率低、開發(fā)周期長、成本大、可靠性和可維護性差"的通病,與這個問題有直接的關系。即便是世界軟件巨子微軟公司,它的Windows操作系統(tǒng)也始終存在漏洞,需要不斷打補丁更正。原因不是別的,因為計算機語言說到底主要不是給人,而是給計算機看的,是給計算機里的編譯程序看的。受編譯技術和形式語言的制約,計算機語言并非是人性化、理想的語言。程序員整天面對的是顯示屏里見首不見尾、整體結(jié)構(gòu)差、文法上存在二義性的,一維的文字性程序。他們的精力和時間的很大部分要耗費在不斷弄懂曾經(jīng)是自己或者別人開發(fā)出來的程序結(jié)構(gòu)和設計思想上,連每個"if"、"else"的配對次序以及語法標點符號都不能疏忽。這會嚴重影響程序員整體結(jié)構(gòu)性思維和解決復雜問題的能力。面對用戶提出的一個又一個實際問題,以及自己越改越復雜的程序,他們往往感到力不從心……。1973年美國學者I.Nassi和B.Shneiderman提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。算法中的順序、選擇和循環(huán)都用相應的方塊圖表示,它的整體結(jié)構(gòu)清晰、可讀性特好,并且能保證設計出來的程序是結(jié)構(gòu)化的,因而受到歡迎。這種流程圖最先在德國應用比較多,被稱為Struktogram。后來在中國和日本,又稱為NS圖。NS圖的主要問題是它帶有長斜線的選擇結(jié)構(gòu),它使得(1)不適宜于計算機處理、顯示和打印輸出。(2)斜線間的條件項不宜過長,否則占據(jù)的空間太大,空間效率太低。它帶來的直接后果是,NS圖難以包含語言程序的全部信息,難以從語言程序自動生成,存在"圖與程序分離"的問題。用NS圖創(chuàng)始人BenShneiderman自己的話講,NS圖只是一種算法設計形態(tài),只能"在程序設計最初階段有用"(IbelieveitishelpfulatearlystagesofprogramdesigrO。至今我們在各種計算機教材和文獻里能見到的NS圖應用,主要仍局限于算法設計階段。"程序圖型化表達"是世界上都在致力研究的一項技術,旨在提高程序的可讀性。日本日立公司提出了軟件設計圖型表現(xiàn)法PAD(ProblemAnalysisDiagram)。PAD圖的空間效率差,在結(jié)構(gòu)二維性、圖形與其表達邏輯的一致性、信息完整性方面存在缺陷。國內(nèi)曾經(jīng)有大學、研究單位對PAD圖掀起過一陣研究熱潮。但十幾年過去了,至今看不到能夠生成PAD程序化圖形的產(chǎn)品化軟件。2000年4月,美國以CSD圖(ControlStructureDiagram)為表示形式的GRASP項目在因特網(wǎng)上公開發(fā)布。據(jù)網(wǎng)上介紹,該項目得到了美國國家科學基金會、國家宇航局航天飛行中心、國防部研究開發(fā)署以及國防信息系統(tǒng)署的多項資助。然而CSD圖只是在程序上勾畫了一下,在整體結(jié)構(gòu)二維性、清晰性方面,它與一維的文字性程序沒有本質(zhì)的區(qū)別。
發(fā)明內(nèi)容本發(fā)明所要解決的技術問題是提供一種既是流程圖又是程序的SI-NS程序化圖形生成方法。該程序化圖形在整體結(jié)構(gòu)二維性、清晰性、信息完整性、空間效率、圖形與其表達邏輯的一致性、自上而下,一點進,一點出、易讀易理解性、實際可用性等方面要優(yōu)于現(xiàn)有技術中的其它程序流程圖。一種SI-NS程序化圖形生成方法,包括下述順序步驟(1)讀入一個函數(shù)子程序到一維數(shù)組;(2)檢査讀入的函數(shù)子程序有無語法錯誤;(3)由一維文字程序生成二維樹形節(jié)點數(shù)據(jù)結(jié)構(gòu),程序的順序結(jié)構(gòu)生成呈順序的節(jié)點結(jié)構(gòu),程序的選擇和循環(huán)結(jié)構(gòu)生成呈分支的節(jié)點結(jié)構(gòu);(4)對樹形節(jié)點數(shù)據(jù)結(jié)構(gòu)的每一個節(jié)點進行計算,得出各節(jié)點的相對位置以及節(jié)點包含的語句字符信息數(shù)的長和寬;(5)將每一個節(jié)點信息數(shù)據(jù)填入到二維數(shù)組;(6)將二維數(shù)組的圖形信息保存寫入到SI-NS程序化圖形文件。本發(fā)明SI-NS圖與其它流程圖的比較優(yōu)勢如表1所示表1SI-NS圖的技術優(yōu)勢<table>tableseeoriginaldocumentpage5</column></row><table>本發(fā)明生成方法得到的SI-NS圖在結(jié)構(gòu)二維性、清晰性、信息完整性、空間效率、圖形與其表達邏輯的一致性、自上而下,一點進,一點出、易讀易理解性、實際可用性等方面要優(yōu)于現(xiàn)有技術中的其它程序流程圖。圖1是本發(fā)明SI-NS程序化圖形生成方法的流程圖;圖2是實施例1示例程序的NS算法設計圖;圖3是實施例1程序化圖形生成方法得到的樹型節(jié)點數(shù)據(jù)結(jié)構(gòu);圖4是實施例1示例程序的SI-NS圖;圖5是實施例2示例程序的PAD圖;圖6是實施例2示例程序的SI-NS圖;圖7是實施例3示例程序的CSD圖;圖8是實施例3示例程序的SI-NS圖。具體實施例方式下面通過實施例對本發(fā)明作優(yōu)選地具體的說明,但本發(fā)明的保護范圍并不限于此。實施例l參照圖l,一種SI-NS程序化圖形生成方法,包括下述順序步驟(1)讀入一個函數(shù)子程序到一維數(shù)組;(2)檢査讀入的函數(shù)子程序有無語法錯誤;(3)由一維文字程序生成二維樹形節(jié)點數(shù)據(jù)結(jié)構(gòu),程序的順序結(jié)構(gòu)生成呈順序的節(jié)點結(jié)構(gòu),程序的選擇和循環(huán)結(jié)構(gòu)生成呈分支的節(jié)點結(jié)構(gòu);(4)對樹形節(jié)點數(shù)據(jù)結(jié)構(gòu)的每一個節(jié)點進行計算,得出各節(jié)點的相對位置以及節(jié)點包含的語句字符信息數(shù)的長和寬;(5)將每一個節(jié)點信息數(shù)據(jù)填入到二維數(shù)組;(6)將二維數(shù)組的圖形信息保存寫入到SI-NS程序化圖形文件。以轉(zhuǎn)換下述C語言示例程序為例ttinclude<stdio.h〉voidmain()inta[10]:inti,j,t;printf("input10numbers:\n");for(i=0:i〈10;i++)scanf(〃%d〃,&a[i]);printf("\rO;for(j=0;j<9;j++)for(i=0:i<9-j;i++)if(a[i]〉a[i+l]){t=a[i];a[i]=a[i+l];a[i+l]=t;}printf("thesortednumbers:\n");for(i=0;i<10;i++)printf(〃%d〃,a[i]);printf(w\rO;其NS算法設計圖如圖2所示,而本發(fā)明首先生成如圖3的樹型節(jié)點數(shù)據(jù)結(jié)構(gòu)(其具體生成算法如下L不同的程序語句生成相應不同類型的節(jié)點,賦值語句生成類型為"A"的節(jié)點,if語句生成類型為"I"的節(jié)點,開始語句生成類型為"B"的節(jié)點,結(jié)束語句生成類型為"N"的節(jié)點,for語句生成類型為"F"的節(jié)點;II.節(jié)點間的鏈接方式反映節(jié)點間的邏輯關系,如節(jié)點間是順序關系,則前一節(jié)點通過next指針與后一節(jié)點相連;如節(jié)點間是選擇或循環(huán)控制關系,則前一節(jié)點通過then或else指針與后一節(jié)點相連;),然后再生成如圖4的SI-NS圖。SI-NS圖既有NS圖結(jié)構(gòu)清晰、可讀性特好的優(yōu)點,同時又保留了程序的全部信息。它不僅是一種算法設計形態(tài),也是一種程序形態(tài)。它實際上是NS圖和程序兩者的統(tǒng)一體。它同時具有的這兩個特性使程序員不僅對程序的整體結(jié)構(gòu)層次一目了然,有利于整體結(jié)構(gòu)性思維,也能從條件立即找到需要關注問題的細節(jié)。它是程序白盒子測試的理想平臺,無論是程序測試用例的編寫,還是對測試錯誤結(jié)果的分析,面對SI-NS圖都變得簡單明了。程序的語法錯誤和邏輯錯誤在變換過程以及變換后的SI-NS圖上都一目了然。程序員甚至無需計算機就可以在SI-NS圖上執(zhí)行和診斷程序。SI-NS圖的應用也不再局限于程序設計階段,它可以貫穿程序設計、開發(fā)、測試、文檔、維護的全過程。實施例2SI-NS圖與PAD圖的比較采用實施例1的生成方法,本實施例的示例程序是如下求解一元二次方程根的C程序#include〃stdio.h〃ttinclude"math,h〃main()floata,b,c,d,xl,x2,re,im;do{printf(〃Inputthreenumbers,);scanf(〃%f%f%f〃,&a,&b,&c);if(a!=0)d二b求b一4宋a求c;if(d>=0)xl=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(〃xl=%fx2=%f\n〃,xl,x2);6lS6re=-b/(2本a):i薩sqrt(-d)/(2本ei);printf("re=%fim=%f\n",re,im);}While(a!=0);printf("programend!");由C程序生成的PAD圖如圖5所示,由本發(fā)明生成方法得到的SI-NS圖如圖6所示。顯然,SI-NS圖在空間效率、圖形與其表達邏輯的一致性、結(jié)構(gòu)二維性、自上而下,一點進,一點出、信息完整性、實際可用性方面要優(yōu)于PAD圖。實施例3SI-NS圖與CSD圖的比較采用實施例1的生成方法,本實施例的示例程序是如下執(zhí)行二叉樹搜索算法的C函數(shù)程序intBinary—Search(KeyTypekey,ArrayTypeA,intarray—size)intlow,middle,high;low=0;high二array—size:while(low<=high)middle=(low+high)/2;if(key〈A[middle])high=middle-1:elseif(Key〉A[middle])low=middle+1;6lsereturnmiddle:由C程序生成的CSD圖如圖7所示,由本發(fā)明生成方法得到的SI-NS圖如圖8所示。CSD圖只是在原來的程序上勾畫,仍然是一維的,仍然包含if、else等語法詞匯。顯然,SI-NS圖在結(jié)構(gòu)二維性、清晰性、自上而下,一點進,一點出、易讀易理解性方面要優(yōu)于CSD圖。return0;權(quán)利要求1、一種SI-NS程序化圖形生成方法,其特征在于包括下述順序步驟(1)讀入一個函數(shù)子程序到一維數(shù)組;(2)檢查讀入的函數(shù)子程序有無語法錯誤;(3)由一維文字程序生成二維樹形節(jié)點數(shù)據(jù)結(jié)構(gòu),程序的順序結(jié)構(gòu)生成呈順序的節(jié)點結(jié)構(gòu),程序的選擇和循環(huán)結(jié)構(gòu)生成呈分支的節(jié)點結(jié)構(gòu);(4)對樹形節(jié)點數(shù)據(jù)結(jié)構(gòu)的每一個節(jié)點進行計算,得出各節(jié)點的相對位置以及節(jié)點包含的語句字符信息數(shù)的長和寬;(5)將每一個節(jié)點信息數(shù)據(jù)填入到二維數(shù)組;(6)將二維數(shù)組的圖形信息保存寫入到SI-NS程序化圖形文件。全文摘要本發(fā)明涉及一種SI-NS程序化圖形生成方法,包括下述順序步驟(1)讀入一個函數(shù)子程序到一維數(shù)組;(2)檢查讀入的函數(shù)子程序有無語法錯誤;(3)由一維文字程序生成二維樹形節(jié)點數(shù)據(jù)結(jié)構(gòu);(4)對樹形節(jié)點數(shù)據(jù)結(jié)構(gòu)的每一個節(jié)點進行計算,得出各節(jié)點的相對位置以及節(jié)點包含的語句字符信息數(shù)的長和寬;(5)將每一個節(jié)點信息數(shù)據(jù)填入到二維數(shù)組;(6)將二維數(shù)組的圖形信息保存寫入到SI-NS程序化圖形文件。本發(fā)明生成方法得到的SI-NS圖在結(jié)構(gòu)二維性、清晰性、信息完整性、空間效率、圖形與其表達邏輯的一致性、自上而下,一點進,一點出、易讀易理解性、實際可用性等方面要優(yōu)于現(xiàn)有技術中的其它程序流程圖。文檔編號G06F9/44GK101609400SQ200910100870公開日2009年12月23日申請日期2009年7月16日優(yōu)先權(quán)日2009年7月16日發(fā)明者斯傳根,斯希明申請人:杭州思圖軟件科技有限公司