1. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
SOPAS - Submiss˜o Online Para An´lise de
a a
Software (fase 3)
Jos´ Pedro Silva
e Pedro Faria Ulisses Costa
Engenharia de Linguagens
Projecto integrado
May 2, 2011
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
2. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Index
1 Objectivos
2 Aplica¸˜o Web
ca
3 Terminal Interface
4 Instala¸˜o do sistema
ca
5 Strafunski
6 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
3. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
At´ agora:
e
Concretizado at´ ao ´
e ınicio da terceira fase:
Estudo do language.C
Estudo das m´tricas
e
Matura¸˜o da WebApp
ca
Inicio da implementa¸˜o do acesso pelo Terminal
ca
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
4. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Motiva¸˜o e Objectivos
ca
Objectivos para terceira fase:
Terminar a aplica¸˜o web esteticamente e adicionar
ca
funcionalidades extra
In´ da implementa¸˜o de uma script de instala¸˜o do
ıcio ca ca
sistema
Implementa¸˜o de algumas m´tricas
ca e
Melhoramento no interface pelo Terminal
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
5. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Index
1 Objectivos
2 Aplica¸˜o Web
ca
3 Terminal Interface
4 Instala¸˜o do sistema
ca
5 Strafunski
6 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
6. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Estado da aplica¸˜o Web
ca
A aplica¸˜o est´ praticamente terminada, o que se pretende fazer
ca a
daqui para a frente ser´ melhorar o que est´ feito e adicionar
a a
alguns extras. O que estava implementado at´ ` entrega da fase
ea
anterior:
Cria¸˜o de contas de utilizador (grupo)
ca
Associa¸˜o de concorrentes a determinado grupo
ca
Cria¸˜o de concursos
ca
Cria¸˜o de enunciados (atrav´s da interface web ou
ca e
submetendo em formato xml)
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
7. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Estado da aplica¸˜o Web (parte 2)
ca
Inser¸˜o de baterias de teste para os enunciados
ca
Submiss˜o de programas para avalia¸˜o
a ca
Adi¸˜o simplificada de novas fun¸˜es de avalia¸˜o ou de novas
ca co ca
linguagens de programa¸˜o ao sistema
ca
Apresenta¸˜o de resultados referentes `s diversas tentativas
ca a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
8. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Novidades
Limaram-se alguns aspectos na interface, a n´ de
ıvel
acessibilidade
Alterou-se o script de detec¸˜o de clones, escrito em perl, de
ca
forma a interagir melhor com a aplica¸˜o
ca
Adicionou-se ` aplica¸˜o a funcionalidade de detec¸˜o de
a ca ca
clones
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
9. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Modo de utiliza¸˜o do script de detec¸˜o de clones
ca ca
(CloneDt.pl)
Modo de utiliza¸˜o
ca
perl cloneDt.pl -file [path1] -comp [path2]
em que [path1] representa o path do ficheiro que se acabou de
submeter, e o path2 representa o path do ficheiro com o qual
se pretende comparar o primeiro
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
10. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Detalhes do script de detec¸˜o de clones (CloneDt.pl)
ca
utiliza o comando
Comando ctags
ctags -x [path]
de forma a obter as linhas referentes ao in´ de cada fun¸˜o
ıcio ca
lˆ o ficheiro e guarda o c´digo de cada fun¸˜o, numa posi¸˜o
e o ca ca
de array diferente
remove espa¸os em branco e coment´rios
c a
substitu´ strings por ’S’, n´meros por ’1’ e vari´veis por ’var’
ı u a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
11. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Detalhes do script de detec¸˜o de clones (CloneDt.pl)
ca
repete o mesmo processo para o segundo ficheiro
compara cada elemento do primeiro array gerado com os
elementos do segundo array
regista cada vez que encontra uma fun¸˜o que pode ser c´pia
ca o
de outra
no fim imprime para o stdout a percentagem de fun¸˜es que
co
foram assinaladas como clones
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
12. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Detec¸˜o de clones na aplica¸˜o
ca ca
cada vez que um utilizador submete uma proposta de
resolu¸˜o, o seu c´digo ´ comparado com o c´digo das
ca o e o
tentativas mais recentes dos restantes grupos, para o mesmo
enunciado
quando encontra poss´
ıveis clones, adiciona uma entrada na
base de dados
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
13. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Index
1 Objectivos
2 Aplica¸˜o Web
ca
3 Terminal Interface
4 Instala¸˜o do sistema
ca
5 Strafunski
6 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
14. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Melhoramentos
Implementa¸˜o com sucesso de um sistema por comandos.
ca
Cria¸˜o de um m´dulo, Access.pm, de comunica¸˜o entre a
ca o ca
camada de dados.
Usando m´dulo Moose
o
Aumento da ´rea de cobertura entre a interface e o sistema.
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
15. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Index
1 Objectivos
2 Aplica¸˜o Web
ca
3 Terminal Interface
4 Instala¸˜o do sistema
ca
5 Strafunski
6 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
16. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Instala¸˜o do sistema
ca
Implementar uma script de instala¸˜o de todo o software
ca
envolvido no sistema
Script em bash
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
17. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Vantagens
Facilitar a manuten¸˜o sistema
ca
Facilidade em migrar o sistema
Gerir vers˜es de software usados pelo sistema
o
Novas skills de administra¸˜o de sistemas
ca
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
18. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Software a instalar
De momento, a script instala:
Perl e m´dulos
o
Bibliotecas C
Haskell e derivados
Ruby, Rails e Gems
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
19. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
In´ I - Verifica¸˜o do utilizador
ıcio ca
A primeira fun¸˜o invocada:
ca
Check user id
andlogfile = " tee -a main . log "
function check_user_id {
echo " ‘ whoami ‘ started this script installation file at ‘ date ‘ " |
$andlogfile
if [ ! " ‘ whoami ‘ " = " root " ]; then
echo " Not running as root . Yes , this is an installation file ... "
| $andlogfile
exit 1 ;
fi
}
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
20. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
In´ II - Verifica¸˜o do sistema
ıcio ca
install package
function install_package {
case ‘ uname -s ‘ in
" Darwin " ) install_macosx
;;
" Linux " ) case ‘ uname -v ‘ in
* " Ubuntu " *) install_ubuntu
;;
*) echo " Your Linux is not supported
yet . If it does have a packet manager
please send an email to $admin_email "
exit 1;
;;
esac
;;
*) echo " Your operative system is not supported yet . Please send
an email to $admin_email "
exit 1;
;;
esac
}
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
21. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Exemplo I - Invoca¸˜o da fun¸˜o geral
ca ca
install macosx
function install_macosx {
echo " Working on a MacOSX machine " | $andlogfile
build_macosx
$portins gd2
i nstall_perl_mac
install_perl_modules
}
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
22. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Exemplo II - Haskell e derivados
Fun¸˜o build macosx trata de instalar:
ca
GHCi - Compilador de Haskell, juntamente com o
interpretador.
Happy - Gerador de parsers desenvolvido em Haskell
Alex - Gerador de analisadores l´xicos desenvolvido em
e
Haskell
Language.C - Biblioteca do Haskell para an´lise e gera¸˜o
a ca
de c´digo C
o
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
23. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Exemplo III - Instala¸˜o
ca
build macosx
function build_macosx {
i s_ghc_installed
if [ $ ? - eq 1 ]; then
echo " GHC is installed , I will continue ... "
i s _ g h c _ p a c k a g e _ i n s t a l l e d " happy "
if [ $ ? - eq 0 ]; then
echo " Happy is not installed , I will install "
$portins hs - happy
fi
i s _ g h c _ p a c k a g e _ i n s t a l l e d " alex "
if [ $ ? - eq 0 ]; then
echo " Alex is not installed , I will install "
$portins hs - alex
fi
i s _ g h c _ p a c k a g e _ i n s t a l l e d " language "
if [ $ ? - eq 0 ]; then
echo " Language . C is not installed , I will install "
build_language_c
cd Parser / language -c -0.3.2.1/
runhaskell Setup . hs install
cd -
fi
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
24. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Index
1 Objectivos
2 Aplica¸˜o Web
ca
3 Terminal Interface
4 Instala¸˜o do sistema
ca
5 Strafunski
6 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
25. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Strafunski
SYB (Scrap Your Boilerplate1 ) - Programa¸˜o gen´rica
ca e
Implementa estrat´gias no paradigma funcional
e
Data.Data (SYB)
gfoldl :: (c (d → b) → d → c b) → (g → c g ) → a → c a
gunfold :: (c(b → r ) → c r ) → (r → c r ) → Constr → c a
gmapT :: (b → b) → a → a
1
http://www.cs.uu.nl/wiki/GenericProgramming/SYB
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
26. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Porquˆ Strafunski? - Language.C exemplo
e
void fun(int a, int b);
CTranslUnit
[ CDeclExt
( CDecl
[ CTypeSpec ( CVoidType ( NodeInfo ( " main . c " , 2 , 1) ( Name { nameId = 1 }) ) ) ]
[ ( Just
( CDeclr ( Just " fun " )
[ CFunDeclr ( Right
([ CDecl [ CTypeSpec ( CIntType ( NodeInfo ( " main . c " ,2 ,11) ( Name { nameId = 4}) ) ) ]
[( Just ( CDeclr ( Just " a " ) [] Nothing [] ( NodeInfo ( " main . c " , 2 , 15)
( Name { nameId = 5 }) ) )
, Nothing , Nothing ) ] ( NodeInfo ( " main . c " , 2 , 11) ( Name { nameId = 6 }) )
, CDecl [ CTypeSpec ( CIntType ( NodeInfo ( " main . c " , 2 , 18) ( Name { nameId = 8 }) ) ) ]
[( Just ( CDeclr ( Just " b " ) [] Nothing [] ( NodeInfo ( " main . c " ,2 ,22)
( Name { nameId = 9}) ) )
, Nothing , Nothing ) ]
( NodeInfo ( " main . c " ,2 ,18) ( Name { nameId = 10}) ) ] , False ) )
[] ( NodeInfo ( " main . c " ,2 ,10) ( Name { nameId = 11}) )
]
Nothing [] ( NodeInfo ( " main . c " ,2 ,6) ( Name { nameId = 2}) )
)
, Nothing
, Nothing
)
] ( NodeInfo ( " main . c " ,2 ,1) ( Name { nameId = SOPAS - ]
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e 12}) ) ) Submiss˜o Online Para An´lise de Software (fase 3)
a a
27. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Porquˆ Strafunski? - Como tratar arvores grandes (sem
e
SYB)
Muito trabalhoso
Ter uma fun¸˜o para cada tipo de dados (no caso do
ca
Language.C 28)
Ter uma ac¸˜o para cada constructor de tipos (no caso do
ca
Language.C 84)
R´pidamente se atinge perto de 200 linhas de c´digo para fazer
a o
uma travessia na ´rvore e executar uma ac¸˜o num constructor2 .
a ca
2
https://github.com/ulisses/Static-Code-Analyzer/blob/
95032a7e3eaf52e0dc6c36d3c1039519bc5fe689/Parser/Main.hs
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
28. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Porquˆ Strafunski? - Como tratar arvores grandes (com
e
SYB)
Pouco trabalhoso, gen´rico
e
Definir a ac¸˜o que se quer tomar sobre o nodo em causa
ca
Definir uma estrat´gia
e
Com pouco c´digo definimos uma estrat´gia e uma ac¸˜o sobre a
o e ca
´rvore de parsing
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
29. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Strafunski - Estrat´gias
e
Para a aplica¸˜o de uma estrat´gia a uma instˆncia do nosso tipo
ca e a
de dados t iremos usar:
applyTP :: (Monad m, Term t) ⇒ TP m → t → m t
applyTU :: (Monad m, Term t) ⇒ TU u m → t → m u
Permite adicionar estrat´gias:
e
adhocTP :: (Monad m, Term t) ⇒ TP m → (t → mt) → TP m
adhocTU :: (Monad m, Term t) ⇒ TUam → (t → mu) → TU u m
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
30. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Strafunski - Estrat´gias 2
e
Permite executar estrat´gias em sequˆncia:
e e
seqTP :: Monad m ⇒ TP m → TP m → TP m
seqTU :: Monad m ⇒ TP m → TU u m → TU u m
Para tentar usar estrat´gias diferentes:
e
choiceTP :: MonadPlus m ⇒ TP m → TP m → TP m
choiceTU :: MonadPlus m ⇒ TU u m → TU u m → TU u m
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
31. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Strafunski - Estrat´gias 3
e
Aplica esta estrat´gia a todos os subtermos imediatos, para o TU
e
os resultados s˜o reduzidos com a fun¸˜o do monoid +:
a ca
allTP :: Monad m ⇒ TP m → TP m
allTU :: (Monad m, Monoid u) ⇒ TU u m → TU u m
Esta fun¸˜o permite aplicar a estrat´gia ao primeiro filho que
ca e
aparecer da esquerda para a direita:
once tdTP, once buTP :: MonadPlus m ⇒ TP m → TP m
once tdTU, once buTU :: MonadPlus m ⇒ TU u m → TU u m
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
32. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
TU vs TP
full_tdTU :: ( Monad m , Monoid a ) = > TU a m -> TU a m
full_tdTU s = op2TU mappend s ( allTU ’ ( full_tdTU s ) )
class Monoid a where
mempty :: a
mappend :: a -> a -> a
mconcat :: [ a ] -> a
-- Defined in Data . Monoid
full_tdTP :: Monad m = > TP m -> TP m
full_tdTP s = s ‘ seqTP ‘ ( allTP ( full_tdTP s ) )
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
33. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Strafunski - Exemplos
Contar o n´mero de ifs, switches e ciclos (McCabeIndex−−).
u
testMcCabe :: IO Int
testMcCabe = parse > >= mcCabeIndex . fromRight
where fromRight = (( Right prog ) -> prog )
parse = parseCFile ( newGCC " gcc " ) Nothing [ " - U__BLOCKS__ " ] " main . c "
instance Num a = > Monoid a where
mappend = (+)
mempty = 0
mcCabeIndex :: Data a = > a -> IO Int
mcCabeIndex = applyTU ( full_tdTU loopCond )
loopCond = constTU 0 ‘ adhocTU ‘ ( return . action )
action :: Num a = > CStat -> a
action ( CIf _ _ _ _ ) = 1
action ( CSwitch _ _ _ ) = 1
action ( CWhile _ _ _ _ ) = 1
action ( CFor _ _ _ _ _ ) = 1
action _ = 0
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
34. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Strafunski - Exemplos
Extrair as assinaturas de todas as fun¸˜es.
co
g e t F u n c t i onsSign :: IO [ CTranslUnit ]
g e t F u n c t i onsSign = parse > >= return . getFunSign . fromRight
where fromRight = (( Right prog ) -> prog )
parse = parseCFile ( newGCC " gcc " ) Nothing [ " - U__BLOCKS__ " ] " main . c "
getFunSign :: Data x = > x -> [ x ]
getFunSign = applyTP ( topdown names1 )
where names1 = idTP ‘ adhocTP ‘ ( return . fr o mF un c ti o nT oS i gn )
f r o m F u n c t io nT o Si g n ( CFDefExt ( CFunDef lCDeclSpec cDeclr _ _ _ ) )
= CDeclExt ( CDecl lCDeclSpec [( Just $ cDeclr , Nothing , Nothing ) ] internalNode )
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
35. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Index
1 Objectivos
2 Aplica¸˜o Web
ca
3 Terminal Interface
4 Instala¸˜o do sistema
ca
5 Strafunski
6 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
36. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Conclus˜o e trabalho futuro
a
Implementa¸˜o das restantes m´tricas descritas no relat´rio
ca e o
Melhorar a utiliza¸˜o pelo terminal (permitir escrita)
ca
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a
37. Objectivos
Aplica¸˜o Web
ca
Terminal Interface
Instala¸˜o do sistema
ca
Strafunski
Conclus˜o e trabalho futuro
a
Perguntas
Perguntas
?
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 3)
a a