1.3.3 程序理解
規模龐大的軟件系統是難于理解和維護的.目前已經有了許多不同的方法和自動化工具,它們或者在體系結構層,或者在代碼層,建立存在系統的概念模型,幫助人們對系統進行理解和維護.信息流分析技術可以給用戶提供分析程序的有關信息,從而有助于用戶對程序的理解.
1.3.4 程序分片
程序分片工具是基于代碼分析的,它允許將程序分解成片,用戶能夠從中提取信息并且使維護中改變代碼所帶來的影響變得更加直觀.利用信息流分析進行分片是程序分片技術的一個重要分支,值得一提的是最早的分片算法就是WEISER的以控制流圖作為中間表示的基于數據流關系的分片算法.
1.4 模型語言
我們的分析對象是一種小型的面向對象程序設計語言SOOL,它是從C++簡化和修改得來.我們保留程序的主干,即保留順序,分支,循環語句以及簡單的面向對象機制,即類,繼承,發消息.考慮到實現的方便,SOOL只保留了基本數據類型和基本算術運算.
下面我們給出SOOL語言的語法描述:
program:
(include_statement)* (class_sect)* main_program;
include_statement:
'#' INCLUDE head_file;
head_file:
'';
//MAIN
main_program:
return_value_type MAIN '(' ')' statement_sect;
return_value_type:
basic_data_type|VOID;
basic_data_type:
INT|BOOL;
statement_sect:
'{' (declare_sect) stm_sect '}';
declare_sect:
type varible ';' ( type varible ';')*;
type:
basic_data_type|class_type;
class_type:
class_name;
class_name:
IDENTIFIER;
varible:
IDENTIFIER|IDENTIFIER '[' NUMBER ']';
stm_sect:
statement|statement stm_sect;
statement:
assignment_statement
|if_statement
|while_statement
|io_statement
|class_function_call_statement
|skip_statement;
//CLASS
class_sect:
CLASS class_name ( ':' PUBLIC class_name)
'{' (access_control_operator ':' construct_function class_declare_sequence (class_declare_sequence)* )* '}';
construct_function:
class_name '(' ')';
access_control_operator:
PUBLIC|PROTECTED|PRIVATE;
class_declare_sequence:
varible_declare|function_declare;
varible_declare:
basic_data_type varible;
function_declare:
return_value_type function_name '(' parameter_table ')'
'{' basic_statement_sect (RETURN varible ';') '}' ;
basic_statement_sect:
'{' (basic_declare_sect) basic_stm_sect '}';
basic_declare_sect:
basic_data_type varible ';' ( basic_data_type varible ';')*;
basic_stm_sect:
'{' basic_statement '}'|'{' basic_statement basic_stm_sect '}';
basic_statement:
assignment_statement
|if_statement
|while_statement
|io_statement
|skip_statement
|new_statement
|delete_statement;
function_name:
IDENTIFIER;
parameter_table:
varible;
//EXPRESSION
sign:
'+'|'-';
expression:
simple_expression |relationship_expression|bool_expression
|IDENTIFIER;
relationship_expression:
expression relationship_operator expression;
relationship_operator:
EQUAL|NOT_EQUAL|''
|LESS_EQUAL|GREAT_EQUAL;
bool_expression:
(expression) bool_operator expression;
bool_operator:
AND|OR|NOT;
simple_expression:
(sign) item (add_minus_operator item)*;
add_minus_operator:
'+'|'-';
item:
factor (plus_div_operator factor)*;
plus_div_operator:
'*'|'/';
factor:
varible|NUMBER|'(' expression ')' | class_function_call;
class_function_call:
class_name '.' function_denominate ;
function_denominate:
function_name '(' (real_parameter_table) ')';
real_parameter_table:
real_parameter (',' real_parameter)*;
real_parameter:
NUMBER|TRUE|FALSE|varible;
//STATEMENT
assignment_statement:
varible '=' expression ';' ;
skip_statement:
';';
if_statement:
IF '(' expression ')' basic_stm_sect ELSE basic_stm_sect;
while_statement:
WHILE '(' expression ')' basic_stm_sect;
io_statement:
CIN '(' IDENTIFIER ( ',' IDENTIFIER )* ')'';'
|COUT '(' IDENTIFIER ( ',' IDENTIFIER)* ')' ';';
class_function_call_statement:
class_name '.' function_denominate ';';
new_statement:
NEW class_name ';';
delete_statement:
DELETE class_name ';';
文章來源于領測軟件測試網 http://www.kjueaiud.com/