SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à SOPAS fase 3 relatório

RC - SL02 - Camada de Aplicacao
RC - SL02 - Camada de AplicacaoRC - SL02 - Camada de Aplicacao
RC - SL02 - Camada de AplicacaoUFPB
 
Monitoramento de Redes TCP/IP - Monografia
Monitoramento de Redes TCP/IP - MonografiaMonitoramento de Redes TCP/IP - Monografia
Monitoramento de Redes TCP/IP - MonografiaPietro Scherer
 
Ra 2009 Bentow. SmartBand
Ra 2009   Bentow. SmartBandRa 2009   Bentow. SmartBand
Ra 2009 Bentow. SmartBandbentow
 
Curriculo Paulo_Alonso
Curriculo Paulo_AlonsoCurriculo Paulo_Alonso
Curriculo Paulo_AlonsoPaulo Alonso
 
Monografia - Ciência da Computação - UFCG
Monografia - Ciência da Computação - UFCGMonografia - Ciência da Computação - UFCG
Monografia - Ciência da Computação - UFCGDalton Valadares
 
GT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de InterfaceGT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de InterfaceRoberto Beraldo Chaiben
 
Ações de melhoria para a Previdência Social 2007-2008
Ações de melhoria para a Previdência Social 2007-2008Ações de melhoria para a Previdência Social 2007-2008
Ações de melhoria para a Previdência Social 2007-2008Paulo Emerson Pereira
 
Análise e Caracterização de Tráfego P2P
Análise e Caracterização de Tráfego P2PAnálise e Caracterização de Tráfego P2P
Análise e Caracterização de Tráfego P2PThiago Curvelo
 
Ensinando Qualidade de Serviço na Internet com o OPNET
Ensinando Qualidade de Serviço na Internet com o OPNETEnsinando Qualidade de Serviço na Internet com o OPNET
Ensinando Qualidade de Serviço na Internet com o OPNETAntonio Marcos Alberti
 
Ferramentas para monitoramento das atividades de uma rede e suas conexões com...
Ferramentas para monitoramento das atividades de uma rede e suas conexões com...Ferramentas para monitoramento das atividades de uma rede e suas conexões com...
Ferramentas para monitoramento das atividades de uma rede e suas conexões com...Marcelo Santos
 
Klaus Harmatiuk - CV ESTILO MP
Klaus Harmatiuk - CV ESTILO MPKlaus Harmatiuk - CV ESTILO MP
Klaus Harmatiuk - CV ESTILO MPKlaus Harmatiuk
 
Infraestrutura SAAS
Infraestrutura SAASInfraestrutura SAAS
Infraestrutura SAASPlayerBR
 
Gerência de Redes SNMP
Gerência de Redes SNMPGerência de Redes SNMP
Gerência de Redes SNMPIsraelCunha
 

Similaire à SOPAS fase 3 relatório (16)

RC - SL02 - Camada de Aplicacao
RC - SL02 - Camada de AplicacaoRC - SL02 - Camada de Aplicacao
RC - SL02 - Camada de Aplicacao
 
Monitoramento de Redes TCP/IP - Monografia
Monitoramento de Redes TCP/IP - MonografiaMonitoramento de Redes TCP/IP - Monografia
Monitoramento de Redes TCP/IP - Monografia
 
Ra 2009 Bentow. SmartBand
Ra 2009   Bentow. SmartBandRa 2009   Bentow. SmartBand
Ra 2009 Bentow. SmartBand
 
Projeto UNIPODE
Projeto UNIPODEProjeto UNIPODE
Projeto UNIPODE
 
Projeto do Sistema Cacti – Software Gerenciamento de Rede
Projeto do Sistema Cacti – Software Gerenciamento de RedeProjeto do Sistema Cacti – Software Gerenciamento de Rede
Projeto do Sistema Cacti – Software Gerenciamento de Rede
 
Curriculo novo 2018
Curriculo novo 2018Curriculo novo 2018
Curriculo novo 2018
 
Curriculo Paulo_Alonso
Curriculo Paulo_AlonsoCurriculo Paulo_Alonso
Curriculo Paulo_Alonso
 
Monografia - Ciência da Computação - UFCG
Monografia - Ciência da Computação - UFCGMonografia - Ciência da Computação - UFCG
Monografia - Ciência da Computação - UFCG
 
GT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de InterfaceGT-Digital Preservation - Camada de Interface
GT-Digital Preservation - Camada de Interface
 
Ações de melhoria para a Previdência Social 2007-2008
Ações de melhoria para a Previdência Social 2007-2008Ações de melhoria para a Previdência Social 2007-2008
Ações de melhoria para a Previdência Social 2007-2008
 
Análise e Caracterização de Tráfego P2P
Análise e Caracterização de Tráfego P2PAnálise e Caracterização de Tráfego P2P
Análise e Caracterização de Tráfego P2P
 
Ensinando Qualidade de Serviço na Internet com o OPNET
Ensinando Qualidade de Serviço na Internet com o OPNETEnsinando Qualidade de Serviço na Internet com o OPNET
Ensinando Qualidade de Serviço na Internet com o OPNET
 
Ferramentas para monitoramento das atividades de uma rede e suas conexões com...
Ferramentas para monitoramento das atividades de uma rede e suas conexões com...Ferramentas para monitoramento das atividades de uma rede e suas conexões com...
Ferramentas para monitoramento das atividades de uma rede e suas conexões com...
 
Klaus Harmatiuk - CV ESTILO MP
Klaus Harmatiuk - CV ESTILO MPKlaus Harmatiuk - CV ESTILO MP
Klaus Harmatiuk - CV ESTILO MP
 
Infraestrutura SAAS
Infraestrutura SAASInfraestrutura SAAS
Infraestrutura SAAS
 
Gerência de Redes SNMP
Gerência de Redes SNMPGerência de Redes SNMP
Gerência de Redes SNMP
 

Plus de Ulisses Costa

Automatic Test Generation for Space
Automatic Test Generation for SpaceAutomatic Test Generation for Space
Automatic Test Generation for SpaceUlisses Costa
 
Automatic Test Generation for Space
Automatic Test Generation for SpaceAutomatic Test Generation for Space
Automatic Test Generation for SpaceUlisses Costa
 
Correct sorting with Frama-C
Correct sorting with Frama-CCorrect sorting with Frama-C
Correct sorting with Frama-CUlisses Costa
 
The Cryptol Epilogue: Swift and Bulletproof VHDL
The Cryptol Epilogue: Swift and Bulletproof VHDLThe Cryptol Epilogue: Swift and Bulletproof VHDL
The Cryptol Epilogue: Swift and Bulletproof VHDLUlisses Costa
 
Splint the C code static checker
Splint the C code static checkerSplint the C code static checker
Splint the C code static checkerUlisses Costa
 
Exploring the Cryptol Toolset
Exploring the Cryptol ToolsetExploring the Cryptol Toolset
Exploring the Cryptol ToolsetUlisses Costa
 
Specification of SNOW 3G in Cryptol
Specification of SNOW 3G in CryptolSpecification of SNOW 3G in Cryptol
Specification of SNOW 3G in CryptolUlisses Costa
 
Snort - capturar e dissecar o tráfego da rede
Snort - capturar e dissecar o tráfego da redeSnort - capturar e dissecar o tráfego da rede
Snort - capturar e dissecar o tráfego da redeUlisses Costa
 
Uso de Honeypots com Honeyd
Uso de Honeypots com HoneydUso de Honeypots com Honeyd
Uso de Honeypots com HoneydUlisses Costa
 
Linux Instalation Party
Linux Instalation PartyLinux Instalation Party
Linux Instalation PartyUlisses Costa
 
Calculador Pointfree
Calculador PointfreeCalculador Pointfree
Calculador PointfreeUlisses Costa
 

Plus de Ulisses Costa (15)

Automatic Test Generation for Space
Automatic Test Generation for SpaceAutomatic Test Generation for Space
Automatic Test Generation for Space
 
Automatic Test Generation for Space
Automatic Test Generation for SpaceAutomatic Test Generation for Space
Automatic Test Generation for Space
 
Cryptol experience
Cryptol experienceCryptol experience
Cryptol experience
 
Correct sorting with Frama-C
Correct sorting with Frama-CCorrect sorting with Frama-C
Correct sorting with Frama-C
 
The Cryptol Epilogue: Swift and Bulletproof VHDL
The Cryptol Epilogue: Swift and Bulletproof VHDLThe Cryptol Epilogue: Swift and Bulletproof VHDL
The Cryptol Epilogue: Swift and Bulletproof VHDL
 
Splint the C code static checker
Splint the C code static checkerSplint the C code static checker
Splint the C code static checker
 
Exploring the Cryptol Toolset
Exploring the Cryptol ToolsetExploring the Cryptol Toolset
Exploring the Cryptol Toolset
 
Specification of SNOW 3G in Cryptol
Specification of SNOW 3G in CryptolSpecification of SNOW 3G in Cryptol
Specification of SNOW 3G in Cryptol
 
Snort - capturar e dissecar o tráfego da rede
Snort - capturar e dissecar o tráfego da redeSnort - capturar e dissecar o tráfego da rede
Snort - capturar e dissecar o tráfego da rede
 
LDAP em VDM++
LDAP em VDM++LDAP em VDM++
LDAP em VDM++
 
Uso de Honeypots com Honeyd
Uso de Honeypots com HoneydUso de Honeypots com Honeyd
Uso de Honeypots com Honeyd
 
Apresentacao JML
Apresentacao JMLApresentacao JML
Apresentacao JML
 
Linux Instalation Party
Linux Instalation PartyLinux Instalation Party
Linux Instalation Party
 
Workshop LaTeX
Workshop LaTeXWorkshop LaTeX
Workshop LaTeX
 
Calculador Pointfree
Calculador PointfreeCalculador Pointfree
Calculador Pointfree
 

SOPAS fase 3 relatório

  • 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