SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Arquitetura de Software
Ferramenta de Análise Estática para
códigos Javascript - Flow
Rodrigo O. Passos Ferreira
Objetivos do trabalho
- Apresentar a ferramenta e suas funcionalidades.
- Reportar o uso de Flow em dois sistemas JavaScript
populares (mais de 200 estrelas no GitHub).
- Relatar a experiência de "tipar" gradualmente algumas
variáveis.
Flow - o que é?
“ Flow is a static type checker for JavaScript. It can be used
to catch common bugs in JavaScript programs - such as
silent type conversions, null dereferences and so on - often
without requiring any changes to your code. It also adds
type syntax to JavaScript, so that developers can express
invariants about their code and have them maintained
automatically “
Flow - o que é ?
● Verificação de erros comuns em códigos javascript como tipos incorretos,
referência a valores nulos dentre outros.
● Permite tipagem estática anotada (não obrigatória) de variáveis em js.
● Suporte a verificação online da alteração de arquivos via um servidor
monitora as alterações nos arquivos rastreados em tempo real.
● Possui modo “weaker” que evita muitos falsos positivos, bastante útil em
bibliotecas e códigos com muita utilização de reflexão de código etc.
● Definição de interfaces para classes de objetos, evitando falsos positivos na
inferência de tipos e facilitando a verificação de códigos de terceiros.
● Verificação dinâmica.
● Largamente testado e utilizado nos códigos produzidos pela Facebook.
Flow - o que é ?
Projetos JS
- ZoomJS v 0.3 <https://github.com/fat/zoom.js>
- Plugin jQuery para aplicar zoom em imagens
- 2.048 estrelas
- 86 forks
- 218 linhas de código (arquivo do plugin)
- ClusterizeJS v 0.7.0 <https://github.com/NeXTs/Clusterize.js>
- Plugin Javascript para exibição de grandes datasets
- 3.235 estrelas
- 128 forks
- 264 linhas de código (arquivo do plugin)
Metodologia
● Rodar a ferramenta flow nos projetos selecionados no modo normal e modo weak,
para identificar diferenças.
● Verificar e tabelar os tipos e quantidades de erros encontrados em cada um dos
projetos.
● Avaliar os erros encontrados em função do código para tentar identificar se eram
falsos positivos ou erros de fato.
● Experimentar anotar os tipos das variáveis explicitamente (ou implementar interface
caso os erros encontrados fossem provenientes de inferência incorreta de classe).
Testes
execução nos dois sistemas no modo normal e modo weak
● Redução de defeitos de 30% e 50% do modo weak para normal no
ZoomJS e ClusterizeJS respectivamente.
Testes
Testes
- Alta ocorrência do erro Property not found in pelo motivo da utilização de
propriedades de classes não declaradas, ou não padrão na biblioteca Javascript
padrão.
Testes
37: document.body.style.transition = 'transform '+ TRANSITION_DURATION +'ms ease';
38: document.body.style.OTransition = '-o-transform '+ TRANSITION_DURATION +'ms ease';
39: document.body.style.MozTransition = '-moz-transform '+ TRANSITION_DURATION +'ms ease';
40: document.body.style.msTransition = '-ms-transform '+ TRANSITION_DURATION +'ms ease';
41: document.body.style.WebkitTransition = '-webkit-transform '+ TRANSITION_DURATION +'ms ease';
/home/rodrix/ArqSW/tp/zoom.js:38:3,83: assignment of property OTransition
Property not found in
/tmp/flow/flowlib_1febc443/lib/cssom.js:46:1,336:1: CSSStyleDeclaration
/home/rodrix/ArqSW/tp/zoom.js:39:3,87: assignment of property MozTransition
Property not found in
/tmp/flow/flowlib_1febc443/lib/cssom.js:46:1,336:1: CSSStyleDeclaration
…
Testes
Para avaliar a funcionalidade de anotação de tipos e
implementação de interfaces para classes, foi selecionado
um dos erros apontados pela ferramenta (do tipo property
not found in) e implementada uma interface para a classe
em questão, afim de verificar se o erro dado como corrigido
pela ferramenta.
Testes
Conclusões
● Funciona!
● Ferramenta eficiente para auxiliar no desenvolvimento de sistemas javascript.
● Em intenso desenvolvimento, logo tem muito a melhorar.
Em resumo, podemos considerar que a ferramenta é bastante funcional e flexível,
permitindo um ganho de produtividade no que diz respeito a identificação de erros e
melhora na qualidade do código (anotação de tipos). Mas precisa ainda de alguns
ajustes, como possibilidade de se utilizar uma biblioteca JS externa (na versão atual ela
é integrada ao executável) para que se possa utilizar implementações diferenetes de
VM's javascript.
Conclusões
FIM

Contenu connexe

Tendances

Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonPaula Grangeiro
 
Automatizando seus testes com Robot Framework
Automatizando seus testes com Robot FrameworkAutomatizando seus testes com Robot Framework
Automatizando seus testes com Robot FrameworkClaudenir Freitas
 
Django Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoDjango Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoPaula Grangeiro
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net codersRenato Groff
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustMayara Fernandes
 
Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Robson Agapito Correa
 
LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08Carlos Santos
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Renato Groff
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva minastestingconference
 
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoSeu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoChristiane Morais Silva
 

Tendances (20)

Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
Automatizando seus testes com Robot Framework
Automatizando seus testes com Robot FrameworkAutomatizando seus testes com Robot Framework
Automatizando seus testes com Robot Framework
 
Django Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoDjango Channels - Aplicações real time com Django
Django Channels - Aplicações real time com Django
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net coders
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Mocking Test
Mocking TestMocking Test
Mocking Test
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
 
Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.
 
LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
 
Jenkins com SonarQube
Jenkins com SonarQubeJenkins com SonarQube
Jenkins com SonarQube
 
Testes em go
Testes em goTestes em go
Testes em go
 
Groovy grails
Groovy grailsGroovy grails
Groovy grails
 
Introdução ao vraptor
Introdução ao vraptorIntrodução ao vraptor
Introdução ao vraptor
 
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoSeu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
 

Similaire à Análise estática de códigos JS com Flow

LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04Carlos Santos
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js4ALL Tests
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSFrederico Allan
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLLeonardo Cezar
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaIvayr Farah Netto
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
XIV sacomp ufpel desenvolvimento web
XIV sacomp ufpel desenvolvimento webXIV sacomp ufpel desenvolvimento web
XIV sacomp ufpel desenvolvimento webFilipe Giusti
 
TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016Fernando Santiago
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 

Similaire à Análise estática de códigos JS com Flow (20)

LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJS
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQL
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnica
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
XIV sacomp ufpel desenvolvimento web
XIV sacomp ufpel desenvolvimento webXIV sacomp ufpel desenvolvimento web
XIV sacomp ufpel desenvolvimento web
 
TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016
 
Django
DjangoDjango
Django
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 

Plus de Rodrigo Ferreira

Apresentação sobre TOGAF
Apresentação sobre TOGAFApresentação sobre TOGAF
Apresentação sobre TOGAFRodrigo Ferreira
 
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...Rodrigo Ferreira
 
Algoritmos probabilísticos
Algoritmos probabilísticosAlgoritmos probabilísticos
Algoritmos probabilísticosRodrigo Ferreira
 
Comércio eletronico na internet
Comércio eletronico na internetComércio eletronico na internet
Comércio eletronico na internetRodrigo Ferreira
 
Geografia das coisas - Internet das coisas com enfoque em localização
Geografia das coisas - Internet das coisas com enfoque em localizaçãoGeografia das coisas - Internet das coisas com enfoque em localização
Geografia das coisas - Internet das coisas com enfoque em localizaçãoRodrigo Ferreira
 
Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...
Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...
Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...Rodrigo Ferreira
 
CRM - Customer Relationship Management
CRM - Customer Relationship Management CRM - Customer Relationship Management
CRM - Customer Relationship Management Rodrigo Ferreira
 

Plus de Rodrigo Ferreira (8)

Apresentação sobre TOGAF
Apresentação sobre TOGAFApresentação sobre TOGAF
Apresentação sobre TOGAF
 
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
 
Algoritmos probabilísticos
Algoritmos probabilísticosAlgoritmos probabilísticos
Algoritmos probabilísticos
 
Comércio eletronico na internet
Comércio eletronico na internetComércio eletronico na internet
Comércio eletronico na internet
 
Computação Forense
Computação ForenseComputação Forense
Computação Forense
 
Geografia das coisas - Internet das coisas com enfoque em localização
Geografia das coisas - Internet das coisas com enfoque em localizaçãoGeografia das coisas - Internet das coisas com enfoque em localização
Geografia das coisas - Internet das coisas com enfoque em localização
 
Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...
Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...
Análise e desenvolvimento de algoritmo para operação em bolsa de valores base...
 
CRM - Customer Relationship Management
CRM - Customer Relationship Management CRM - Customer Relationship Management
CRM - Customer Relationship Management
 

Análise estática de códigos JS com Flow

  • 1. Arquitetura de Software Ferramenta de Análise Estática para códigos Javascript - Flow Rodrigo O. Passos Ferreira
  • 2. Objetivos do trabalho - Apresentar a ferramenta e suas funcionalidades. - Reportar o uso de Flow em dois sistemas JavaScript populares (mais de 200 estrelas no GitHub). - Relatar a experiência de "tipar" gradualmente algumas variáveis.
  • 3. Flow - o que é? “ Flow is a static type checker for JavaScript. It can be used to catch common bugs in JavaScript programs - such as silent type conversions, null dereferences and so on - often without requiring any changes to your code. It also adds type syntax to JavaScript, so that developers can express invariants about their code and have them maintained automatically “
  • 4. Flow - o que é ? ● Verificação de erros comuns em códigos javascript como tipos incorretos, referência a valores nulos dentre outros. ● Permite tipagem estática anotada (não obrigatória) de variáveis em js. ● Suporte a verificação online da alteração de arquivos via um servidor monitora as alterações nos arquivos rastreados em tempo real. ● Possui modo “weaker” que evita muitos falsos positivos, bastante útil em bibliotecas e códigos com muita utilização de reflexão de código etc. ● Definição de interfaces para classes de objetos, evitando falsos positivos na inferência de tipos e facilitando a verificação de códigos de terceiros. ● Verificação dinâmica. ● Largamente testado e utilizado nos códigos produzidos pela Facebook.
  • 5. Flow - o que é ?
  • 6. Projetos JS - ZoomJS v 0.3 <https://github.com/fat/zoom.js> - Plugin jQuery para aplicar zoom em imagens - 2.048 estrelas - 86 forks - 218 linhas de código (arquivo do plugin) - ClusterizeJS v 0.7.0 <https://github.com/NeXTs/Clusterize.js> - Plugin Javascript para exibição de grandes datasets - 3.235 estrelas - 128 forks - 264 linhas de código (arquivo do plugin)
  • 7. Metodologia ● Rodar a ferramenta flow nos projetos selecionados no modo normal e modo weak, para identificar diferenças. ● Verificar e tabelar os tipos e quantidades de erros encontrados em cada um dos projetos. ● Avaliar os erros encontrados em função do código para tentar identificar se eram falsos positivos ou erros de fato. ● Experimentar anotar os tipos das variáveis explicitamente (ou implementar interface caso os erros encontrados fossem provenientes de inferência incorreta de classe).
  • 8. Testes execução nos dois sistemas no modo normal e modo weak ● Redução de defeitos de 30% e 50% do modo weak para normal no ZoomJS e ClusterizeJS respectivamente.
  • 10. Testes - Alta ocorrência do erro Property not found in pelo motivo da utilização de propriedades de classes não declaradas, ou não padrão na biblioteca Javascript padrão.
  • 11. Testes 37: document.body.style.transition = 'transform '+ TRANSITION_DURATION +'ms ease'; 38: document.body.style.OTransition = '-o-transform '+ TRANSITION_DURATION +'ms ease'; 39: document.body.style.MozTransition = '-moz-transform '+ TRANSITION_DURATION +'ms ease'; 40: document.body.style.msTransition = '-ms-transform '+ TRANSITION_DURATION +'ms ease'; 41: document.body.style.WebkitTransition = '-webkit-transform '+ TRANSITION_DURATION +'ms ease'; /home/rodrix/ArqSW/tp/zoom.js:38:3,83: assignment of property OTransition Property not found in /tmp/flow/flowlib_1febc443/lib/cssom.js:46:1,336:1: CSSStyleDeclaration /home/rodrix/ArqSW/tp/zoom.js:39:3,87: assignment of property MozTransition Property not found in /tmp/flow/flowlib_1febc443/lib/cssom.js:46:1,336:1: CSSStyleDeclaration …
  • 12. Testes Para avaliar a funcionalidade de anotação de tipos e implementação de interfaces para classes, foi selecionado um dos erros apontados pela ferramenta (do tipo property not found in) e implementada uma interface para a classe em questão, afim de verificar se o erro dado como corrigido pela ferramenta.
  • 14. Conclusões ● Funciona! ● Ferramenta eficiente para auxiliar no desenvolvimento de sistemas javascript. ● Em intenso desenvolvimento, logo tem muito a melhorar. Em resumo, podemos considerar que a ferramenta é bastante funcional e flexível, permitindo um ganho de produtividade no que diz respeito a identificação de erros e melhora na qualidade do código (anotação de tipos). Mas precisa ainda de alguns ajustes, como possibilidade de se utilizar uma biblioteca JS externa (na versão atual ela é integrada ao executável) para que se possa utilizar implementações diferenetes de VM's javascript.