• Reduza os desperdícios existentes no processo de desenvolvimento de software da sua empresa
  • Descubra uma nova forma de escrever código, à prova de falhas e com muito mais produtividade
  • Aprenda a monitorar constantemente a qualidade do código produzido pelas equipes de desenvolvimento
  • Nos últimos 5 anos treinamos mais de 1000 desenvolvedores de software, no Brasil e no exterior


Empresa

A Agile Code é uma empresa sediada em Florianópolis, Santa Catarina, que tem a missão de transformar a forma como equipes de desenvolvimento de software trabalham, elevando seu nível de maturidade técnica.

Nossos treinamentos são focados nas equipes de desenvolvimento, nas áreas de qualidade de código, automação de testes, automação do ambiente de desenvolvimento nas plataformas Java e JavaScript utilizando princípios e metodologias ágeis.

Todos os nossos treinamentos foram criados com base em nossa experiência prática ao longo de mais de 12 anos, sendo revisados e evoluídos constantemente e ainda adaptados para a realidade de cada empresa, proporcionando melhores resultados.

Nosso portfólio é composto pelas seguintes metodologias, princípios, ferramentas e tecnologias: Clean Code, Refactoring, Design Patterns, JavaScript, AngularJS, Domain-Driven Design, Test-Driven Development, JUnit, Selenium, Maven, Hudson, Grunt, Jasmine, Bower, Scrum, Extreme Programming e Lean Software Development.


Treinamentos

Clean Code com Técnicas de Refactoring e TDD


Escrever código com baixa qualidade, de forma ilegível e confusa pode até funcionar! No entanto, atitudes como essa, conscientes ou não, resultam na contração de uma dívida que cobra juros altos, pagos com a perda constante de produtividade.

Com o passar do tempo, os custos de desenvolvimento e manutenção do projeto aumentam, ficando cada vez mais caro e demorado criar novas funcionalidades e realizar qualquer tipo de modificação, sem falar na quantidade de defeitos.

Esse problema pode trazer prejuízos financeiros e até afetar a imagem da empresa no mercado.

Outro reflexo negativo é a rotatividade da equipe, que em muitos casos acaba desistindo do projeto por não suportar mais a pressão e o ambiente caótico.

Muitas vezes, a melhor opção realmente acaba sendo jogar tudo fora e fazer de novo.

No treinamento de Clean Code serão abordados tópicos relacionados principalmente a responsabilidade e profissionalismo no desenvolvimento de software. Pontos importantes como motivação, qualidade de código, métricas, técnicas de refactoring, desenvolvimento orientado a testes e boas práticas para manter o código limpo e evitar muitas dores de cabeça no futuro!



Carga Horária

16 horas, combinando teoria e prática, divididas em 4 aulas com duração de 4 horas ou 2 aulas com duração de 8 horas.



Público Alvo

Desenvolvedores de software que tenham como o objetivo aprimorar suas técnicas de codificação.

Durante o treinamento, a linguagem utilizada será Java, juntamente com o framework de testes JUnit, a ferramenta de gestão de configuração de projetos Maven e a plataforma de qualidade de código Sonar.



Resultados Esperados

Ao final do treinamento é esperado que os participantes:

Desenvolvam um olhar mais crítico e profissional em relação ao desenvolvimento de software, elevando seu nível de maturidade.

Saibam aplicar diversas técnicas de refactoring e design patterns com o objetivo de tornar o código mais limpo e compreensível.

Entendam como desenvolver orientado a testes (Test-Driven Development) e também aprendam a disseminar esse conhecimento na forma de Coding Dojo.

Busquem fomentar um ambiente de trabalho baseado na qualidade.



Ementa

Introdução ao Clean Code

Introdução a prática de escrever código de forma mais limpa, com foco principalmente nos aspectos motivacionais e profissionais envolvidos na atividade de desenvolver software.

Princípios do Refactoring

Refactoring, ou refatoração, é a arte de modificar o código fonte com o objetivo de torná-lo mais claro, limpo e manutenível, no entanto, sem alterar seu comportamento aparente.

Praticando com Test-Driven Development

O desenvolvimento orientado a testes tem como a sua principal vantagem proporcionar um ambiente de desenvolvimento seguro e confiável. Essa confiança é a base para um projeto de qualidade, com baixo número de bugs e capaz de absorver mudanças sem prejudicar o design do projeto como um todo.

Preparando o ambiente de desenvolvimento com Maven e Sonar

Integração das ferramentas Maven 3 e Sonar com a intenção de criar um ambiente de desenvolvimento mais ágil por meio do estímulo à eliminação de atividades repetitivas, redução na incidência de defeitos e aumento da qualidade do código produzido.

Detectando Code Smells

Code Smells são sinais de que algo pode estar errado com o código. Identificá-los é o primeiro passo para iniciar um processo de melhoria.

Técnicas de Refactoring

Após identificar problemas no código, é fundamental conhecer técnicas de refactoring para saber como reagir frente a esses problemas. Essas ténicas podem ser aplicadas de maneira isolada ou mesmo combinadas para atingir o nível de organização e legibilidade desejados.

Design Patterns

Existem cenários em que técnicas simples não são suficientes para eliminar problemas de legibilidade e pode ser necessário recorrer a Design Patterns para eliminar esse tipo de problema.



Mecânica

Durante o treinamento os participantes, em duplas, irão trabalhar em um cenário específico utilizando Test-Driven Development e aplicando as técnicas de refactoring vistas ao longo do treinamento.

Para treinamentos in company é necessário que a empresa possua uma sala de treinamento com projetor, além de um computador por dupla para a realização dos exercícios.


JavaScript


Criada em 1995 por Brendan Eich, nos laboratórios da Netscape, a linguagem oferece uma poderosa combinação dos paradigmas funcional e orientado a objetos.

Atualmente, ela vem ocupando uma posição de destaque no mercado mundial, não só pela utilização em navegadores, mas também pela possibilidade de construir aplicações completas por meio de plataformas como Node.js.

Além disso, também é possível desenvolver componentes visuais para sistemas operacionais como Linux, Windows e OS X e até criar aplicativos para equipamentos eletrônicos, como a SmartTV da Samsung.

Neste treinamento, abordaremos a utilização da linguagem em detalhes, conhecendo desde a história da sua criação, passando pela principais características e também por seus aspectos funcionais e de orientação a objetos.

Todos os exercícios serão implementados na plataforma Node.js com a utilização de técnicas de Test-Driven Development utilizando Jasmine. Por fim, aprenderemos também a automatizar o ciclo de vida dos projetos por meio da ferramenta Grunt.



Carga Horária

16 horas, combinando teoria e prática, divididas em 4 aulas com duração de 4 horas ou 2 aulas com duração de 8 horas.



Público Alvo

É importante que os participantes já tenham tido experiências desenvolvendo software profissionalmente.



Resultados Esperados

Ao final do treinamento é esperado que os participantes:

Saibam programar na linguagem JavaScript.

Entendam como utilizar e explorar a linguagem de forma funcional e orientada a objetos.

Aprendam a desenvolver com Test-Driven Development.

Saibam automatizar o ciclo de vida do projeto.



Ementa

História

Principais características

Variáveis

Comentários

Tipos de Dados

Number

String

Boolean

Object

Function

Lambda

Closure

Array

RegExp

Date

Operadores

Aritméticos

Atribuição

Lógicos

Estruturas condicionais e de repetição

if

for

while

switch

for/in

Encapsulamento

Module Pattern

Revealing Module Pattern

Herança

Interoperabilidade

JSON

Test-Driven Development

Mitos e lendas



Mecânica

Durante o treinamento os alunos, em duplas, irão trabalhar em um cenário específico utilizando Test-Driven Development e aplicando as técnicas de refactoring vistas ao longo do treinamento.


Automação de Testes com Selenium


Já parou para pensar quantas vezes testamos a mesma funcionalidade enquanto estamos desenvolvendo? E quando vamos corrigir um defeito? Infelizmente, investimos um tempo precioso, que poderia estar sendo melhor utilizado, apenas testando. O pior de tudo é que esse tempo não é reaproveitado pois quando qualquer modificação é realizada, os testes precisam ser feitos novamente.

Os princípios do desenvolvimento ágil estão relacionados com a eliminação de desperdícios e uma das formas de desperdício mais conhecidas é o trabalho repetitivo, não automatizado.

Durante o treinamento, abordaremos a utilização da ferramenta Selenium e sua API conhecida como WebDriver para explorar maneiras de automatizar a execução de testes de aceitação em sistemas web.



Carga Horária

12 horas, combinando teoria e prática, divididas em 3 aulas com duração de 4 horas.



Público Alvo

Equipes de desenvolvimento de software.



Resultados Esperados

Ao final do treinamento é esperado que os participantes:

Saibam utilizar a API do Selenium WebDriver para a criação de testes de aceitação automatizados.

Entendam como modificar uma aplicação web legada para deixá-la apta para ser testada de forma automatizada.

Aprendam como testar páginas complexas lidando com abertura de Window, Frames, Cookies e ainda problemas de sincronização com chamadas AJAX.

Automatizem a execução dos testes de aceitação automatizados remotamente com o Selenium Server.



Ementa

Introdução ao Selenium

O que é o Selenium? Quando foi criado? Qual é o seu propósito?

Criando um projeto com Selenium por meio do Apache Maven

Vamos aprender a criar um projeto com Selenium e todas as suas dependências por meio da ferramenta de gestão de configuração Apache Maven.

Conhecendo os principais tipos de Drivers: Firefox, Internet Explorer e Chrome

É possível utilizar o Selenium para testar aplicações web em diferentes browsers e versões. Neste capítulo vamos conhecer os principais drivers e como utilizá-los.

Aprendendo a Navegar

Neste capítulo vamos conhecer a API de navegação do Selenium. Por meio dela, será possível ir para determinadas páginas, voltar delas e gerenciar todo o fluxo de navegação.

Interagindo com os elementos da página

O Selenium fornece um jeito simples e robusto de navegar na árvore DOM de uma página para realizar a localização de elementos por meio de nomes, identificadores, seletores CSS, XPath e muito mais.

Manipulando formulários

Boa parte das aplicações faz uso de formulários, utilizando os mais diversos tipos de componentes de entrada como: text, select, checkbox, radio, entre outros. Neste capítulo vamos explorar a interação com formulário, seu preenchimento e submissão.

Lidando com sincronização de chamadas ajax

Atualmente, as aplicações web estão se tornando cada vez mais ricas e interativas. Para isso, renderizam boa parte dos seus dados de forma assíncrona, utilizando a tecnologia AJAX. Segundo a W3C, AJAX é a arte de trocar dados com o servidor, atualizando partes da página, sem que seja necessário recarregá-la por completo.

Neste tipo de cenário, é necessário programar os testes para que aguardem até que um determinado componente seja atualizado de maneira assíncrona. No entanto, não dá para esperar eternamente. Para solucionar este problema, geralmente definimos um tempo de espera limite.

O Selenium lida muito bem com esse tipo de característica por meio da classe WebDriverWait, que aguarda que uma condição definida aconteça. Um exemplo interessante pode ser um filtro dinâmico ou mesmo um campo que se auto completa por meio de dados trazidos do servidor.

Trabalhando com Alertas

É possível que em algumas condições, para indicar a ocorrência de um erro, alertas sejam exibidos pela aplicação evidenciando erros de validação, pedidos de confirmações, entre outras ações que exigem a atenção do usuário. Da mesma forma como lidamos com a abertura de janelas, vamos precisar lidar com os alertas.

Interagindo com diferentes Windows

É bastante comum, principalmente em aplicações web um pouco mais antigas, a abertura de novas janelas, mais conhecidas como pop-ups. Para lidar com esse tipo de cenário, o Selenium fornece em sua API a possibilidade de alternar entre diferentes janelas abertas, por meio de uma implementação da interface TargetLocator.

Gerenciando Cookies: Adicionando, Manipulando e Apagando

Para testar alguns cenários que envolvam autenticação e autorização pode ser necessário manipular cookies. Neste capítulo vamos explorer o gerenciamento dos cookies para ter condições de similar cenários em que eles sejam necessarios.

Conhecendo o padrão Page Object

Criar testes com o Selenium WebDriver pode resultar em um excesso de duplicação de código relacionado à localização de elementos e à manipulação de formulários dentro dos métodos de teste. Para contornar esse problema, concentrando boa parte do código em um único local, e ainda facilitar o entendimento dos testes, é recomendada a utilização de um padrão, conhecido como Page Objects, para realizar a modelagem de uma página na forma de objetos.

Testando remotamente com o Selenium Server e Jenkins

Para tornar o processo de testes automatizado é importante realizer os testes remotamente em maquinas especificamente preparadas para reproduzir o cenário do cliente (browser, sistema operacional e outros configurações). Por esse motivo, vamos aprender a utilizer o Selenium Server para testar remotamente a partir da configuração realizada no servidor de integração continua Jenkins.



Mecânica

Durante o treinamento os participantes, em duplas, irão trabalhar em um cenário específico.

Para treinamentos in company é necessário que a empresa possua uma sala de treinamento com projetor.


Desenvolvendo aplicações web com AngularJS


Criado pelo Google em 2010, o Angular é um framework desenvolvido em JavaScript que vem revolucionando o mercado pela sua capacidade de proporcionar uma experiência agradável e produtiva no desenvolvimento de aplicações web.

Ele apresenta uma arquitetura modular, robusta e flexível, permitindo a criação de aplicações interativas e fáceis de utilizar. Sua arquitetura é baseada na criação de componentes independentes, utilizados por meio da injeção de dependências. Desta forma, é possível favorecer o reuso e facilitar a criação de testes automatizados, garantindo a qualidade do código produzido pela equipe.

Além disso, existe uma imensa disponibilidade de listas de discussão, artigos e livros especializados, fornecendo muita documentação e facilitando a vida da equipe ao se deparar com uma dúvida. Existem também uma infinidade de bibliotecas e ferramentas capazes de economizar tempo e recursos na hora de encontrar a melhor solução para um determinado problema.

Neste treinamento, abordaremos a criação de aplicações reusáveis, manuteníveis e modulares na prática. Vamos conhecer profundamente seus principais componentes arquiteturais como controladores, diretivas, filtros e serviços e também as melhores formas de combiná-los. Além disso, utilizaremos as melhores ferramentas do mercado para realizar a automação de testes e de todos os processos do desenvolvimento, desde a criação inicial dos projetos, passando pela execução dos testes, até a criação final do pacote de distribuição.



Carga Horária

24 horas, combinando teoria e prática, divididas em 3 aulas com duração de 4 horas.



Público Alvo

Por se tratar de um treinamento mais avançado, é importante que os participantes já tenham tido experiências desenvolvendo software profissionalmente. É desejável também que os participantes estejam familiarizados com a linguagem HTML e JavaScript.



Resultados Esperados

Ao final do treinamento é esperado que os participantes:

Conheçam profundamente o framework AngularJS, sabendo utilizar seus principais componentes arquiteturais como views, controllers, directives, filters e services.

Tenham condições de discutir e projetar a arquitetura de aplicações de qualquer porte.

Aprendam a interagir com qualquer tipo de back-end por meio de uma API REST baseada no protocolo HTTP.

Saibam aplicar diversas técnicas de refactoring e design patterns com o objetivo de tornar o código mais limpo e compreensível.

Entendam como desenvolver orientado a testes (Test-Driven Development) utilizando JavaScript.

Entendam as raízes da orientação a objetos e como criar código de alta coesão, baixo acoplamento e principalmente reusável com JavaScript.

Conheçam ferramentas como o Jasmine, Karma, Grunt e Bower para automatizar os testes e o workflow do projeto.

Desenvolvam um olhar mais crítico e profissional em relação ao desenvolvimento de software, fomentando um ambiente de trabalho baseado na qualidade.



Ementa

Introdução ao desenvolvimento de aplicações web

Linguagem JavaScript

  • História
  • Principais características
  • Variáveis
  • Comentários
  • Tipos de Dados
    • Number
    • String
    • Boolean
    • Object
    • Function
      • Lambda
      • Closure
    • Array
    • RegExp
    • Date
  • Operadores
    • Aritméticos
    • Atribuição
    • Lógicos
  • Estruturas condicionais e de repetição
    • if
    • for
    • while
    • switch
    • for/in
  • Encapsulamento
  • Herança
  • Test-Driven Development com Jasmine e Karma
  • Mitos e lendas

AngularJS

  • Por que utilizar AngularJS?
  • Introdução ao framework
  • Modelo arquitetural
  • Configurando o primeiro projeto
  • Como organizar projetos de diferentes portes?
  • Por dentro da API básica do AngularJS

Diretivas

  • Como funciona a árvore DOM?
  • Introdução as diretivas
  • Utilizando as diretivas padrão do AngularJS
  • Criando nossas próprias diretivas
    • Utilizando templates
    • Restringindo elementos
    • Passagem de parâmetros
    • Encapsulando elementos
    • Criando controllers
    • Manipulando eventos

Filtros

  • Exibindo dados por meio de expressões
  • Introdução aos filtros
  • Utilizando os filtros padrão do AngularJSCriando nossos próprios filtros
    • currency
    • date
    • filter
    • json
    • limitTo
    • lowercase
    • number
    • orderBy
    • uppercase
  • Criando nossos próprios filtros
  • Aplicando filtros em outros componentes

Formulários

  • Formulários e validação
    • Criando nosso primeiro formulário
    • Entendendo o mecanismo de validação básica
    • Validação avançada com $dirty e $pristine
    • Identificando problemas de validação

Injeção de Dependências e Serviços

  • Injeção de dependências
  • Criando serviços
    • Constant
    • Value
    • Factory
    • Service
    • Provider

HTTP, JSON, REST e AJAX com AngularJS

  • Protocolo HTTP
  • Interoperabilidade com JSON
  • Arquitetura REST
  • AJAX e o serviço $http
  • Headers
  • Interceptors

Single-Page Application com AngularJS

Testando com AngularJS

  • Qual é o problema em não ter testes automatizados
  • Introdução ao Test-Driven Development
  • Criando testes para JavaScript com Jasmine
  • Utilizando a API de Mocking do AngularJS
  • Executando os testes com Karma
  • Testando os componentes do AngularJS

Automatizando o Workflow

  • Automatizando o workflow com o Grunt
    • Processo de Instalação
    • Configuração o Grunt
    • Buscando e instalando plug-ins
    • Executando tarefas
    • Criando uma distribuição
      • Limpando os arquivos temporários com o Clean
      • Validando os scripts com o JSHint
      • Concatenando com o Concat
      • Minificando com o UglifyJS
      • Executando os testes com o Karma
      • Rodando o projeto com o Connect
  • Gerenciando os pacotes com o Bower
    • Processo de Instalação
    • Configurando o Bower
    • Buscando, instalando e atualizando pacotes
    • Configurando os pacotes na aplicação


    Mecânica

    Durante o treinamento os participantes, em duplas, irão trabalhar em um cenário específico.

    Para treinamentos in company é necessário que a empresa possua uma sala de treinamento com projetor.


    Instrutor

    Rodrigo Branas
    @rodrigobranas - rodrigo.branas@agilecode.com.br - http://www.rodrigobranas.com.br

    Rodrigo Branas é o fundador da Agile Code e também responsável pela idealização de todos os treinamentos oferecidos pela empresa.

    Formado em Ciências da Computação pela UFSC e MBA em Gerenciamento de Projetos pela FGV, atua no mercado de desenvolvimento de software há 12 anos, se especializando em projetos baseados na arquitetura Java.

    Possui as certificações SCJA, SCJP, SCJD, SCWCD e SCBCD da Sun Microsystems, PMP do Project Management Institute, MCP da Microsoft e CSM da Scrum Alliance.

    Nos últimos anos, tem se dedicado a disseminação de conhecimento na comunidade de desenvolvimento de software, tendo treinado mais de 500 desenvolvedores e apresentado mais de 100 palestras na área de qualidade de código. É também autor da revista Java Magazine, uma das principais publicações da área.

    Atualmente trabalha como líder da área de desenvolvimento de software em uma empresa especializada em gestão educacional e é também instrutor dos treinamentos da Agile Code, onde já acumula mais de 2.000 horas em sala de aula.


    Conteúdo

    Por acreditar que o conhecimento deve ser compartilhado, por isso, nossas aulas e também boa parte dos nossos slides de treinamentos e palestras, estão disponíveis para consulta no YouTube e no SlideShare. Ao todo são várias horas de vídeos e mais 45 apresentações, realizadas ao longo de vários anos, totalizando mais de 5.000 slides.

    Inscreva-se gratuitamente em nosso canal e acompanhe com exclusividade todas as séries e episódios: http://www.youtube.com/rodrigobranas



    Siga nosso SlideShare em: http://www.slideshare.net/rodrigobranas



    Fotos

    Confira as fotos de alguns dos nossos treinamentos e palestras:


    Clientes

    Conheça alguns de nossos clientes:




















    Contato

    Caso queira saber mais informações, contratar turmas in company ou se inscrever para as turmas abertas, digite seu e-mail abaixo, ou envie para rodrigo.branas@agilecode.com.br, que entraremos em contato o mais rápido possível:

    Comentários

    "Prezar pela qualidade do código é uma estratégia de sucesso e o treinamento de "Clean Code" contribui para isso. Além da excelente experiência técnica vivida durante o treinamento, o aspecto motivacional é muito intenso e os participantes saem com um ótimo sentimento de mudança e melhoria. O feedback dos colaboradores da Softplan é muito positivo e o conhecimento adquirido certamente contribui para alcançarmos melhores resultados!"

    Vitor Pelizza

    "Repleto de interessantes analogias e técnicas para a melhoria da qualidade de código, o treinamento mostrou-se bastante proveitoso. Falando de programador para programador, o instrutor transmitiu com maestria a mensagem de que precisamos tratar com profissionalismo o código que escrevemos em nosso dia-a-dia."

    Ney Zunino

    "Uma experiência empolgante que permite aplicar na prática os conceitos e ferramentas relacionadas ao CleanCode. Durante o treinamento observamos a importância da aplicação das técnicas do CleanCode e o resultado positivo que ações simples podem proporcionar aos projetos de software".

    Thiago Domingues

    "O treinamento Clean Code fez toda a diferença na forma que realizo o desenvolvimento, ressaltando a importância da qualidade estar presente dia a dia."

    Ivan Salvatore

    "Acredito ser essencial para todo o profissional que busca 'algo a mais' para sua carreira participar do treinamento de Clean Code. O Rodrigo Branas possui uma ótima didática e oferece diversos recursos para ensinar o conteúdo proposto. Em linhas gerais, eu gostei e recomendo este treinamento".Calvin Scherer

    "O treinamento de clean code me proporcionou um novo olhar ao código que escrevemos, criando um código mais limpo e reutilizável, assim facilitando manutenções futuras e novas funcionalidades. Com uma didática excelente, conhecimento e experiência nos assuntos abordados, o treinamento é importante desde o iniciante na área até os mais veteranos."João Luiz Joaquim

    "Sem palavras! Muito boa didática e a aplicação do treinamento no dia a dia é instantânea!"Nildo Junior

    "Um código claro e objetivo é o que todo profissional deveria aplicar no dia-a-dia. O curso de Clean Code torna esse conceito uma realidade, fazendo com que você repense sobre suas atuais técnicas. Envolvente e empolgante, o curso te desafia a melhorar e aperfeiçoar sempre, deixando seu código mais clean."Márcio Beppler

    "Fiz o curso de SCRUM com o Rodrigo e recomendo a todos que tenham interesse em metodologias ágeis. Com boa didática e ótimo material de apoio, o curso é bastante enriquecedor. As dinâmicas de grupo são bem elaboradas e permitem sentir na prática a teoria apresentada."Fernando Ghedin

    "Para nós da WPLEX, os treinamentos Clean Code e Selenium contribuíram substancialmente na execução da nossa estratégia empresarial, de entrega de valor contínuo através de softwares no estado-da-arte."Mauro Ransolin

    "Definitivamente una codificación clara y que sea entendible por todos, usando diversas técnicas y criterio para hacer las cosas, permite cada día desarrollarnos como profesionales!."Mario Bojórquez