Este documento resume o trabalho desenvolvido na quarta fase do projeto SOPAS. Foram corrigidos bugs na aplicação web, adicionadas novas funcionalidades e implementadas métricas para análise de software. O objetivo é concluir o desenvolvimento da ferramenta SOPAS para submissão e análise online de código.
1. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
SOPAS - Submiss˜o Online Para An´lise de
a a
Software (fase 4)
Jos´ Pedro Silva
e Pedro Faria Ulisses Costa
Engenharia de Linguagens
Projecto integrado
June 27, 2011
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
2. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Index
1 Objectivos
2 Aplica¸˜o Web
ca
Correc¸˜o de bugs
ca
Adi¸˜o de funcionalidades
ca
3 Metricas
4 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
3. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
At´ agora:
e
Concretizado at´ ao ´
e ınicio da quarta fase:
Termino da aplica¸˜o web e adi¸˜o de funcionalidades extra
ca ca
Implementa¸˜o de um script para instala¸˜o do sistema
ca ca
Melhoramento do interface pelo terminal
Implementa¸˜o de algumas m´tricas
ca e
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
4. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Motiva¸˜o e Objectivos
ca
Objectivos para terceira fase:
Desenvolvimento de uma API para gerir as m´tricas
e
Terminar a implementa¸˜o das m´tricas que pretend´
ca e ıamos
Melhoramento da script de instala¸˜o do sistema (dificil!)
ca
Permitir inser¸˜o de informa¸˜o pelo terminal
ca ca
Corrigir e melhorar a aplica¸˜o Web
ca
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
5. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Index
1 Objectivos
2 Aplica¸˜o Web
ca
Correc¸˜o de bugs
ca
Adi¸˜o de funcionalidades
ca
3 Metricas
4 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
6. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Index
1 Objectivos
2 Aplica¸˜o Web
ca
Correc¸˜o de bugs
ca
Adi¸˜o de funcionalidades
ca
3 Metricas
4 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
7. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Correc¸˜o de bugs
ca
Adicionada informa¸˜o que estava em falta:
ca
warnings ou erros emitidos na altura da compila¸˜o j´ s˜o
ca a a
guardados e apresentados ao utilizador
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
8. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Index
1 Objectivos
2 Aplica¸˜o Web
ca
Correc¸˜o de bugs
ca
Adi¸˜o de funcionalidades
ca
3 Metricas
4 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
9. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Adi¸˜o de funcionalidades
ca
Prepara¸˜o do sistema para:
ca
gerar relat´rio dos resultados e de m´tricas para determinado
o e
concurso
permitir o download ou a visualiza¸˜o dentro do browser dos
ca
relat´rios
o
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
10. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Gerar relat´rio de resultados
o
Ir ` tabela de melhores resultados e ir buscar todas as
a
entradas para o concurso em quest˜oa
Para cada utilizador encontrar o resultado de cada enunciado
Apenas contar os que estiverem 100% correctos
Calcular o resultado de cada enunciado, tendo em conta o seu
peso no concurso
Apresentar o resultado calculado e o tempo de execu¸˜o
ca
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
11. Objectivos
Aplica¸˜o Web
ca Correc¸˜o de bugs
ca
Metricas Adi¸˜o de funcionalidades
ca
Conclus˜o e trabalho futuro
a
Relat´rio de resultados
o
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
12. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Index
1 Objectivos
2 Aplica¸˜o Web
ca
Correc¸˜o de bugs
ca
Adi¸˜o de funcionalidades
ca
3 Metricas
4 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
13. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Metricas Implementadas
Grafo de includes do sistema e de cada ficheiro
Nr linhas de coment´rios (que n˜o s˜o peda¸os de c´digo
a a a c o
comentados)
Densidade de coment´rios
a
Index de Mccabe
NLOC (nr de linhas do pretty print)
Nr de linhas fisicas
Clones por bloco
Assinaturas de fun¸˜es e nomes de fun¸˜es
co co
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
14. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Metrics Datatypes
type Metrics = M . Map MetricName MetricValue
type MetricName = ( String , Maybe FileSrc , Maybe FunctionName )
data MetricValue =
| Num Double
| Clone ( M . Map FileDst [( Ocurrency , LineSrc , LineDst ) ])
| Includes ([ SystemIncludes ] ,[ Includes ])
| FunSig [ FunSignature ]
| Graphviz DotFile
| G ra phvizProject DotFile
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
15. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Metrics API
( >. >) :: Metrics -> ( MetricName , MetricValue ) -> Metrics
m >. > ( mn , mv ) =
case M . lookup mn m of
Nothing -> m ’
( Just mv ’) -> if mv ’ == mv then m else m ’
where m ’ = M . insert mn mv m
Caso de uso
emptyMetrics >◦ ((”mccbaIndex”, Nothing , Nothing ), Num 10)
>
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
16. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Metrics API
( >+ >) :: Metrics -> Metrics -> Metrics
m1 >+ > m2 = M . union m1 m2
Caso de uso
concatMetrics :: [ Metrics ] -> Metrics
concatMetrics = foldl ( >+ >) emptyMetrics
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
17. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Metrics API
foldrM :: ( MetricName -> MetricValue -> c -> c ) -> c -> Metrics -> c
foldrM f s = M . foldrWithKey f s
Caso de uso
...
foldrM step noop m
where step k v r = " begin { dot2tex }[] "
>> ( fromString $ fromGraphvizP v )
>> " end { dot2tex } "
// r
fromGraphvizP ( GraphvizProject l ) = l
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
18. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Metrics API
getM etricsFrom :: ( a -> IO Metrics ) -> [ a ] -> IO Metrics
getM etricsFrom f l =
forkMapM f l > >=
return . concatMetrics . map ( either ( const emptyMetrics ) id )
Caso de uso
g et Li st O fCFiles :: FilePath -> IO [ FilePath ]
g et Tr ee F romFile :: FilePath -> [ FilePath ] -> IO [( FilePath , CTranslUnit ) ]
mccabePerFun :: ( FilePath , CTranslUnit ) -> IO Metrics
g et Li st O fCFiles fp > >= getTreeFromFile fp > >= getMetricsFrom mccabePerFun
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
19. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Implementa¸˜o
ca
mccabeIndex :: Data a = > a -> IO Int
mccabeIndex = applyTU ( full_tdTU typesOfInstr )
typesOfInstr = constTU 0
‘ adhocTU ‘ loop
‘ adhocTU ‘ binaryOp
loop :: CStat -> IO Int
loop = return . loop_
where loop_ ( CIf _ _ _ _ ) = 1
loop_ ( CSwitch _ _ _ ) = 1
loop_ ( CWhile _ _ _ _ ) = 1
loop_ ( CFor _ _ _ _ _ ) = 1
loop_ _ = 0
binaryOp :: CBinaryOp -> IO Int
binaryOp = return . binaryOp_
where binaryOp_ CLndOp = 1
binaryOp_ CLorOp = 1
binaryOp_ _ = 0
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
20. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Implementa¸˜o
ca
ncloc :: ( FilePath , CTranslUnit ) -> IO Metrics
ncloc ( file , tree ) =
let len = ( length . filter ( not . null ) . lines . show . pretty ) tree
in return $ emptyMetrics
>. > (( " ncloc " , Just file , Nothing ) , Num $ fromIntegral len )
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
21. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Index
1 Objectivos
2 Aplica¸˜o Web
ca
Correc¸˜o de bugs
ca
Adi¸˜o de funcionalidades
ca
3 Metricas
4 Conclus˜o e trabalho futuro
a
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
22. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Conclus˜o e trabalho futuro
a
Todas as metricas pretendidas foram implementadas
Foi desenvolvida uma api para o sistema de extrac¸˜o de
ca
metricas
Sistema preparado para extrac¸˜o de qualidade de um
ca
programa atrav´s das metricas calculadas
e
Ambas as interfaces de comunica¸˜o com a aplica¸˜o (Web e
ca ca
linha de comandos) ficaram terminadas
S˜o gerados relat´rios sobre os resultados de cada utilizador
a o
nos concursos, e sobre as m´tricas
e
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a
23. Objectivos
Aplica¸˜o Web
ca
Metricas
Conclus˜o e trabalho futuro
a
Perguntas
?
Jos´ Pedro Silva, Pedro Faria, Ulisses Costa
e SOPAS - Submiss˜o Online Para An´lise de Software (fase 4)
a a