• Nenhum resultado encontrado

Raptor: uma ferramenta para automatização do gerenciamento do processo de desenvolvimento de software

N/A
N/A
Protected

Academic year: 2021

Share "Raptor: uma ferramenta para automatização do gerenciamento do processo de desenvolvimento de software"

Copied!
80
0
0

Texto

(1)

!

" "

#

(2)

!

" "

#

!

!

" #

(3)

!

" "

#

!

!

" #

$

!

.

/.

.

0

#

!

!

1

.

0

#

(4)

$

$

2

3 4

"

5

'

# #

3

5

- $

. 4

6

. /

/

3

7

'

"

6

"

5

3

3

7

- $

.8 #

2

#

# #

5

'

3

-5

'

'

9

.

.9

2

3

# #

5

-. :

;

<

'

#

:

2

'

4

2

8

3

:

.

(5)

-%

&

1

RESUMO... 4

2

SUMÁRIO ... 5

3

LISTA DE TABELAS ... 7

4

LISTA DE FIGURAS... 7

5

ACRÔNIMOS E ABREVIATURAS ... 8

6

INTRODUÇÃO ... 9

6.1 Tema ... 9 6.2 Delimitação do Tema... 9 6.3 Objetivo Geral ... 9 6.4 Objetivos Específicos... 10 6.5 Motivação/Justificativa ... 10

7

CMMI (CAPABILITY MATURITY MODEL INTEGRATION) ... 12

7.1 Introdução... 12

7.2 Escolhendo um modelo CMMI... 13

7.3 Estrutura do CMMI... 15

8

PROTÓTIPO DO APLICATIVO ... 27

8.1 Análise do Domínio... 27

8.2 Projeto ... 30

8.3 Implementação... 35

(6)

10

REFERÊNCIAS BIBLIOGRÁFICAS... 50

11

ANEXOS ... 51

(7)

'

TABELA 1: ÁREAS DE PROCESSO POR NÍVEL DE MATURIDADE NA REPRESENTAÇÃO EM

ESTÁGIOS... 17

TABELA 2: CATEGORIAS POR ÁREAS DE PROCESSO... 21

TABELA 3: PRÁTICAS GENÉRICAS E ESPECÍFICAS ASSOCIADAS AO GERENCIAMENTO DE REQUISITOS... 25

TABELA 4: MATRIZ DE RASTREAMENTO DOS REQUISITOS ... 30

(

!

FIGURA 1: ESTRUTURA DO MODELO CMMI... 15

FIGURA 2: ESTRUTURA DA REPRESENTAÇÃO EM ESTÁGIOS DO MODELO CMMI. ... 17

FIGURA 3: REPRESENTAÇÃO CONTÍNUA DO MODELO CMMI. ... 22

FIGURA 4: EXEMPLO DE NÍVEL DE CAPACIDADE DE GERENCIAMENTO DE REQUISITOS. ... 23

FIGURA 5: PROCESSO SIMPLES DE DESENVOLVIMENTO DE SOFTWARE ... 28

FIGURA 6: PROCESSO COMPLEXO DE DESENVOLVIMENTO DE SOFTWARE... 28

FIGURA 7: ESPECIFICAÇÃO DAS CLASSES PROJECT, PROCESS E PHASE. ... 30

FIGURA 8: ESPECIFICAÇÃO DAS CLASSES DOCUMENT E FEATURE... 31

FIGURA 9: ESPECIFICAÇÃO DAS CLASSES GRAMMAR, ANALIZER E BUILDER. ... 32

FIGURA 10: DIAGRAMA DE SEQÜÊNCIA IDENTIFICAÇÃO DE REQUISITOS. ... 33

FIGURA 11: DIAGRAMA DE SEQÜÊNCIA RASTREABILIDADE DE REQUISITOS. ... 34

FIGURA 12: INTERFACE INICIAL. ... 35

FIGURA 13: INTERFACE DE EDIÇÃO DE PROCESSO. ... 36

FIGURA 14: INTERFACE DA TABELA DE RASTREABILIDADE DOS REQUISITOS... 37

FIGURA 15: INTERFACE DA ÁRVORE DE RASTREABILIDADE DOS REQUISITOS... 38

FIGURA 16: DOCUMENTO DE REQUISITOS DO APLICATIVO TRACER. ... 39

FIGURA 17: ÁRVORE DE DIRETÓRIOS (REPRESENTA-SE AS FASES DO PROCESSO E ARMAZENA-SE OS DOCUMENTOS DO PROJETO)... 40

FIGURA 18: FASES DE DESENVOLVIMENTO (REQUISITOS, PROJETO E CÓDIGO)... 42

FIGURA 19: SELEÇÃO DA FASE “REQUISITOS” A SER MAPEADA AO LONGO DO PROCESSO... 42

FIGURA 20: SELEÇÃO DO MODO DE MAPEAMENTO “ALL – MAPEAR TODOS OS REQUISITOS”. ... 43

FIGURA 21: SELEÇÃO DO MODO DE MAPEAMENTO “INDIRECT”... 44

FIGURA 22:TABELA DE TRACEABILIDADE DE REQUISITOS DA FASE “REQUISITOS” ... 45

FIGURA 23: ÁRVORE DE TRACEABILIDADE DE REQUISITOS DA FASE “REQUISITOS” . ... 46

FIGURA 24:TABELA DE TRACEABILIDADE DE REQUISITOS DA FASE “PROJETO” . ... 47

FIGURA 25:TABELA DE TRACEABILIDADE DE REQUISITOS DA FASE “PROJETO” CONVERTIDA EM HTML... 48

(8)

)

*+

"

=

. /

/

=

. /

/

3

• ! 9

9

3

!

#

. /

/

• " = " 5

3

3

• "

9 "/

3

3

. /

• >%" 9 > #

%

"

(9)

,

-2

.8 #

# #

3

# #

5

'

3

2

-

9

'

'

#

3

6

. /

/

3

7

-.8 #

:

. 4 -

3

'

9

5

'

?

#

4

' @

?

-,.

$

# #

3

# #

5

3

2

-,.

%

-$

@

# #

3

A

.

.9

2

8 '

.@

2

. 4

5

6- -' & 3 '

7

-@

'

#

:

:

3

2

'

.@

.

-4

3

. 4

-,.

' / 0 " 1

# #

:

.

2

3

# #

5

(10)

-,.

( / 0 "

*2 *

3

:

.

2

8

. 4

B

#

B

#

3

2

'

2

-,.

) 3

" - 45

*

"

$

2

#

#

# #

5

:

> #

%

"

C

' .

3

-#

3 '

9

3

:

.

2

'2

:

4

2

3

# #

5

- !

'

3

.

4

'

'.

"

5

D

)EF

-@

2

'

4

'4 #

'

#

3 '2

#

-

8

,G !

>%" '

'

:

%

- 0

. 4

2

-

&

'2

4 #

. 4

3

- "

'

.

-!

' .

#

9

3

?

# '2

-

'

9

4

H

4

I .

:

-3

'

- $

@

. 4

&

'2

4 3

JKL'

'

#

# #

-"

'

#M

. 4

2 '

:

3

'

'

2

#

. 4 '

#

'

'

-

'

# #

5

@

:

&

(11)

$

2

@

2

@3 @

:

2

2

'

8

'

3

'

8

'

N!6

! 3

37D

O++F

-#

. 4

I

-

'

D

+*FD " +*F

- $

:

3

P

-

@

3

3 4

5

'

#

'

.

2

&

'

&

'

4

(12)

-6

33 7

83

83

!

9

6.

$

-9

'

3 '

#

3

6

. /

/

3

7

'

'

? '

- $ .8 # @

. 4

-$

:

3

3

D "

+*F

A

. /

/

"

5

1*'

6

" 9

1* 7

B

"

Q,(' "/

3

3

. /

6

"

7

B

3

!

#

. /

/

'

1+-)R6! 9

7

B

!

:

'

3

3

4

3

5

-

2

2

5

P

- S

8

#

09*'

5

# JKL

2

'

8

%9**'R+L D

!T

+*F

-@

'

'@

- U

'

:

4

3

: ? - "

'

@

-3

2

: '

:

2

- >

@

3

:

# #

-

3

'

2

#

2

:9

9

- $

.

P

- $

A

• $

# .

:

B

# #

B

#

-$

@

2

D

!T +*F

A

• %

# #

B

(13)

• !

2

.

3 3

#

4

3

:

B

• !

2

#

.

# #

B

• %

:

?

-S

.

3

'

9

@

.

4

-6.

%

* :

33

4

3

:

-

2

#

-0

'

5

- "

4

#

'

- "

#

5

'

9

3 -

'@

#

2

8

.

?

-'

'

2

3

:

4

2

4

#

->

# :

4

'

9

:

.

4

3

:

-.

3

#

#

3

3

3 4

5

-# -#

3

.@

.

-4.

?

3

3

.

-U

2

4

4

'

3

:

' #

.

8 3

-3

A

• " 5

A

# B

• "

A

B

• !

A 4.

B

3

#

3

A

(14)

2V

B

*- %

2

3

5

B

#

3

A

(- %

.

2

8

9

'

.8 #

3& B

*- %

2

8

. 4

3 4

B

'

#

3

'

'

' 2

.

5

A

3 4

5

B

3 4

B

# #

3

B

B

$

@.

#

# 2

-$

4

@

3 A

3 4

.

# #

'2

5

- $

3 4

@

#

'

#

#

-•

3 4

5

.

# #

5

- $

@

.

.

3

'

2

2

#

# #

'

5

-•

# #

3

.

- U

.

3

2

.8 #

3

.

#

# #

8 '

# #

-• W

#

# #

@

'@

-

$

4

@

(15)

-0

4 '

'

3

:

'

'

&

- $

"

D

+*F D "

+*F

@

?

4

4

4

- $

2

.

- S

&

9

'

#

:

8

-6.

'

33

3

(

D

!T +*F

- S

.

# 9

&

? - S

2

3

9

3 '2

#

5

6

" 9

1* 7

- S

'

'

#

3 4

6

"

7

- >

3

:

2

8

#

'

#

9

.

#

6

3 7

- S

'

@ '2

2

9

:

3 4

'

- "

'

'

.

-'

#

# #

-Nível de Maturidade 5 IOD, ACR Nível de Maturidade 4 POP, GQP Nível de Maturidade 3 DR, ST, IP, VER, VAL, FPO, DPO, TO, GPI, GRSC, ARD

Visão Geral Introdução Estrutura do Modelo Terminologia do Modelo

Níveis de Maturidade, Características Comuns e Práticas Genéricas

Entendendo o Modelo Usando o Modelo

Nível de Maturidade 2 GR, PP, MCP, GAF, MA, AQPP, GC

Apêndice

Engenharia GR, DR, ST, IP, VER, VAL Gerenciamento do Projeto PP, MCP, GAF GPI GRSC, GOP, EI Gerenciamento do Processo FPO, DPO, TO, POP, IOD Process Management PAs - Goals - Practices Suporte GC, AQPP, MA, ACR, ADR Apêndice

CMMI-SE/SW

Em estágios

Visão Geral Introdução Estrutura do Modelo Terminologia do Modelo

Níveis de Maturidade, Características Comuns Práticas Genéricas

Entendendo o Modelo Usando o Modelo

CMMI-SE/SW

Contínua

(16)

3

#

?

--

&!

3

3

:

#

'

3

4

-#

4

#

# '

# #

3

:

- !

#

8

'

3

:

#

2

.

'

2

# - !

'

3

:

# *6

3

7

:

3

6

#

3

(7

A

9 3

2

6

G 7

B

9

8

8

6

!!7

B

9

8

6 !7

B

9 3

6

G %7

B

9

6 7

B

9

3

2

6 W!!7

B

9 3

3

6

G 7

B

.

(

3

3

3

('.

2

#

# '

#

-) / ; 3 : * 2 < * = " - ! ; * " " 7/ 9 = & * -7 9 ( > " 1 * 1 * ? " = < * / ! ; * < * 7</<9 = 1 * > " < 0 71><9 ' < * ; = " " ? 7 9 = - @* * 7 9 = ! - < 7<9 = * - 7 9 = - 7 9 = * < * / ! ; * 7 </9 = - < * / ! ; * 7 </9 = / ! ; * 7 /9 = 1 * < 0 ! 71< 9 = 1 * !

(17)

* 71 9 = 1 * * 71 9 = & * -- 7 9 = / ! ; * ! - 7 / 9 = ? ! 7 9 % 1 * 1 * & * 0 = 1 * ? 71 9 = < 0 < 0 7<<9 = 3 < 0 73 <9 = 1 * * * * 71 9 = 3 & 73 9 = ! ? * 7 ><<9 = 1 * * ! - 71 9 $ * $A B * 2" -&! .

3

*' .

'

3 -

3

-Nível de Maturidade

Área de Processo Área de Processo Área de Processo Objetivos Genéricos Objetivos Específicos

Comprometi-mento p/ executar

Habilidade

p/ executar implementação Dirigindo a Verificação

Características Comuns

Práticas Genéricas Práticas Específicas

33

(18)

2

"

3

$ "

D "

+*F

#

X

#

.

4

-

S

4

#

'

@

4

- "

A

(-*- G

,-E- W

#

G

K- $

:

S#

8

:

.8 #

3 @

2

-

3

# 9

#

-2

"

$A

*

S

#

4

&

- G

3

- $

.

-

3

: ?

.

#

-2

"

%A !

*

$

8

3

:

3

2

2

3

2

8

'

'

-

3

:

2

-

3

:

.8 #

3 @

:

#

*-

.

4

# ?

2

-2

"

'A

: 9

.

? '

'

@

-

#

(19)

*@

2

?

3

3

:

'

8 - S

# ,

3

&9

# '

9

9

#

- U

#

:

# ?

2

#

-2

"

( A ?

"

!

*

#

#

,

#

E @ 2

# .

- S

# E'

@

9

@

2

# - S

# '

# ?

2

#

-2

"

)A

;

$

4

.

#

2

#

.

#

-

4

#

4

&3

#

'

#

.8 #

3&

3

:

->

#

&

#

- !

#

#

-

'

'

#

'

3

: ?

.

#

-33

D

+*FD "

+*F

3 -

3

*

- S

*-,#

.

3

2

-B

*

C

@

8

6

3 @

7

3

:

6

3

2

7

-W

#

'

:

(20)

8

.8 #

2

:

4

3

#

-/ 0 "

*2*

C

9

.

2

#

2

#

:

2

6

3

2

7

-< & *

*2*

C U

#

2

@

:

.8 #

6

$.

2

7

-*

2 *

C

W

3

:

3 @

-(-

D *

A

#

4

-*- E

D *

A

3

2

8

H

3

:

4

4

-,-

!

- A

'

-E-

* - A #

#

8

H

3

:

2

'

-/ 0 "

1

@ *

=

.8 #

4

;

3 @

<

2

.8 #

P

- "

#

6

:

3

7

-< & *

1

@ *

= %

:

3

2

8

# '

#

6

.

.

7

-3 '

-- *

2

:

#

'

'

3

#

3

2 #

3

:

-

3

3

#

4

(21)

-.

*' .

'

3

3

-1 * < 0 = < 0 < 0 = 3 < 0 = 1 * * * * = 1 * < 0 ! = 1 * ! * = 1 * * = 1 * > " < 0 = ? ! = 3 & = ! ? * = 1 * * ! -= & * -= / ! ; * ! -= & * - -! : $.$.$.$.$.$.$ = 1 * ? = " " ? = @* * = ! - < = * -= -1 * * = < * / ! ; * < * = " - ! ; * " " = * < * / ! ; * = - < * / ! ; * = / ! ; * %A ! & * .

(22)

3

,

-Figura 3: representação contínua do modelo CMMI.

S#

.

4 .

'

4

3

: ?

2

3

:

- !

'

3

:

2

# #

8

@

'

#

'

:

3

3 4

-

#

2

3

:

'

#

I

- $

#

#

#

#

#

3

'

3 - S

"

D

+*F 4

4

#

-

3

2

#

:

3

#

8

D

!T +*F

A

S

'

A Y . 4

A

'

3

'

2

'

.

.

'

'

Área de Processo Área de Processo Área de Processo

Objetivos Genéricos Objetivos Específicos Níveis de capacidade Práticas Genéricas Práticas Específicas

33

- *

2

(23)

3

3

'

'

#

#

3

! " #

A $

8

3

?

3

:

'

@

2

#

@

.

#

3

:

$ %

A

@

# '

# '

3

& '

(

A

#

'

4

& # '

# ?

&3

# #

3

E D

!T +*F

' .

'

6

G '

'"Y7

-? - $

;

2

.

<

#

@

- $

; 2 < : - S

3

4

#

3

2

'

G

@

3

2

'

'

# #

2

'"Y'

?

@

-

.

#

'

#

- S

3

'

?

@

6

"Y7

#

# *6

7

-Figura 4: exemplo de nível de capacidade de gerenciamento de requisitos.

3 '

9

3

2

'2

# #

#

#

. 4

-5

4

3

2

1

0

C A P A C I D A D E

Área de processo

GR

DR

ST

etc

(24)

1

*

?

$

.8 #

8

@

4

5

- $

4

3

2

'

#

8

-

'

:

I

.

.9

2

-

!

4

'

.@

'

9

4

D "

+*F

-8

@

3 4

5

'

4

3

-B

*

= G

2

-- =

3

-<

F

= $

&

3

2

@3

2

8

2

. 4

-/ 0 "

1

@ *

*2* A

/ 0 "

*2*

$ = 1

*

?

A

2

3

8

. 4

-/ 0 "

1

@ *

%

=

*

;

*

!

*

A $

@

:

3

G

8'

3

:

:

8

'

'

&

.

:

- $

3

-/ 0 " 1

@ * ' =

*

;

*

7 D!

2

"

'

(

*

9A $

@

:

'

8'

'

2

@

3

-.

3

.8 #

3 @

-

.

9

3

3

A !

'!G

3

- $

P

(25)

#

@

3

3

P

- !

A ! (-(

I

#

-Gerenciamento de Requisitos

Práticas Específicas

PE1.1: Obtendo um entendimento dos requisitos PE1.2: Obtendo o comprometimento para os requisitos

PE1.3: Gerenciando as mudanças de requisitos PE1.4: Mantendo a rastreabilidade bi-direcional dos requisitos

PE1.5: Identificando inconsistências entre os produtos de trabalho e os requisitos

Práticas Genéricas

PG1.1: Executar práticas base

PG 2.1: Estabelecer uma política organizacional PG 2.2: Planejar o processo

PG 2.3: Fornecer recursos PG 2.4: Atribuir responsabilidades PG 2.5: Treinar pessoas

PG 2.6: Gerenciar a configuração

PG 2.7: Identificar e envolver os atores relevantes PG 2.8: Monitorar e controlar o processo

PG 2.9: Objetivamente avaliar a aderência PG 2.10: Revisar o status com a mais alta gerência

'A & * ! @ * *2* * ! * ? .

.8 #

&

@

#

'

# 9

'

'

8 - S

@

! (-E' . 4

.

,A

<

$.

(

3

=

*

?

A

.

.9

2

8

. 4

-@

.

.9

2

#

-W

2

.

3

@

#

4 9

.

#

@

& 3

-.

.@

.

2

'

'

8 '

-

@'

.@ '

2

.

8 ' #

. 4

-<

:

2 *

(-

:

.

2

*- "

4

2

& *

(-

.

2

3

2

& 3

#

2

8

-*-

.

2

2

2

#

2

? ' .8

'

(26)

,-

.

4 :

#@

-E- G

:

.

2

@'

'

. 4

# #

- $

'

#@

3

:

.

2

@

2

-4

2

@

'

. 4

8

-

#

2 '

3

'

9

4

2

-3

'

# 9

2

3

2

(27)

-H <

F

*

"

@

# #

3

.

#

2

4

2

'

3

# #

5

' 2

' @

.

- "

3

: ?

2

:

3

5

'

-3 '

#

9

# #

&

# #

A

'

8

-H.

$

&

2

.9

2

8

# #

5

' #

2

'

I

. 2V

-@

'

#

.

3

# #

5

'

3

:

-

#

I

8

# #

.@

4

3

# #

-!

2

2

8

5

#

-

'

:

2

& 3 6

# 8 3

K7

-

.

3

# #

2

2

3

'

- !

'

2

'

8

P

6

# 8 3

J7

-

#

I

8

2

.@ I #

# #

- "

'

8

.

.

3

#

3

# #

.@

-3

.

3

M

'#

I

8

2

(28)

-) Fase de Requisitos

& 3

Fase de Código

Figura 5: Processo simples de desenvolvimento de Software

Fase de Projeto

?

Testes

Fase de Testes

Figura 6: Processo complexo de desenvolvimento de Software

$

.

2

#

3

3 3

:

-

'

2

# #

3

3

3 3

A

(29)

ZNNN[SSSSS'NNN

SSSSS

P

2

-

A

2

6

Z

W[++++(7

'

8

6

Z! [++++(7

'

6

ZY"Y[++++,7

-•

2

.

Z\]]]]]]]]]]]]]]]]]]^']]]]]]]]]]]]]]]]]]

#

2

-

A

2

6

Z\

3

.

3

^7

'

8

6

Z\ % :

3

.

^7

'

6

Z\ 1

3

.

:

^7

-• $

2

.

ZZNNN[SSSSS'NNN

SSSSS

P

2

-A

2

6

ZZ

W[++++(7

'

8

6

ZZ! [++++(7

'

6

ZZY"Y[++++,7

-&

.

3

3 3

-

#@

:

.

2

(

3

# #

6

# 8

3

J7

-

@

.@

2

8

(

. 2V

-1 8

.

A

2

A

Z

W[++++( Z\

3

.

3

^

8

Z! [++++( Z\ % :

3

.

^

ZZ

W[++++(

Y

ZY"Y[++++(Z\ 1

3

.

:

^

ZZ

W[++++(

ZZ! [++++(

$

@

:2

:

2

3

# #

6

# 8

.

(7

-

:

I

3

3

A

• W

(30)

• $

2

H

_

• Y

2

.

H

_

• $ 2

@

_

• W

:

#

2

_

? < 0 Z W[++++( Z! [++++( ZY"Y[++++( (A 3 ; ?

H.

% < 0

> : 9

3

3

> CD > )EFD

)*F

2

8

#

-3

M

8

5

`

! 8 a 2

. :

8

-'

`

!

a

'2

# :

2V

'

`

!4

a6

# 8 3

Q7

-'

.8

M

2

8

# #

2

.@

#

# #

5

(31)

>

.

@

- "

'

9

8

. :

6

`

a

7

#

- $

8

2

'2

`

%

a

'

2

2

'

.@

2

H

6

# 8 3

R7

-Figura 8: Especificação das classes Document e Feature.

.

3 3

6

`

G

a

7

#

:

#@

@

6

`

: a

7

-

#

.

2

6

0

7

2

#@

6

# 8 3

)7

(32)

-Figura 9: Especificação das classes Grammar, Analizer e Builder.

$

#

-#

2

.

2

3

-

M

3

.

2

3

2V

3

(+ ((

#

A

(33)
(34)
(35)

H.

'

-$

#

@

#

8

.

8

#

3

6

# 8 3

(*7

-Figura 12: Interface inicial.

&

.

#

8 '

9

3

# #

2

8

- !

'@

:

6

# 8

3

(,7 2

@

#@

`

!

a

-$

5

-

@

'@

#

3

6 A

2

7

'

2

6 A Z

W[++++( =

$

W7

'

2

P

6 A

(36)

#

-Figura 13: Interface de edição de processo.

3

9

.

6

# 8 3

(E7

#

6

# 8

3

(K7

.

2

3

. 2V

(37)
(38)

Figura 15: Interface da árvore de rastreabilidade dos requisitos.

3

:

Y

(39)

-(.

'.

$

7

*

9

9

# Y

.8 #

.

8

# #

5

-&

# #

5

#

6 A %

2

' %

! 8

%

& 3 7

'

:

@

8 - S

: 9

P

'

2

: 9

P

6 A *

#

2

2

8 7

-$

2

'

8

& 3

# Y

:

9

2

2

:

#

2 #

4

- S

'

: 9

#

6

1 8

3

(J7

- $

2

'

8

& 3

(40)

(-&

8

6 A

2

'! 8

& 3 7

'

# 9

:

&

'

&

P

# #

6 A

$

&

`Ab

b

b( 2

a

:

2

7

-S

9

,

&

6 A

`Ab

b

b( 2

a

'

`Ab

b

b*

8 a

`Ab

b

b(

a

72

# #

# Y

:

9

#

8

6 A

`

([ 2

-4 a

@

:

`Ab

b

b( 2

a

7

-

#

&

3

(Q-Figura 17: Árvore de diretórios (representa-se as fases do processo e armazena-se os documentos do projeto).

(41)

#

&

'

9

:

#

Y

-'

9

# Y

3

`

% 9^S 5a6

# 8 3

(*7

9

&

8

6 A ` Ab

b

b

a

7

2 #

8

6 A

7

- %

'

9

2 #

8

` Ab

b

b

b

-

a

# Y

-$

3

9

# #

- U

#@

`

!

9^

a

- S

'

# 9

6 A

2

' ! 8

& 3 7

#

Y

-@

'

3

9

6 A

2

7

'

2

6 A

W

W[NNNNN7

'

P

3

:

6 A $

W[++++(

:

K

3

7

:

6 A

2

:

`Ab

b

b( 2

a

7

-

&

9

.

`

a

# #

-# -#

8

# Y

3

(42)

(R-Figura 18: Fases de desenvolvimento (Requisitos, Projeto e Código).

&

3

'

9

:

.

2

6 A

2

'! 8

& 3 7

# #

-

'

# 9

2

#

3

-

3

()

` 2

a

-Figura 19: Seleção da fase “Requisitos” a ser mapeada ao longo do processo.

@

'

3

9

2

.

.

#

.

2

- S

'

3

9

`

=

2

a6

1 8 3

*+7

- $

3 A

2

6 A

7

B

2

. 2V

6 A Y

7

B

2

2

(43)

Figura 20: Seleção do modo de mapeamento “All – Mapear todos os requisitos”.

.@

3

3

2

A

*

A `

a9

2

- $

2

Z

W[++(

` 2

a

2

Z! [++(

`

! 8 a

- $

2

Z! [++(

`

! 8 a

2

Z $ [++(

` & 3 a

- S

Z

W[++(

`

! 8 a

- 1 8

.

.

2

.

A

?

< 0

F !

W[++(

! [++(

9

+

*

A `

a 9 Y

2

- $

2

Z

W[++(

` 2

a

2

Z! [++(

`

! 8 a

- $

2

Z! [++(

`

! 8 a

2

Z $ [++(

(44)

`

! 8 a

` & 3 a

- 1 8

.

.

2

.

A

?

< 0

F !

W[++(

! [++(

$ [++(

S

#

3

9

`

a

3

*(-Figura 21: Seleção do modo de mapeamento “Indirect”.

&

3

'

9

.

#

.

2

- !

'

9

.

`

Y

a

-

3

**

*,

2

#

-.

'

9

`

! 8 a

2

3

. 2V

: 9

3

(45)
(46)
(47)

Figura 24:Tabela de traceabilidade de requisitos da fase “Projeto” .

&

.

.

2

'

9

:

2 #

4

- !

'

9

`

% 9^

a

2V

3 9

2 # 4

# -

3

*K

.

2

`

! 8 a

4

(48)

-Figura 25:Tabela de traceabilidade de requisitos da fase “Projeto” convertida em html.

'

9

.

Y

(49)

-I

*

!

2

3

>%" H

'

9

M

3

'

#

# #

#

2

#

- !

'

. 9

:

3

2

# -

3

4

. 4

;

# <

'

.

'

.

'

#

3

-2

.

# #

4

3

: ? '

.@

:

#

2

' 8

.

'2

@

3

3

3

: ? - !

'

3

2

3

4

. 4 '

3

: ?

#

#

2

3

#

#

- $

@2

-'

2

@

:

.

3

2

#

# '

- $ .8 # @

4

;

<

'

4

(50)

-$J

K *

L

! & *

D

)EF

3

> #

/H"

5

3

3

-Y4

. /

/

A G

# 3 4

5

- !

. 34A

-

=

/'())EEK(

-D

+*F

3

> #

/H"

5

3

3

-. /

/

3

6

" 7=

'1

(('*++*'JEK

-D " +*F

3

> #

/H"

5

3

3

-. /

/

3

6

" 7= " 3

'1

(('*++*'J,)

-D

)*F

.

' #

- $.8 9$

"

5

3

3=

>

#

4- T

5A

-

9

/'

())*'K*R

-D > )EF

. 34'

-

3

! 8

0

$.8

- "

!

A

-

'())E'JK*

-D

!T +*F !4

' -

1(-(Y

A 9" !G-

3

> #

/H"

5

3

3

- !

. 34'!

-\

4

AH

H

555-

-

-.H

c

H 5

H

^'

*(

:

.

*++*-D

O++F

'

-

! 3

3

- T

5A

-=

/'*+++ (KR

(51)

-$$

D

$$.

$

*

?

*

"

*

Universidade Federal de Santa Catarina

Projeto: Tracer

Aplicação: Tracer System

Especificação de Requisitos do Tracer

Identificador do Documento: REQ Versão (draft): 1.0

(52)

Histórico do documento

Versão Autor(es) Data Ação Esforço (em horas,

especificado por autor)

1.0 Carlos Matias

(53)

Conteúdo

1. INTRODUÇÃO... 54

1.1. OBJETIVO DO DESENVOLVIMENTO ...54 1.2. DEFINIÇÕES, ABREVIATURAS ...54 1.3. REFERÊNCIAS ...54 1.4. LOCALIZAÇÃO...54

2. VISÃO GERAL DO SISTEMA ... 54

2.1. ARQUITETURA DA APLICAÇÃO ...54 2.2. PREMISSAS DE DESENVOLVIMENTO ...54

3. REQUISITOS DA APLICAÇÃO... 55

3.1. REQUISITOS FUNCIONAIS...55

3.1.1. Projeto ...55 3.1.2. Fases do Processo ...Error! Bookmark not defined.

3.1.3. Inserir / Retirar Fases...55 3.1.4. Edição das Fases...55 3.1.5. Linguagem Padronizada ...55 3.1.6. Mapeamento Bidirecional e Automático ...55 1.1.1. Matriz no formato html...56

3.2. REQUISITOS DE INTERFACE ...56

3.2.1. Interface tabela de traceabilidade ...56 3.2.2. Interface árvore de traceabilidade...56

3.3. RESTRIÇÕES DE PROJETO...56

3.3.1. Suporte de desenvolvimento...56 3.3.2. Plataforma de execução ...56 3.3.3. Padrões de modularização ...57 3.3.4. Robustez, integridade e segurança...57 3.3.5. Performance...57 3.3.6. Manutenção ...57

(54)

-/ 0 "

" "

Este documento tem como objetivo identificar os requisitos do projeto Tracer.

G

"

UFSC - Universidade Federal de Santa Catarina

K *

Nenhuma.

* ;

-/tracer/examples/tracer/1requirement/1_requisitos.htm

- !

?

*

-O aplicativo Tracer consiste principalmente em montar a matriz de traceabilidade de requisitos de forma automática e bidirecional.

<

" "

(55)

?

*

-?

*

Projeto

#REQ_001 #<Criar, Salvar e Abrir um projeto.>

Requisitos relacionados:

Inserir e Retirar Fases do Processo

#REQ_002 #<Inserir e Retirar fases do processo de desenvolvimento.>

Requisitos relacionados:

Edição das Fases do Processo

#REQ_003 #<Editar o nome de cada fase, o identificador de requisito, a quantidade de números utilizado no identificador e o diretório onde estão os documentos.>

Requisitos relacionados:

Linguagem Padronizada

#REQ_004 #<Utilizar uma linguagem padronizada para especificar os requisitos, a sua descrição e os requisitos mapeados e/ou relacionados.>

Requisitos relacionados:

Mapeamento Bidirecional e Automático

#REQ_005 #<A ferramenta permitirá o mapeamento de todos os requisitos de todas as fases do processo de forma bidirecional e automática.>

Requisitos relacionados:

Mapeamento N Fases

#REQ_006 #<Mapear os requisitos de todas as fases do processo de desenvovimento.>

(56)

Modos de Mapeamento

#REQ_007 #<Definir 3 formas de mapeamento de requisitos: Todos os requisitos, apenas os requisitos mapeados, apenas os requisitos não mapeados.>

Requisitos relacionados:

1.1.1. Matriz no formato html

#REQ_008 #<A matriz de traceabilidade das fases do processo será armazenada em um arquivo no formato HTML.>

Requisitos relacionados:

?

*

Interface tabela de traceabilidade

#REQ_009 #<A matriz de traceabilidade das fases do processo deve ser mostrada em uma interface gráfica, sendo representada por uma tabela onde as colunas representam as fases do processo e os requisitos mapeados.>

Requisitos relacionados:

Interface árvore de traceabilidade

#REQ_010 #<A matriz de traceabilidade das fases do processo deve ser mostrada em uma interface gráfica, sendo representada por uma árvore>

Requisitos relacionados:

0

Suporte de desenvolvimento

Por exemplo, usar UML com Rational Rose, Delphi, Oracle etc.

Plataforma de execução

(57)

Padrões de modularização

DLLs, nomes de arquivos (executáveis, de dados etc) etc.

Robustez, integridade e segurança

Condições adversas sob as quais a aplicação deve manter-se em operação

(rede inoperante, esgotamento do tempo de resposta a alguma solicitação etc)

Integridade de arquivos de dados em panes elétricas, interrupção abrupta de

procedimentos etc.

Política de classificação de usuários, com especificação de restrições de

acesso a dados e funcionalidades etc.

Performance

Tempos de resposta

Manutenção

Restrições de tempo e esforço para proceder alterações emergenciais

referentes a modificação de legislação ou identificação de bugs

(58)

$$.

%

*

< 0

*

"

*

Universidade Federal de Santa Catarina - UFSC

Projeto: Tracer

Aplicação: Tracer System

Especificação de Projeto do Tracer

Identificador do Documento: PRJ Versão (draft): 1.0

(59)

Histórico do documento

Versão Autor(es) Data Ação Esforço (em horas,

especificado por autor)

1.0 Carlos Matias

(60)

Conteúdo

1. INTRODUÇÃO... 61

1.1. OBJETIVO DO DESENVOLVIMENTO ... 61

1.2. DEFINIÇÕES, ABREVIATURAS ... 61

1.3. REFERÊNCIAS... 54

1.4. LOCALIZAÇÃO ... 54

2. VISÃO GERAL DO SISTEMA ... 61

1.5. ARQUITETURA DA APLICAÇÃO ... 61

1.6. PREMISSAS DE DESENVOLVIMENTO... 61

3. PROJETO DA APLICAÇÃO... 62

3.1. PROCESSOS ...62 3.1.1. Classe Project ...63 3.1.2. Classe Process ...63 3.1.3. Classe Phase ...63 3.2. DOCUMENTOS...64 3.2.1. Classe Document. ...64 3.2.2. Classe Feature...64 3.3. TRACER...65 3.3.1. Classe Analizer...65 3.3.2. Classe Builder...66 3.3.3. Classe Tracer. ...66 3.3.4. Classe Table...66 3.3.5. Classe Grammar. ...66 3.3.6. Classe HTMLDoc...66 3.4. INTERFACES ...67 3.4.1. Interface do Tracer...67 3.4.2. Interface do Editor de Processos...68

(61)

-$.

%. / 0 "

" "

Este documento tem como objetivo identificar a arquitetura do projeto Tracer, identificando os seus principais componentes também a interface com o usuário.

$.

'.

G

"

UFSC - Universidade Federal de Santa Catarina

$.

(.

K *

Especificação de Requisitos do Projeto Tracer

$.

).

* ;

-/tracer/examples/tracer/2project/2_project.htm

- !

$.

,.

?

*

-O aplicativo Tracer consiste principalmente em um analisador que faz o parsing dos requisitos contidos em um documento. Esses são repassados para um montador o qual analisa sintaticamente os requisitos do documento e posteriormente monta a estrutura dos documentos.

Em seguida, o linkador conecta / traça os requisitos ao longo do processo de desenvolvimento. Após realizar o mapeamento, a tabela e a árvore de traceabilidade da fase selecionada é mostrada na interface gráfica do aplicativo Tracer.

$.

6. <

" "

(62)

< 0

*

-< *

O uso de inúmeros processos de desenvolvimeto, devido principalmente às diferentes realidades vivenciadas, requeriu a especificação de uma classe Project que representa o projeto em execução e também as classes Process e Phase que representam o processo de uma determinada organização e suas respectivas fases (veja figura 1).

(63)

Classe Project

#PRJ_001 #<A Classe Project é responsável pelo armazenamento do processo de

desenvolvimento e também por armazenar em arquivo os dados pertinentes ao projeto. Esses incluem principalmente os dados de cada fase do processo.>

Requisitos Relacionados/Mapeados: ##REQ_001

Classe Process

#PRJ_002 #<A classe Process possui uma lista de fases do processo de desenvolvimento. Assim, ao definirmos um processo, armazenamos nessa lista a sequência de fases especificada. Além disso, também fornece a gramática a ser utilizada para fazer o parsing dos documentos.>

Requisitos Relacionados/Mapeados: ##REQ_002

Classe Phase

#PRJ_003 #<A classe Phase armazena o nome da fase, o identificador da fase, o diretório que contém os documentos e a expressão regular utilizada no parsing dos documentos.>

##REQ_002 ##REQ_003

(64)

*

Os documentos de uma determinada fase do processo de desenvolvimento estão representados nas classes Document e Feature (veja figura 2). Mesmo se utilizarmos vários documentos em uma determinada fase, esses serão representados por um único objeto da classe Document. Sendo assim, os documentos de uma mesma fase não podem incluir identificadores de requisitos idênticos.

Classe Document.

#PRJ_004 #<A classe Document é responsável pelo amazenamento de todos os requisitos encontrados em uma determinada fase do processo. Além disso, também realiza operações de ordenamento dos mesmos.>

Requisitos Relacionados/Mapeados:

Classe Feature.

#PRJ_005 #<A classe Feature armazena todas as informações pertinentes a um requisito de um documento. Essas incluem o seu identificador, a descrição do requisito e uma lista com todos os requisitos mapeados e/ou relacionados.>

Requisitos Relacionados/Mapeados:

(65)

*

Utilizaremos um analisador, classe Analizer, para fazer o parsing dos tokens nos dodumentos e também um montador, classe Builder, para verficar a estrutura sintática dos tokens fornecidos pelo analisador. Esse utiliza uma gramática, classe Grammar, fornecida pelo objeto da classe Process (veja figura 1) para fazer o parsing dos tokens.

O fato de traçarmos os requisitos ao longo das fases do processo, levou à especificação de um linkador, classe Tracer. Este é responsável por conectar os requisitos e montar a tabela de traceabilidade de requisitos, classe Table, resultante (veja figura 3).

Figura 3: Diagrama das classes Analizer, Builder, Tracer, Table, Grammar e HTMLDoc.

Classe Analizer.

#PRJ_006 #<A classe Analizer é responsável pelo parsing dos tokens da linguagem definida de acordo com as fases do processo de desenvolvimento. Por ouro lado, o analisador verifica o tipo do token>

(66)

Classe Builder.

#PRJ_007 #<A classe Builder constrói todos os documentos e seus respectivos requisitos e também realiza a análise sintática de todos os tokens fornecidos pelo analisador. Posteriormente, os envia para o linkador a fim de conectar os requisitos e montar a tabela de traceabilidade de requitos.> Requisitos Relacionados/Mapeados:

##REQ_005 ##REQ_006

Classe Tracer.

#PRJ_008 #<A classe Tracer conecta o requisito mapeado, colocando-o na lista de requisitos mapeados do requisito principal. A operação inversa também é efetuada a fim de possibilitar o mapeamento bidirecional dos requisitos. Além disso, monta e fornece a tabela de traceabilidade de requisitos de uma determinada fase.>

Requisitos Relacionados/Mapeados: ##REQ_005

##REQ_006

Classe Table.

#PRJ_009 #<A classe Table conecta o requisito mapeado, colocando-o na lista de requisitos mapeados do requisito principal. A operação inversa também é efetuada a fim de possibilitar o mapeamento bidirecional dos requisitos.>

Requisitos Relacionados/Mapeados: ##REQ_005

##REQ_006

Classe Grammar.

#PRJ_010 #<A classe Grammar armazena as sentenças fornecidas pelas fases, classe Phase, do processo, classe Process, e posteriormente as envia ao analisador.>

Requisitos Relacionados/Mapeados: ##REQ_005

##REQ_006

Classe HTMLDoc.

#PRJ_011 #<A classe HTMLDoc é utilizada para montarmos a tabela de traceabilidade de requisitos no formato html e em seguida gravar em um arquivo do sistema.>

Requisitos Relacionados/Mapeados: ##REQ_008

(67)

*

Modelamos duas interfaces com usuário. A primeira (Veja figura 4) constitui-se em uma janela principal onde cria-se um novo projeto e também mostra-se ao usuário a tabela e a árvore de traceabilidade dos requisitos. A segunda (Veja figura 5) possibilitará a configuração do processo de desenvolvimento em questão, como a inserção e retirada de fases do processo.

Interface do Tracer

#PRJ_012 #<A interface principal do projeto Tracer permite salvar, renomear e abrir um arquivo de projeto. Além disso mostra a árvore e a tabela de traceabilidade de acordo com o modo selecionado, All, Traced e Untraced, sendo possível exportar a última para um arquivo html. Através dessa janela, podemos também executar o editor de processos.>

Requisitos Relacionados/Mapeados: ##REQ_007

##REQ_008 ##REQ_009 ##REQ_010

(68)

Interface do Editor de Processos

#PRJ_013 #<A interface do editor de processos possibilita a inserção, a retirada e a configuração de cada fase do processo. Esta inclui a definição do nome de cada fase, o seu

identificador, o número de dígitos utilizado no identificador e o diretório onde estão os documentos.> Requisitos Relacionados/Mapeados:

##REQ_002 ##REQ_003

(69)

$$.

'

*

F !

*

"

*

package project; import java.util.*; import parser.Grammar; /**

* #COD_012 #<Class Process> * ##PRJ_002

* ##REQ_004

* Process that stores phases

* @author Carlos Matias / Ricardo Winck */

public class Process { /**

* phases of the current process */

private LinkedList phases; /**

* grammar to be loaded into analizer */

private Grammar grammar; /**

* Builds a new process */

public Process() {

phases = new LinkedList(); }

/**

* Insert a new phase in the end of the process */

public void addPhase(Phase new_phase) {

phases.addLast(new_phase); }

/**

* Creates a new phase and inserts it in the end of the process. */

public void createPhase(String name, String id, int num_digits, String file_name)

{

Phase new_phase = new Phase(name, id, num_digits, file_name); addPhase(new_phase);

(70)

* @return int */

public int getNumberOfPhases() {

return phases.size(); }

/**

* Returns the process phases iterator * @return ListIterator

*/

public ListIterator getPhasesIterator() {

return phases.listIterator(); }

/**

* Returns the process phases * @return Vector

*/

public Vector getPhases() {

Vector phases_temp = new Vector();

ListIterator iterator = phases.listIterator(); while (iterator.hasNext())

{

Phase phase = (Phase) iterator.next(); phases_temp.add(phase.toVector()); }

return phases_temp; }

/**

* Returns the names of phases * @return Vector

*/

public Vector getNamesOfPhases() {

Vector phases_temp = new Vector();

ListIterator iterator = phases.listIterator(); while (iterator.hasNext())

{

Phase phase = (Phase) iterator.next(); phases_temp.addElement(phase.getName()); }

return phases_temp; }

/**

* Returns the grammar to be parsed along the process phase documents.

* @return Grammar */

(71)

grammar = new Grammar();

ListIterator iterator = phases.listIterator(); while (iterator.hasNext()) {

Phase current_phase = (Phase) iterator.next(); String sentence = current_phase.getRegexp(); grammar.addSentence(sentence); } if (grammar.hasSentences()) { grammar.addSentence("(#&lt;([^(#)]*)&gt;)"); } return grammar; } /**

* Remove all phases of the current process */

public void clear() { phases.clear(); }

/**

* Convert the process to a string representing the process phases. * @return String

*/

public String toString() {

StringBuffer buffer = new StringBuffer(); ListIterator iterator = phases.listIterator(); while (iterator.hasNext())

{

Phase phase = (Phase) iterator.next(); buffer.append(phase.toString()); } return buffer.toString(); } } package parser; import java.io.*; import java.util.*; import javax.swing.tree.*; import project.Phase; import project.Process; import docs.*; /**

* #COD_007 #<Class Tracer> * ##PRJ_008

*

* <p>Store all documents.</p> * <p>Link features.</p>

(72)

*/

public class Tracer { /**

* list of documents. */

private LinkedList documents;

/**

* process */

private Process process;

/**

* Mapped feature table */

private Table table;

/**

* Builds a new Tracer

* @param process process to be traced */

public Tracer(Process process) { documents = new LinkedList(); this.process = process;

}

/**

* Looks for the document that contains the specified feature. * @param Feature feature - feature to be searched in the documents list

*/

public Document findDocument(Feature feature) {

ListIterator iterator = documents.listIterator(); boolean isContained = false;

Document current_doc = null; while (iterator.hasNext()) {

current_doc = (Document) iterator.next(); if (current_doc.contains(feature) == true) { isContained = true; break; } } if (isContained == false) current_doc = null; return current_doc; } /**

* Looks for a feature inside the documents list.

* @param Feature feature - feature to be searched in the documents list

*/

public Feature findFeature(Feature feature) {

(73)

Document current_doc = null; Feature current_feature = null; while (iterator.hasNext()) {

current_doc = (Document) iterator.next(); if (current_doc.contains(feature) == true) { current_feature = current_doc.getFeature(feature); break; } } return current_feature; } /**

* Links two features

* @param mainFeature main feature * @param mappedFeature mapped feature */

public void connect(Feature mainFeature, Feature mappedFeature) throws Exception {

Feature feature1 = findFeature(mainFeature); Feature feature2 = findFeature(mappedFeature); if ((feature1 != null) && (feature2 != null)) {

feature1.addMapped(feature2); feature2.addMapped(feature1); } else {

throw new Exception("Feature not found."); }

}

/**

* Creates a new Document * @param name document name * @return Document

*/

public Document createDocument(String name) { Document doc = new Document(name); documents.add(doc);

return doc; }

/**

* Creates the feature traceability table * @param selectedDocument phase to be traced */

public void buildTable(int selectedDocument) throws Exception { Document document = (Document)

documents.get(selectedDocument);

if (document.hasFeatures() == false) { String docName = document.getName(); throw new Exception(

(74)

+ "\" does not contain features to be traced.");

}

int numberOfPhases = process.getNumberOfPhases(); Vector rows = document.toTableRows(numberOfPhases); table = new Table(rows, selectedDocument);

}

/**

* Returns the feature string table * @param traceMode feature trace mode */

public Vector getStringTable(int traceMode) throws Exception { Vector rows; switch (traceMode) { case Table.ALL : rows = table.getFullStringTable(); break; case Table.TRACED : rows = table.getTracedStringTable(); break; case Table.UNTRACED : rows = table.getUntracedStringTable(); break; default :

throw new Exception("Invalid Trace Mode."); }

return rows; }

/**

* Returns a table cell as a string * @param row table row

* @param col table col * @return String

*/

public String getTableItem(int row, int col) {

Vector tableCol = (Vector) table.getCell(row, col); ListIterator colIterator = tableCol.listIterator(); String id = null;

String desc = null;

StringBuffer buffer = new StringBuffer("Features Description:\n");

int size = tableCol.size(); while (colIterator.hasNext()) {

Feature feature = (Feature) colIterator.next(); id = feature.getId(); desc = feature.getDescription(); if (colIterator.nextIndex() == size) buffer.append(" " + id + " - " + desc); else buffer.append(" " + id + " - " + desc + "\n"); } if (id == null)

(75)

buffer.append(" There are no features!!!"); return buffer.toString(); } /**

* Save the mapped features table into a html fle. * @param filename output html filename

*/

public void toHTML(String filename) throws Exception { String width =

new String(String.valueOf(100 / (process.getNumberOfPhases() + 1)));

HTMLDoc html = new HTMLDoc();

html.createHead("Traceability Matrix."); html.beginBody(); html.beginTable(); html.beginTableRow(); html.createTableData("Features", width, "CCCCCC");

ListIterator phaseIterator = process.getPhasesIterator(); while (phaseIterator.hasNext()) {

Phase phase = (Phase) phaseIterator.next();

html.createTableData(phase.getName(), width, "CCCCCC"); }

Vector mappedRows = table.getMappedRows();

ListIterator tableIterator = mappedRows.listIterator(); while (tableIterator.hasNext()) {

Vector col = (Vector) tableIterator.next(); ListIterator colIterator = col.listIterator(); html.beginTableRow();

while (colIterator.hasNext()) {

String buffer = (String) colIterator.next(); if (buffer.equals("") == true) buffer = "-"; html.createTableData(buffer, width, "FFFFFF"); } html.endTableRow(); } html.endTableRow(); html.endTable(); html.createParagraph(new Date().toString()); html.endBody(); html.createHTML(); html.createFile(filename); }

(76)

*/

public void createTreeNodes(DefaultMutableTreeNode top) { Vector rows = table.getTracedFeatureRows();

ListIterator tableIterator = rows.listIterator(); while (tableIterator.hasNext()) {

Vector newRow = new Vector();

Vector col = (Vector) tableIterator.next(); ListIterator colIterator = col.listIterator();

DefaultMutableTreeNode newNode = null, oldNode = null; while (colIterator.hasNext()) {

Vector features = (Vector) colIterator.next(); ListIterator featIterator =

features.listIterator();

oldNode = newNode;

while (featIterator.hasNext()) { Feature feature = (Feature) featIterator.next();

String id = feature.getId();

String desc = feature.getDescription(); if (id.equals("") == true)

id = "-";

newNode = new DefaultMutableTreeNode(id + " - " + desc); if (colIterator.nextIndex() == 1) top.add(newNode); else oldNode.add(newNode); } } } } /**

* Creates indirect connection between features. */

public void connectDocumentsInChain() {

ListIterator documentsIt = documents.listIterator();

while (documentsIt.hasNext()) {

Document currentDocument = (Document) documentsIt.next(); currentDocument.connectFeaturesInChain(); } } /**

* Sorts alphabetically documents features */

public void sortDocuments() {

ListIterator documentsIt = documents.listIterator();

while (documentsIt.hasNext()) {

Document currentDocument = (Document) documentsIt.next();

Referências

Documentos relacionados

Por fim, na terceira parte, o artigo se propõe a apresentar uma perspectiva para o ensino de agroecologia, com aporte no marco teórico e epistemológico da abordagem

Por lo tanto, la superación de la laguna normativa existente en relación a los migrantes climático consiste en una exigencia para complementación del sistema internacional

O terceiro capítulo é, portanto, dedicado à proposição de ações de gestão, tendo como base a confirmação das questões apontadas para este trabalho de pesquisa, quais sejam: o

Para Azevedo (2013), o planejamento dos gastos das entidades públicas é de suma importância para que se obtenha a implantação das políticas públicas, mas apenas

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

Para além deste componente mais prático, a formação académica do 6º ano do MIM incluiu ainda disciplinas de cariz teórico, nomeadamente, a Unidade Curricular de

There a case in Brazil, in an appeal judged by the 36ª Câmara Cível do Tribunal de Justiça do Estado de São Paulo (São Paulo’s Civil Tribunal, 36th Chamber), recognized

O relatório encontra-se dividido em 4 secções: a introdução, onde são explicitados os objetivos gerais; o corpo de trabalho, que consiste numa descrição sumária das