Visão Geral
Este curso de Arquitetura para Desenvolvedores de Software é direcionado a equipes que precisam obter um forte entendimento das boas práticas de planejamento estratégico para garantir um ciclo de vida de desenvolvimento sustentável e bem-sucedido.
Trata-se de arquitetura para desenvolvedores - em oposição a "Arquiteto como função".
Você aprenderá sobre a importância de construir um senso de propriedade para decisões técnicas entre toda a equipe - então, quer você seja um programador júnior ou um engenheiro sênior, vamos ajudá-lo a definir um conjunto de práticas que aprimora todos os estágios de sua projeto de software e ciclo de vida da versão.
Este curso baseado em teoria amplamente independente de plataforma inclui muita discussão e é altamente adequado para personalização - para que possamos falar sobre os problemas do mundo real enfrentados por sua equipe e sua empresa.
Objetivo
Após realizar este Curso Architecture for Developers, você será capaz de:
- O que realmente queremos dizer com Arquitetura de Software?
- Compreendendo a função de arquiteto de software
- Gerenciando e mitigando riscos
- Técnicas úteis de visualização - diagramas, UML
- Boas práticas de documentação
- Ferramental
Publico Alvo
O público-alvo são os desenvolvedores de software de todos os níveis técnicos, com o objetivo de trazer um entendimento comum de boas práticas para toda a equipe.
Também podemos personalizar a entrega e focar em tópicos específicos do plano de estudos para cursos internos, para também acomodar outras pessoas que trabalham em uma função de entrega de software - por exemplo, testadores, desenvolvedores / administradores de banco de dados, analistas de negócios, gerentes de projeto.
Pre-Requisitos
- O ideal é que os participantes tenham pelo menos o básico de experiência em um ambiente de desenvolvimento de software
Materiais
Inglês | Português
Conteúdo Programatico
Architecture
- What is “software architecture”?
- Architecture as a noun - structure
- Architecture as a verb - vision
- Types of architecture
- Towards a definition of “software architecture”
- Enterprise architecture - strategy rather than code
- Developers and their interaction within TOGAF
- Architecture domains: Business, Application, Data and Technology
- The Developer and Agile
- Architecture vs design
- Is software architecture important?
- Does every software project need software architecture?
- Architectural drivers
- Functional requirements
- Quality Attributes (non-functional requirements)
- Defining the project scope
- Architecture Principles
Architects
- The software architecture role
- Architectural drivers
- Designing software
- Technical leadership
- Quality assurance
- Technical leadership
- SCRUM, Kanban and DevOps
- Collaborative technical leadership is not easy
- Do agile teams need software architects?
- Mind the gap: Gap analysis techniques
- Software architects and coding
- A step back in time
- Should software architects write code?
- The tension between coding and being senior
- Software as an engineering discipline
- The skills and knowledge of a software architect
- Technology skills
- Soft skills
- Domain knowledge
- Domain-driven design and bounded context
- The developer as architect in an agile context
Architecting
- Managing technical risks
- Quantifying and prioritising risks
- Identifying risks
- Mitigating risks
- Risk ownership
- Software architecture in the delivery process
- The conflict between agile and architecture
- Technical vs functional design
- Software architecture provides boundaries
- How much up-front design should you do?
- Avoid big up-front design
- Contextualising just enough up-front design
- Introducing software architecture
- The essence of software architecture
- Separation of concerns: The API
- Microservice Architecture
- Contract-first development
- Migrating the Monolith
Approach
- We have a failure to communicate
- What happened to SSADM, RUP, UML, etc?
- A lightweight approach
- Moving fast requires good communication
- Where do we start?
- Common problems
- The hidden assumptions of diagrams
- A shared vocabulary
- Common abstractions over a common notation
- Static and dynamic structure
- Software systems
- Containers. (example: Docker)
- Container orchestration. (example: Kubernetes)
- Components vs classes
- Non-OO components
- Modules and subsystems
- Platforms, frameworks and libraries
Visualisation - Diagrams Overview
- UML or SysML usage
- Use Case diagram
- Sequence diagram
- Process analysis: BPMN diagrams to the rescue
- Component diagram
- Class diagram
- Deployment diagram
- Package diagram
- Developers and ArchiMate
Document
- Working from a Product backlog
- Interpreting User stories and acceptance criteria
- Behaviour-driven design
- The code doesn’t tell the whole story
- Our duty to deliver documentation
- Lightweight, supplementary documentation
- Describe what you can’t get from the code
- Product vs project documentation
- Keeping documentation up to date
- Documentation length
- Functional Overview
- Constraints
- Software Architecture
- Infrastructure Architecture
- Deployment
- Operation and Support
- Development Environment
- Decision Log
Tooling
- The Developer and DevOps
- Interacting with a deployment pipeline
- Infrastructure as code, using cloud.
- You build it, you run it!
- Choosing a suitable Case tool
- Sketches, diagrams, models and tooling
- Reverse-engineering the software architecture model
- Architecture description languages
- Minimise the model-code gap
- UML: final thoughts
- Exploring your software architecture model
- Dependency maps
- Component size or complexity
- Agile, evolvable Architecture
TENHO INTERESSE