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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Static Code Analyzer - Part III

  • 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