Módulos
1- Academia Ágil
Professor Responsável - Gustavo Henrique Castellano (Consultor na Adaptworks)
CARGA HORÁRIA: 40 horas
OBJETIVOS:
Este módulo objetiva capacitar o aluno a atuar como membro de times ágeis, implantar frameworks ágeis em larga escala, vivênciar o dia a dia de um projeto Scrum e desenvolver na prática um projeto ágil.
EMENTA:
- Objetivos da Academia ágil, gerenciamento de projetos versus gerenciamento de produtos, iniciativas ágeis versus iniciativas tradicionais, manifesto ágil (e Modern Agile) e o framework cynefin;
- O Framework Scrum: visão geral, o scrum team, eventos, artefatos e transparência (essa parte do curso é preparatória para a certificação PSM I da scrum.org);
- Gestão de Produtos: criando um produto na prática;
- O Framework SAFe 4.5: Full SAFe, Large Solution SAFe, Portfolio SAFe, Essential SAFe e a ferramenta CA Agile Central.
- Se tornando um facilitador, a carreira de agilista e prova teórica.
2. Desenvolvimento de Software em Java
Professores Responsáveis: Prof. Dr. Daniel Lucredio, Prof. Ms. Ivan João Foschini, Prof. Ms. Reinaldo de Oliveira Castro
CARGA HORÁRIA: 80 horas
OBJETIVOS:
Apresentar a linguagem Java com alguns de seus frameworks e APIs mais utilizados no mercado para desenvolvimento de software em camadas, com acesso a banco de dados e com funcionalidades de negócio que podem ser expostas em múltiplas arquiteturas. O módulo visa tanto o aprendizado da parte tecnológica (ferramentas, frameworks e APIs), como também prover um forte embasamento nas questões da qualidade de código (focando principalmente na legibilidade e reutilização), padrões de projeto e métodos para diminuição da complexidade no desenvolvimento de sistemas de software. O módulo aborda todos os conceitos usando uma metodologia orientada a problemas e por meio de implementação de um estudo de caso de uma aplicação financeira.
EMENTA:
1. Java e Qualidade de Código – Orientação a objetos nas perspectivas de qualidade de código e manutenção de sistemas de software. Conceitos e padrões para qualidade de código: Lei de Demeter, Padrões GRASP (General Responsibility Assignment Software Patterns) e Princípios SOLID.
2. Padrões de Projeto em Java – Aplicação dos principais padrões de projeto criacionais, estruturais e comportamentais em Java para a obtenção de código flexível e reutilizável.
3. Frameworks de Persistência Objeto-Relacional em Java –Utilização efetiva da Java Persistence API (JPA) como forma de persistência em banco de dados relacionais, abordando as principais formas de mapeamento de classes e relacionamentos para tabelas.
4. Web services e arquitetura RESTful em Java - Utilização do Spring Boot para exposição de regras de negócio como serviços web RESTful. Implementação de mecanismos de segurança para serviços web RESTful. Visão geral sobre testes e documentação de serviços serviços web.
5. Java e arquitetura das aplicações na Web: Características das aplicações para Web, Protocolo HTTP, Modelo requisição-resposta, Modelo em múltiplas camadas, Visão geral da plataforma Java para Web, Containers, Frameworks, Servidores, Ferramentas, Camada do cliente, Conteúdo estático (HTML/CSS), Conteúdo dinâmico (Javascript). A base da tecnologia Java Web (Java Servlets, JSP, Expression Language e JSTL). Frameworks Java para Web: Spring e JSF. Validação automática. Roteamento de requisições. Integração Modelo-Visão-Controlador.
3 - DevOps
Professores Responsáveis: Prof. Ms. Bruno Lorenço Lopes e Prof. Vitor Branco Miranda
CARGA HORÁRIA: 40 horas
OBJETIVOS:
Abordar os principais tópicos relacionados à cultura DevOps, com apresentação de boas práticas, processos, metodologias e ferramentas que auxiliam os diversos passos do ciclo de vida do desenvolvimento de software. Serão exploradas ferramentas que auxiliam na automatização dos processos de construção, testes e implantação de aplicações, como Github e GitLab. Outro tópico bastante importante atualmente que será visto durante o curso é a utilização de containers. Será visto como é realizada a construção e publicação de imagens, bem como a orquestração de containers usando Kubernetes, e a definição de ambientes com o Helm. Por último, serão configuradas as aplicações Beats, Elasticsearch e Kibana para realizar a coleta e gerenciamento de logs, bem como obtenção de métricas de desempenho da aplicação.
EMENTA:
- DevOps: Conceitos, terminologia e relação com Metodologia Ágeis
- CI/CD²: Implementação de Continuous Integration (CI), Continuous Delivery (CD) e Continuous Deployment (CD) com GitHub Actions e GitLab CI.
- Containers: Definição, diferenças em relação à máquinas virtuais, criação de imagens com Docker e publicação em Container Registries.
- Kubernetes: Orquestração de containers e definição de ambientes usando Helm.
- Logs e Application Performance Monitoring (APM): Gerenciamento e agregação de logs, e obtenção de métricas relacionadas ao desempenho da aplicação usando a stack Beats, Elasticsearch, e Kibana
4 - Teste Funcional e Estrutural em Aplicações Web e Aplicações Móveis
Professor Responsável - Prof. Dr. Auri Marcelo Rizzo Vincenzi e Fabiano Cutigi Ferrari
CARGA HORÁRIA: 40 horas
OBJETIVOS:
Apresentar conceitos e terminologia relacionados ao Teste Funcional e Estrutural, abordando os principais critérios de teste associados, com ênfase em critérios largamente adotados na indústria como o Particionamento de Equivalência, Análise de Valor LImite e Análise de Fluxo de Controle. Apresentar ferramentas que automatizam o teste funcional e estrutural com ênfase nas que apoiam o teste de aplicações Web desenvolvidas em Java e aplicações móveis para Plataforma Android. Demonstrar a integração de arcabouços de teste unitátio ou de ferramentas de captura e reprodução para aplicações web com ferramentas de teste funcional e estrutural.
EMENTA:
1. Conceitos e terminologia sobre Teste Funcional e Teste Estrutural.
2. Critérios de Teste Funcionais.
3. Critérios de Teste Estruturais baseados em complexidade, fluxo de controle e de dados.
4. Automatização de critérios de teste funcionais.
5. Automatização de critérios de teste estruturais baseados em fluxo de controle.
6. Integração de arcabouços de teste unitário com ferramentas de apoio ao teste funcional.
7. Integração de arcabouços de teste unitário com ferramentas de apoio ao teste estrutura.
8. Integração de ferramentas de captura e reprodução com ferramentas de apoio ao teste funcional e estrutural
5 - Desenvolvimento de Software do front ao back-end
Professores Responsáveis - Prof. Ms. Daniel Oliveira, Prof. Esp. Fábio Velloso e Prof. Samuel Lopes Grigolato
CARGA HORÁRIA - 80 horas
OBJETIVOS:
Capacitar o aluno a compreender tecnologias que podem ser utilizadas como parte das soluções web a serem propostas no seu dia a dia de trabalho. A disciplina tem como propósito apresentar a linguagem JavaScript a ser utilizada com as tecnologias Node.Js e React. e explorar a linguagem TypeScript juntamente com o framework Angular. React e Angular são as opções que podem ser adotadas para criação de interfaces para as aplicações e com a adoção do runtime Node.js, pode usar a linguagem JavaScript como ferramenta para desenvolvimento de APIs de dados. Será apresentado o framework Express para construção de APIs RESTful, o uso de SQL Query Builder Knex para trabalhar com dados, conceitos base do Node.js, conceitos do servidor stateless em oposição aos tradicionais stateful abordando questões como sticky session, autenticação stateless e uso de cache. Será apresentado uma abordagem da evolução da arquitetura de software com seus paradigmas, design, camadas e padrões e o impacto nos modelos e metodologias de desenvolvimento.
EMENTA:
1. Desenvolvimento de APIs com Node.js. Introdução ao Node.js: Apresentação do JavaScript como alternativa de linguagem para desenvolvimento de APIs de dados. Também será apresentado o TS (TypeScript) que é um superconjunto sintático estrito de JavaScript que permite o desenvolvimento de aplicações web mais resilientes e robustas. Análise da arquitetura baseada em eventos do Node.js, com foco nos benefícios de performance e concorrência trazidos por ela. Desenvolvendo APIs de dados com Fastify: Aprofundamento no framework Fastify para o desenvolvimento de APIs de dados, buscando cobrir casos excepcionais como recebimento de arquivos (upload) e envio de imagens pré-processadas, além do CRUD básico. Trabalhando com dados usando Knex: Adicionar persistência de dados na nossa aplicação através do framework de construção de SQL Knex. Gerenciar a evolução da base de dados através da ferramenta nativa de migrações do Knex. Servidores Stateless vs. Stateful: Análise conceitual de servidores stateless e servidores stateful, incluindo o conceito de sticky session. Desenvolvimento de mecanismo de autenticação totalmente stateless usando JWT. Adicionando uma camada de testes automatizados com Jest.
2. Desenvolvimento de Front-End. HTML5/CSS: O HTML e CSS é a base para qualquer página web. Neste tópico entraremos no mundo das tags, APIs e conceitualização do CSS. Conteúdo preparatório para os outros temas deste tópico. JavaScript: explorar a criação script com JavaScript, novidades do ECMASCript, conceito de variáveis, escopo, operadores, estrutura de controle, funções, closure, patterns para JavaScript, promise, conceitos de programação funcional e melhores práticas. React: estrutura de um projeto React, componentes, estados, roteamento e integração com Back-End. Por fim, também será apresentado ferramentas de testes aplicadas a componentes web para que o aluno possa aprender como desenvolver aplicações com qualidade.
3. Evolução da arquitetura de software. Paradigmas, design, camadas e padrões e o impacto nos modelos e metodologias de desenvolvimento. Exemplos de arquitetura com suas boas práticas, conceitos e paradigmas. Arquiteturas Client/server, 3 camadas e servidores de aplicação, Microservices, Peer-to-peer, SOA, REST e APIS. Evolução de arquiteturas de integração Cloud Computing, Virtualização e Containers.
6 - User eXperience [para todos] na Web
Professores Responsáveis - Profa. Dra. Vânia Paula de Almeida Neris e Profa. Dra. Kamila R.H. Rodrigues
CARGA HORÁRIA - 40 horas
OBJETIVOS:
Propiciar aos alunos um embasamento nos princípios, conceitos e vertentes de User eXperience (UX), explorando suas bases e relações com a Interação Humano-Computador. Também serão detalhados e trabalhados de maneira prática os conceitos de usabilidade e acessibilidade e técnicas para o design e a avaliação de sistemas Web para serem aplicados como vantagem competitiva em mercado.
EMENTA:
1- Princípios, conceitos e vertentes de User eXperience (UX) para todos na web.
2- Técnicas de design e avaliação de usabilidade na web: Personas, guidelines, rapid prototyping – baixa fidelidade, Avaliação Heurística e Testes com Usuário.
3- Técnicas de design e avaliação de acessibilidade na web: guidelines, rapid prototyping – média fidelidade, Avaliação Simplificada de Acessibilidade, Avaliações semi automáticas
7 - Tópicos em Desenvolvimento de Software
Professores Responsáveis - Prof. Dr. Sergio Donizetti Zorzo e Profa. Dra. Sandra Abib
Colaboradores: Valter Camargo e Alex Fernando Orlando
CARGA HORÁRIA - 30 horas
OBJETIVOS:
Apresentar ferramentas, metodologias, e estratégias de desenvolvimento de software por empresas de desenvolvimento ou que as utilizam, objetivando trazer ao aluno a engenharia de software empregada no mercado de trabalho.
EMENTA:
variável - será composta por palestras que deverão cobrir os tópicos atuais de pesquisa e desenvolvimento na área de Engenharia de Software, como tipos mais comuns de arquiteturas de software, destacando suas principais características e os atributos de qualidade que prevalecem em cada arquitetura; computação em nuvem e ferramentas de gestão de um sistema computacional em nuvem, etc.
8 - Metodologia de Pesquisa – Revisão Sistemática
Professores Responsáveis: Profa. Dra. Elis Cristina Montoro Hernandes
CARGA HORÁRIA - 40 horas
OBJETIVOS:
Capacitar o aluno para a realização de levantamento bibliográfico seguindo o processo de Revisão Sistemática, com suporte computacional.
EMENTA:
1. Tipos de trabalhos acadêmicos.
2. A importância do levantamento bibliográfico, principalmente nos trabalhos acadêmicos.
3. O que é Revisão Sistemática (RS) e Mapeamento Sistemático (MS).
4. Os processos de RS e MS.
5. A pesquisa nas máquinas de busca.
6. A ferramenta StArt.
Trabalho de Conclusão de Curso
O Trabalho de Conclusão de Curso (TCC) é uma tarefa individual do aluno concluinte que deve ser documentada por um texto e apresentada oralmente, sendo avaliada por uma banca examinadora – formada por docentes que atuam no Curso e/ou alunos de doutorado do Programa de Pós Graduação em Computação (PPG-CC/UFSCar).
O trabalho consiste na elaboração de revisão sistemática de um tópico em desenvolvimento de software para web, a escolha do aluno, e sua documentação em um formato de artigo científico – cuja estrutura é apresentada aos alunos, sendo realizado o acompanhamento do trabalho e da escrita.
O critério de avaliação consiste na coesão da realização da revisão sistemática e sua documentação escrita no formato de um artigo científico.
A banca avaliadora tem a faculdade de, juntamente com seu julgamento, emitir parecer e sugestões sobre a reformulação do texto, estabelecendo um prazo para a sua realização.