Softwareengineering f¨ ur langlebige Systeme – Ubung 5 ¨
AUFGABE 1 (Updates) (5BP):
Die Firma Aer Calidus nutzt f¨ ur Kundenkantakte eine Adressdatenbank. Da die Daten- bank alt ist und nicht mehr modernen Anforderungen gen¨ ugt, soll das System durch eine neue Version ersetzt werden. Dabei sind die Daten zu migrieren.
Da das alte System nicht alle ben¨ otigten Daten unterst¨ utzt sind, in der Vergangenheit Felder anders genutzt worden, als vorgesehen:
• Es existieren keine Felder f¨ ur Email, Webseite oder ¨ ahnliches. Diese Daten wurden in die Felder Pager, Telex oder Bemerkung eingetragen.
• Es kann pro Kunde nur eine Adresse eingetragen werden. Daher wurden weitere Adressen in weiteren Datens¨ atzen zu dem Kunden gehalten. Die verschiedenen Rol- len der Adressen wurden im Bemerkungsfeld gepflegt. Kontaktdaten (Email, Telefon) wurden mit in den entsprechenden Datens¨ atzen gehalten.
Bitte schreiben Sie ein Tool oder Script, welches die alte Datenbank in die neue ¨ uberf¨ uhrt.
create table alt_adressen ( create table new_client (
id integer, client integer,
name varchar(20), address1 varchar(40),
vorname varchar(40), address2 varchar(40), anrede varchar(10), address3 varchar(40),
strasse varchar(70), zip varchar(10),
plz integer(5), city varchar(40),
ort varchar(40), country varchar(40),
telefon varchar(20), adresstyp varchar(20) telefax varchar(20), );
telex varchar(20),
pager varchar(20), create table new_client (
autotelefon varchar(20), id integer,
bemerkung varchar(20) surename varchar(40),
); middlename varchar(40),
create table new_contact ( name varchar(40),
client integer, titel varchar(10),
typ varchar(20), anrede varchar(10),
contactid varchar(20), remark varchar(20)
remark varchar(40) );
);
AUFGABE 2 (Reengineering) (5BP):
Analysieren Sie das Programm.
1. Um welche Sprache bzw. welches Sprachderivat handelt es sich?
2. F¨ ur welche Plattform ist das Programm?
3. Wie wird dieses Programm genutzt? Sind spezielle Tools, Hardware oder ¨ ahnliches erforderlich?
4. Analysieren Sie die einzelnen Funktionalit¨ aten des Programms. Stellen Sie das gege- bene Programm als Modell dar.
5. Extrahieren Sie bitte die Anforderungen, die das Programm erf¨ ullt.
# i n c l u d e < D m x S i m p l e . h >
# d e f i n e m a x G r o u p s 5
# d e f i n e m a x G r o u p m e m b e r s 5
# d e f i n e m a x C h a n 125
# d e f i n e m a x P r o g s 5
# d e f i n e s i g n ( i ) (( i ) < 0? -1:1)
int v a l u e = 0;
int c h a n n e l = 0;
int g r o u p = 0;
int g r o u p s [ m a x G r o u p s ][ m a x G r o u p m e m b e r s ];
b o o l e a n i s G r o u p M o d e = f a l s e ; b o o l e a n r u n P r o g r a m [ m a x P r o g s ];
int p r o g r a m G r o u p [ m a x P r o g s ];
int pc [ m a x P r o g s ];
int f a r b [] = { 0 , 0 , 255 , 0 , 255 , 0 ,
255 , 0 , 0 ,
255 , 255 , 0 , 255 , 0 , 255 , 0 , 255 , 2 5 5 } ;
int r3 = 0 , rz3 = 0 , g3 = 0 , gz3 =0 , b3 = 0 , bz3 = 0 , y3 = 0 , yz3 = 0;
int i4 = 0;
int f a r b 4 [] = { 0 , 0 , 0 , 255 ,
0 , 0 , 255 , 0 ,
0 , 255 , 0 , 0 ,
255 , 0 , 0 , 0 ,
255 , 255 , 0 , 0 ,
0 ,255 , 255 , 0 , 0 , 0 ,255 , 255 ,
255 , 0 , 0 , 255 ,
255 , 255 , 255 , 0 , 0 , 255 , 255 , 255 , 255 , 0 , 255 , 255 , 255 , 255 , 0 , 255 , 255 , 255 , 255 , 2 5 5 } ; int c h n s e l e c t ( int c ) {
int r e s u l t = 0;
s w i t c h ( c ) { c a s e ’ w ’ : c a s e ’ R ’ :
r e s u l t = 0;
b r e a k ; c a s e ’ r ’ : c a s e ’ G ’ :
r e s u l t = 1;
b r e a k ; c a s e ’ g ’ : c a s e ’ B ’ :
r e s u l t = 2;
b r e a k ; c a s e ’ b ’ : c a s e ’ Y ’ :
r e s u l t = 3;
b r e a k ; }
r e t u r n r e s u l t ; }
v o i d s e t v a l u e ( int basechn , int command , int v a l u e ) { D m x S i m p l e . w r i t e ( b a s e c h n + c h n s e l e c t ( c o m m a n d ) , v a l u e );
}
v o i d a d d T o G r o u p ( int lgroup , int c h a n n e l ) { if ( l g r o u p < m a x G r o u p s ) {
int j = 0;
for (; j < m a x G r o u p m e m b e r s && g r o u p s [ l g r o u p ][ j ] != 0; j ++) { };
if ( j < m a x G r o u p m e m b e r s ) { g r o u p s [ l g r o u p ][ j ] = c h a n n e l ; S e r i a l . p r i n t ( " C h a n n e l : " );
S e r i a l . p r i n t ( c h a n n e l );
S e r i a l . p r i n t ( " a d d e d to g r o u p " );
S e r i a l . p r i n t l n ( l g r o u p );
} } }
v o i d s e t u p () {
for ( int i = 0; i < m a x G r o u p s ; i ++) {
for ( int j = 0; j < m a x G r o u p m e m b e r s ; j ++) { g r o u p s [ i ][ j ] = 0;
};
}
for ( int i = 0; i < m a x P r o g s ; i ++) { r u n P r o g r a m [ i ] = f a l s e ;
p r o g r a m G r o u p [ i ] = 0;
pc [ i ] = 0;
}
D m x S i m p l e . u s e P i n ( 3 ) ; S e r i a l . b e g i n ( 9 6 0 0 ) ; S e r i a l . p r i n t l n ( " r e a d y " );
}
v o i d e x e c P r o g r a m ( int i ) { s w i t c h ( i ) {
c a s e 0:
if ( pc [0] < 5 0 0 ) {
s e t G r o u p V a l u e ( p r o g r a m G r o u p [0] , ’ r ’ , 2 5 5 ) ; }
e l s e if ( pc [0] < 2 0 0 0 ) {
s e t G r o u p V a l u e ( p r o g r a m G r o u p [0] , ’ r ’ , 0);
} e l s e {
pc [0] = 0;
};
pc [ 0 ] + + ; b r e a k ; c a s e 1:
if ( pc [1] < 10) {
s e t G r o u p V a l u e ( p r o g r a m G r o u p [1] , ’ b ’ , 2 5 5 ) ; }
e l s e if ( pc [1] < 60) {
s e t G r o u p V a l u e ( p r o g r a m G r o u p [1] , ’ b ’ , 0);
} e l s e {
pc [1] = 0;
};
pc [ 1 ] + + ; b r e a k ; c a s e 2:
if ( pc [2] == 1) { if ( r3 == rz3 ) {
rz3 = r a n d o m ( 1 6 ) * 1 6 ; };
if ( g3 == gz3 ) {
gz3 = r a n d o m ( 1 6 ) * 1 6 ; }
if ( b3 == bz3 ) {
bz3 = r a n d o m ( 1 6 ) * 1 6 ; }
if ( y3 == yz3 ) {
yz3 = r a n d o m ( 1 6 ) * 1 6 ; }
b3 += s i g n ( bz3 - b3 );
r3 += s i g n ( rz3 - r3 );
g3 += s i g n ( gz3 - g3 );
y3 += s i g n ( yz3 - y3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ R ’ , r3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ G ’ , g3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ B ’ , b3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ Y ’ , y3 );
}
e l s e if ( pc [2] > 1 0 0 0 ) { pc [2] = 0 ;
};
pc [ 2 ] + + ; b r e a k ; c a s e 3:
if ( pc [3] % 5 0 0 0 == 1) {
for ( int i = 0; i < m a x G r o u p s ; i ++) {
s e t G r o u p V a l u e ( i , ’ R ’ , f a r b [3* i + pc [ 3 ] / 5 0 0 0 ] ) ; s e t G r o u p V a l u e ( i , ’ G ’ , f a r b [3* i + pc [ 3 ] / 5 0 0 0 + 1 ] ) ; s e t G r o u p V a l u e ( i , ’ B ’ , f a r b [3* i + pc [ 3 ] / 5 0 0 0 + 2 ] ) ; }
}
e l s e if ( pc [3] > 5 0 0 0 * m a x G r o u p s ) { pc [3] = 0 ;
};
pc [ 3 ] + + ; b r e a k ;
c a s e 4:
if ( pc [4] == 1) {
if ( r3 == rz3 && g3 == gz3 && b3 == bz3 && y3 == yz3 ) { i4 = c o n s t r a i n ( i4 +4 ,0 ,51);
rz3 = f a r b 4 [ i4 ];
gz3 = f a r b 4 [ i4 + 1 ] ; bz3 = f a r b 4 [ i4 + 2 ] ; yz3 = f a r b 4 [ i4 + 3 ] ; }
b3 += s i g n ( bz3 - b3 );
r3 += s i g n ( rz3 - r3 );
g3 += s i g n ( gz3 - g3 );
y3 += s i g n ( yz3 - y3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ R ’ , r3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ G ’ , g3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ B ’ , b3 );
s e t G r o u p V a l u e ( p r o g r a m G r o u p [2] , ’ Y ’ , y3 );
}
e l s e if ( pc [4] > 1 0 0 0 ) { pc [4] = 0 ;
};
pc [ 4 ] + + ; b r e a k ; }
}
v o i d s e t G r o u p V a l u e ( int group , int c , int v a l u e ) { for ( int j = 0; j < m a x G r o u p m e m b e r s ; j ++) {
if ( g r o u p s [ g r o u p ][ j ] == 0) { b r e a k ;
}
s e t v a l u e ( g r o u p s [ g r o u p ][ j ] , c , v a l u e );
} }
v o i d l o o p () {
for ( int i = 0; i < m a x P r o g s ; i ++) { if ( r u n P r o g r a m [ i ]) {
e x e c P r o g r a m ( i );
} } }
v o i d s e r i a l E v e n t () { int c ;
// w h i l e (! S e r i a l . a v a i l a b l e ( ) ) ; c = S e r i a l . r e a d ();
if (( c >= ’ 0 ’ ) && ( c <= ’ 9 ’ )) { v a l u e = 10* v a l u e + c - ’ 0 ’ ; }
e l s e {
s w i t c h ( c ) { c a s e ’ c ’ :
c h a n n e l = v a l u e ; i s G r o u p M o d e = f a l s e ; b r e a k ;
c a s e ’ Y ’ : c a s e ’ B ’ : c a s e ’ G ’ : c a s e ’ R ’ : c a s e ’ b ’ : c a s e ’ g ’ : c a s e ’ r ’ : c a s e ’ w ’ :
if ( i s G r o u p M o d e ) {
s e t G r o u p V a l u e ( group , c , v a l u e );
} e l s e {
s e t v a l u e ( channel , c , v a l u e );
};
b r e a k ; c a s e ’ a ’ :
if ( v a l u e < m a x G r o u p s ) { a d d T o G r o u p ( value , c h a n n e l );
};
b r e a k ; c a s e ’ s ’ :
if ( v a l u e < m a x G r o u p s ) { g r o u p = v a l u e ;
i s G r o u p M o d e = t r u e ; };
b r e a k ; c a s e ’ p ’ :
if ( v a l u e < m a x P r o g s ) { r u n P r o g r a m [ v a l u e ] = t r u e ; p r o g r a m G r o u p [ v a l u e ] = g r o u p ; }
b r e a k ; c a s e ’ q ’ :
if ( v a l u e < m a x P r o g s ) { r u n P r o g r a m [ v a l u e ] = f a l s e ; p r o g r a m G r o u p [ v a l u e ] = 0;
} b r e a k ; c a s e ’ x ’ :
if ( v a l u e < m a x G r o u p s ) {
for ( int j = 0; j < m a x G r o u p m e m b e r s ; j ++) { g r o u p s [ v a l u e ][ j ] = 0;
};
};
b r e a k ; c a s e ’ z ’ :
for ( int i = 0; i < m a x C h a n ; i ++) { D m x S i m p l e . w r i t e ( i , 0);
};
b r e a k ;
c a s e ’ l ’ :
S e r i a l . p r i n t l n ( " S t a t u s :\ n G r o u p s : " );
for ( int i = 0; i < m a x G r o u p s ; i ++) { S e r i a l . p r i n t ( " G r o u p " );
S e r i a l . p r i n t ( i );
S e r i a l . p r i n t ( " M e m b e r : " );
for ( int j = 0; j < m a x G r o u p m e m b e r s ; j + + ) { S e r i a l . p r i n t ( g r o u p s [ i ][ j ]);
S e r i a l . p r i n t ( " , " );
}
S e r i a l . p r i n t l n ( " " );
}
S e r i a l . p r i n t l n ( " \ n P r o g r a m m e : " );
for ( int i = 0; i < m a x P r o g s ; i ++) { S e r i a l . p r i n t ( " P r o g r a m m " );
S e r i a l . p r i n t ( i );
S e r i a l . p r i n t ( " run : " );
S e r i a l . p r i n t ( r u n P r o g r a m [ i ]);
S e r i a l . p r i n t ( " G r o u p : " );
S e r i a l . p r i n t l n ( p r o g r a m G r o u p [ i ]);
} }
v a l u e = 0;
} }