Автор работы: Пользователь скрыл имя, 19 Января 2011 в 23:37, практическая работа
Метрики третьей группы базируются на оценке использования, конфигурации и размещения данных в программе. В первую очередь это касается глобальных переменных.
Предполагается методика, связывающая сложность программ с обращениями к глобальным переменным.
2 РАЗРАБОТКА
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Листинг программы
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas'
{Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Unit2, math;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TOperatorInfo = record
n : string;
c : Integer;
end;
const TABLE_OF_SEPARATORS : array[0..3] of TOperatorInfo =
((n:'
';c:0), (n:Chr(10);c:0), (n:Chr(13);c:0), (n:Chr(9);c:0));
var
Form1: TForm1;
tableOfFunctions : array of TOperatorInfo;
tableOfVariables : array of TOperatorInfo;
TABLE_OF_OPERATORS : array[0..20] of TOperatorInfo =
((n:'+';c:0), (n:'-';c:0), (n:'/';c:0), (n:'*';c:0), (n:';';c:0),
(n:',';c:0), (n:':';c:0), (n:'=';c:0), (n:'^';c:0), (n:'>';c:0),
(n:'<';c:0), (n:'.';c:0), (n:'@';c:0), (n:'(';c:0), (n:')';c:0),
(n:'{';c:0), (n:'}';c:0), (n:'[';c:0), (n:']';c:0), (n:'''';c:0),
(n:'"';c:0));
TABLE_OF_KEWORDS : array[0..40] of TOperatorInfo =
((n:'div';c:0), (n:'mod';c:0), (n:'not';c:0), (n:'and';c:0), (n:'or';c:0),
(n:'xor';c:0), (n:'shl';c:0), (n:'shr';c:0), (n:'in';c:0), (n:'is';c:0),
(n:'not';c:0), (n:'while';c:0), (n:'do';c:0), (n:'begin';c:0), (n:'end';c:0),
(n:'var';c:0), (n:'const';c:0), (n:'type';c:0), (n:'record';c:0), (n:'repeat';c:0),
(n:'until';c:0), (n:'til';c:0), (n:'for';c:0), (n:'to';c:0), (n:'if';c:0),
(n:'else';c:0), (n:'then';c:0), (n:'case';c:0), (n:'with';c:0),
(n:'uses';c:0), (n:'goto';c:0), (n:'implementation';c:0), (n:'public';c:0),
(n:'function';c:0), (n:'procedure';c:0), (n:'interface';c:0),
(n:'private';c:0), (n:'array';c:0), (n:'of';c:0), (n:'class';c:0), (n:'unit';c:0));
constCount
: Integer;
function myIsOperator( name : String ) : Boolean;
function myIsFunction( name : String ) : Boolean;
function myIsConstant( name : String ) : Boolean;
function myIsVariable( name : String ) : Boolean;
function mySkipFirstSeparators( text : String; pos : Integer ) : Integer;
function myGetNextWord( text : String; Var pos : Integer ) : String;
procedure myAddFunction( text : String );
procedure myAddVariable( text : String );
procedure myRecognize( text : String );
procedure myAnalize();
implementation
uses StrUtils;
{$R *.dfm}
function myIsOperator( name : String ) : Boolean;
var
i, l : Integer;
begin
l := Length( TABLE_OF_OPERATORS ) - 1;
for i := 0 to l do
if CompareText( TABLE_OF_OPERATORS[i].n, name ) = 0 then begin
TABLE_OF_
Result := True;
Exit;
end;
l := Length( TABLE_OF_KEWORDS ) - 1;
for i := 0 to l do
if CompareText( TABLE_OF_KEWORDS[i].n, name ) = 0 then begin
TABLE_OF_
Result := True;
Exit;
end;
Result := False;
end;
function myIsFunction( name : String ) : Boolean;
var
i, l : Integer;
begin
l := Length( tableOfFunctions ) - 1;
for i := 0 to l do
if CompareText( tableOfFunctions[i].n, name ) = 0 then begin
tableOfFunct
Result := True;
Exit;
end;
Result := False;
end;
function myIsConstant( name : String ) : Boolean;
Var
pos : Integer;
tmp : Double;
begin
Val( name, tmp, pos );
if pos = 0 then begin
Result := true;
Inc( constCount );
end else Result := False;
end;
function myIsVariable( name : String ) : Boolean;
var
i, l : Integer;
begin
l := Length( tableOfVariables ) - 1;
for i := 0 to l do
if CompareText( tableOfVariables[i].n, name ) = 0 then begin
tableOfVaria
Result := True;
Exit;
end;
Result := False;
end;
function mySkipFirstSeparators( text : String; pos : Integer ) : Integer;
Var
move : Boolean;
i, j, l, lstr : integer;
begin
l := Length( TABLE_OF_SEPARATORS ) - 1; //количество сепараторов
lstr := Length( text ); //длмна строки
i := pos - 1; //начало поиска
move
:= true; //условие продолжения поиска
While move and ( i < lstr ) do begin
Inc( i );
for j := 0 to l do
if text[i] = TABLE_OF_SEPARATORS[j].n then break;
if j > l then move := False;
end;
Result := i;
end;
function myGetNextWord( text : String; Var pos : Integer ) : String;
Var
i, posSep, posOp, tmp, l : integer;
begin
l := Length( TABLE_OF_SEPARATORS ) - 1;
posSep := Length( text );
posOp := posSep;
Result
:= '';
pos
:= mySkipFirstSeparators( text, pos );
for i := 0 to l do begin
tmp := PosEx( TABLE_OF_SEPARATORS[i].n, text, pos );
if ( tmp < posSep ) and ( tmp > 0 ) then posSep := tmp;
end;
l := Length( TABLE_OF_OPERATORS ) - 1;
for i := 0 to l do begin
tmp := PosEx( TABLE_OF_OPERATORS[i].n, text, pos );
if ( tmp < posOp ) and ( tmp > 0 ) then posOp := tmp;
end;
if posSep < posOp then begin
tmp := posSep - pos;
Result := MidStr( text, pos, tmp );
pos := posSep;
end else if ( posOp = pos ) then begin
tmp := 1;
Result := MidStr( text, pos, tmp );
Inc(pos);
end else begin
tmp := posOp - pos;
Result := MidStr( text, pos, tmp );
pos := posOp;
end;
end;
procedure myAddFunction( text : String );
var
l : Integer;
begin
l := Length( tableOfFunctions );
SetLength( tableOfFunctions, l + 1 );
tableOfFunctions[l].n := text;
tableOfFunctions[l].c := 1;
end;
procedure myAddVariable( text : String );
var
l : Integer;
begin
l := Length( tableOfVariables );
SetLength( tableOfVariables, l + 1 );
tableOfVariables[l].n := text;
tableOfVariables[l].c := 1;
end;
procedure myRecognize( text : String );
var
delMe: Boolean;
len, curPos, tmp : Integer;
element : String;
begin
delMe := true;
curPos := 1;
len := Length( text );
SetLength( tableOfFunctions, 0 );
SetLength( tableOfVariables, 0 );
element
:= '';
while curPos <= len do begin
element := myGetNextWord( text, curPos );
if ( curPos > 933 ) and delMe then
delMe := False;
if not ( myIsOperator( element ) or
Form2.Edit1.
Form1.Memo1.
Form1.Memo1.
if Form2.ShowModal() = mrOk then begin
if Form2.RadioGroup1.ItemIndex = 0 then myAddFunction( element )
else myAddVariable( element );
end;
end;
end;
end;
procedure myAnalize();
var
i, l : Integer;
begin
l := Length( tableOfVariables ) - 1;
for i := 0 to l do
Inc( constCount, tableOfVariables[i].c
);
// Result := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute() then begin
Memo1.Lines.
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i, n1, n2, nn, nn1, nn2, span : Integer;
_nn : Double;
Информация о работе Разработка программ оценки сложности программного обеспечения