I. O que é um software maduro?
Introdução
O que é um software maduro?
II. Conceitos Básicos
Controle de Versão
Build
Processo de Build (Java)
Compilação
Geração do JAR
O que é Maven?
Como o Maven funciona?
Apêndice: Maven com IDEs
Testes
Testes Funcionais
Testes não Funcionais
Visão Geral: Testes Funcionais
Unitário
Integração
Sistema
Aceitação
Modelo Ideal
Visão Geral: Testes Não-Funcionais
Carga
Performance
Estresse
O que é TDD?
Benefícios
Ciclo de Desenvolvimento
Apêndice: Cobertura de código
III. Arquitetura de Software
Integração Contínua
Principais Práticas Associadas
Principais Conceitos
Pré-requisitos para ter Integração Contínua
Benefícios
Desvantagens
ALM - Application Lifecycle Management
Por que usar ALM?
Cuidados com ALM
Apêndice: Minha suite de ALM
Banco de Dados
Diferenças SQL e No-SQL
- Divisões
- Foco
- Escalabilidade
Qual usar e quando usar?
Apêndice: NewSQL
IV. Arquitetura de Código
Clean Code - Código Limpo
Qual a importância do Clean Code?
Como escrever um código limpo?
Dicas
Design Patterns
Padrões GoF
Tipos de Design Patterns
Padrões de Criação
Padrões Estruturais
Padrões Comportamentais
Meus Design Patterns Preferidos
Quando usar
Por que usar
Paradigmas de Programação
Programação Orientada a Aspectos (AOP)
Programação Funcional
Programação Reativa
Domain-Driven Design (DDD)
Behavior-Driven Design (BDD)
Padrões Arquiteturais
MVC (Model-View-Controller)
MVVM (Model-View-ViewModel)
MVP (Model-View-Presenter)
MVW (Model-View-Whatever)
Princípios de Programação
SOLID
Single Responsibility
Open-Close
Liskov substitution
Interface Segregation
Dependency Inversion
DRY
KISS
WYSIWYG
YAGNI
V. Integração de Sistemas
Programação para Web
O que é HTTP?
Métodos HTTP
Status Codes
Headers
Autenticação
Cookies
Web Services
SOAP
REST
Segurança
SQL Injection
Cross-Site Request Forgery (CSRF)
Cross-Site Scripting (XSS)
Apêndice: Cloud Computing
Delivery Models
IaaS (Infrastructure as a Service)
PaaS (Platform as a Service)
SaaS (Software as a Service)
Outros
Notes
About the Author