Você está na página 1de 39

UM GUIA DE INFORMAÇÕES RÁPIDAS

Rumos da Tecnologia

Davi Araújo
Diego Calado
Gabriel Albino
Na dinâmica evolução da engenharia de software,
frequentemente antecipamos mudanças rápidas com
a introdução de tecnologias inovadoras. No entanto, o
verdadeiro motor da transformação reside na
interseção entre tecnologia e habilidades humanas,
onde a comunicação e a inovação convergem para
concretizar necessidades.

Exploraremos nesta apresentação as tendências em


processos, métodos e ferramentas que moldarão a
engenharia de software na próxima década,
questionando se essas mudanças conduzirão a um
significativo ponto de virada. Afinal, o progresso na
engenharia de software muitas vezes ocorre de
maneira gradual, marcado por desafios e reviravoltas,
e só o tempo revelará o verdadeiro impacto dessas
tendências.
Tendências de processo
As tendências em negócios, organizações e cultura
enfatizam a importância dos processos. No entanto,
questiona-se se os frameworks abordados como o SPI
(melhoria do processo de software) fornecem um guia eficaz
para o futuro.

A evolução das metodologias de processo é explorada,


buscando um equilíbrio aprimorado entre disciplina e
criatividade. Considera-se a adaptação dos processos de
software às diversas necessidades dos envolvidos -
solicitantes, criadores e usuários. A questão central é se o
software pode servir como meio para mitigar os riscos
associados a esses três componentes simultaneamente.
6 ideias propostas por Conradi e
Fuggetta para sugerir possíveis
tendências de processo.
Em um mundo de rápidas mudanças no
desenvolvimento de software, estratégias
À medida que os frameworks da SPI de longo prazo raramente sobrevivem
em um ambiente de negócios dinâmicos.
SPI evoluírem, darão ênfase a
Há muitas mudanças ocorrendo
“estratégias que focalizam a
rapidamente. Isso significa que um roteiro
orientação e inovação de estável, passo a passo, para SPI talvez
produto” precise ser substituído por um framework
que enfatize os objetivos de curto prazo
com uma orientação para produto.
Conradi e Fuggetta sugerem que as
atividades de SPI no futuro deverão “usar
Como os engenheiros de software critérios de avaliação simples e focalizados
para começar, e não uma ampla
têm uma boa noção do ponto
avaliação”. Concentrando-se nos esforços
frágil do processo, as mudanças de SPI de forma restrita e trabalhando de
em geral deverão ser motivadas baixo para cima, os profissionais
por suas necessidades, e deverão começarão logo a ver mudanças
começar de baixo para cima. substanciais em como é conduzido o
trabalho de engenharia de software.
A tecnologia de processo
automatizado de software (SPT, Ninguém é contra ferramentas e
do inglês automated software automação, mas, em muitas situações, a
process technology) se SPT não atingiu seu objetivo. Para maior
distanciará do gerenciamento eficácia, ela deverá focalizar atividades de
global de processo (suporte com apoio – os elementos mais estáveis do
base ampla de todo o processo de processo de software.
software) para concentrar-se nos
aspectos que podem se beneficiar
mais da automação.
Aprendemos que o retorno sobre
investimento (ROI, do inglês return on
investment) pode ser definido como:

Haverá mais ênfase ao retorno


sobre o investimento das
atividades de SPI.

Até hoje, as organizações de software têm


se empenhado para delinear claramente os
“benefícios” de maneira quantitativa. Pode-
se afirmar que “precisamos, portanto, de
um modelo padronizado de valor de
mercado… para levar em conta as
iniciativas de melhorias de software”.
Acima de tudo, a SPI muda a cultura
organizacional, e a mudança cultural
À medida que o tempo passa, a envolve indivíduos e grupos de
comunidade do software pode vir profissionais. Conradi e Fuggetta observam
a entender que a especialização corretamente que “os desenvolvedores de
em sociologia e antropologia software são trabalhadores de
pode ter tanto ou muito mais a conhecimento. Tendem a responder
ver com uma SPI bem-sucedida negativamente a ordem de cima sobre
quanto outras disciplinas mais como fazer o trabalho ou como mudar
técnicas. processos”. Pode-se aprender muito
examinando a sociologia de grupos para
melhor entender as maneiras eficazes de
introduzir uma mudança.
Acima de tudo, a SPI muda a cultura
organizacional, e a mudança cultural
À medida que o tempo passa, a envolve indivíduos e grupos de
comunidade do software pode vir profissionais. Conradi e Fuggetta observam
a entender que a especialização corretamente que “os desenvolvedores de
em sociologia e antropologia software são trabalhadores de
pode ter tanto ou muito mais a conhecimento. Tendem a responder
ver com uma SPI bem-sucedida negativamente a ordem de cima sobre
quanto outras disciplinas mais como fazer o trabalho ou como mudar
técnicas. processos”. Pode-se aprender muito
examinando a sociologia de grupos para
melhor entender as maneiras eficazes de
introduzir uma mudança.
Nesse contexto, “aprender” implica
aprender com sucessos e erros. Uma
organização de software que coleta
métricas permite a si mesma entender
como os elementos de um processo afetam
Novos modos de aprender podem
a qualidade do produto final.
facilitar a transição para um
processo de software mais eficaz. Sendo métricas, algo que quando um
engenheiro de software coleta medidas e
desenvolve métricas para obter
indicadores. Um indicador é uma métrica
ou combinação de métricas que fornecem
informações sobre o processo de software,
em um projeto de software ou no próprio
produto.
O Grande Desafio
Existe uma tendência que é inegável:
os sistemas baseados em software se tornarão maiores
e mais complexos com o passar do tempo.

PRINCIPAIS TÓPICOS DISCUTIDOS


NESTA APRESENTAÇÃO

Multifuncionalidade.
Reatividade e temporização.
Novos modos de interação do usuário
Arquiteturas complexas.
Sistemas heterogêneos distribuídos.
Criticidade.
Criticidade.
Multifuncionalidade
À medida que os dispositivos digitais evoluíram, começaram
a apresentar um amplo conjunto de funções às vezes não
relacionadas. O telefone celular, antes considerado um
aparelho de comunicação simples, tornou-se um poderoso
computador de bolso que executa um amplo espectro de
funções mais importantes do que fazer uma ligação
telefônica.

Segundo BROY “À medida que os dispositivos digitais


evoluíram, começaram a apresentar um amplo conjunto de
funções às vezes não relacionadas. O telefone celular, antes
considerado um aparelho de comunicação simples, tornou-se
um poderoso computador de bolso que executa um amplo
espectro de funções mais importantes do que fazer uma
ligação telefônica.”
Multifuncionalidade
A multifuncionalidade pode ser uma característica desejável
em muitos sistemas, pois permite que uma única aplicação
ou software cumpra diferentes propósitos, proporcionando
flexibilidade e versatilidade. No entanto, isso também traz
consigo desafios consideráveis.

Complexidade do Design.
Interconexões entre Funcionalidades.
Requisitos Divergentes.
Testabilidade Abrangente.
Manutenção e Evolução.
Usabilidade.
Reatividade e
temporização (timeliness ).
Os dispositivos digitais interagem cada vez mais com o mundo
real e devem reagir aos estímulos externos de maneira pontual.
Eles devem estabelecer interface com um amplo conjunto de
sensores e devem responder em um intervalo de tempo
apropriado para a tarefa em questão. Devem ser desenvolvidos
novos métodos que ajudem os engenheiros de software a prever
a cadência das várias características reativas e implementem
características menos dependentes da máquina e mais portáteis.
Novos modos de interação
do usuário
As tendências abertas para software significam que novos
modos de interação devem ser modelados e implementados.
Independentemente do fato de essas novas abordagens usarem
interfaces multitoque, reconhecimento de voz ou interfaces
mentais diretas, as novas gerações de software para dispositivos
digitais devem acomodá-las.
Arquiteturas complexas.
Um automóvel de luxo tem mais de 2 mil funções controladas
por software residente em uma arquitetura de hardware
complexa, incluindo múltiplos processadores, estrutura de
barramento sofisticada, atuadores, sensores e interfaces
humanas cada vez mais sofisticados e muitos componentes
relacionados à segurança. Sistemas ainda mais complexos estão
no horizonte próximo, apresentando desafios significativos para
os projetistas de software.
Sistemas heterogêneos
distribuídos
Os componentes de tempo real de qualquer sistema embarcado
moderno podem ser conectados por meio de um barramento
interno, de uma rede sem fio ou da Internet (ou pelas três
coisas).
Criticidade
O software tornou-se o componente central em todos os sistemas
críticos nos negócios e em muitos sistemas em termos de
segurança. Contudo, a comunidade de engenharia de software
apenas começou a aplicar os princípios mais básicos de
segurança de software.
Variabilidade de
manutenção
A vida do software em um dispositivo digital raramente dura
além de 3 a 5 anos, mas os sistemas complexos de aviônica
instalados em uma aeronave têm uma vida útil de pelo menos
20 anos. O software dos automóveis fica em algum ponto
intermediário. Isso deverá ter um impacto sobre o projeto?
Conclusão

Broy afirma que essas e outras características do software


podem ser gerenciadas somente se a comunidade
desenvolver uma filosofia de engenharia de software
distribuída e colaborativa mais eficaz, melhores
abordagens de requisitos de engenharia, uma abordagem
mais robusta do desenvolvimento motivado por modelo e
melhores ferramentas de software.
Tendências relacionadas a ferramentas
Certamente, as tendências em ferramentas de
Engenharia de Software estão sempre evoluindo para
atender às demandas crescentes da indústria.
AQUI ESTÃO ALGUMAS TENDÊNCIAS NOTÁVEIS:

Integração Contínua e Entrega Contínua (CI/CD)


Contêineres e Orquestração
DevOps e AIOps
Arquiteturas de Microsserviços
Automação de Testes
Serverless Computing
Colaboração em Nuvem
Inteligência Artificial e Machine Learning no
Desenvolvimento
Blockchain em Desenvolvimento de Software
Integração Contínua e
Entrega Contínua (CI/CD)
Integração Contínua (CI)
A CI é uma prática que envolve a integração automática
do código desenvolvido pelos membros da equipe em
um repositório compartilhado várias vezes ao dia.

Cada vez que um desenvolvedor faz uma alteração no


código, essa alteração é automaticamente integrada ao
repositório compartilhado. Após a integração, são
executados testes automatizados para garantir que a
nova alteração não quebrou nada no sistema.
Integração Contínua e
Entrega Contínua (CI/CD)
Entrega Contínua (CD)
A CD é uma extensão da CI e implica na entrega
automatizada e frequente de software ao ambiente de
produção ou de teste.

Após a integração bem-sucedida, o código é


automaticamente implantado em um ambiente de teste
ou de pré-produção. Nesse ambiente, são realizados
testes adicionais. Se os testes passarem, o software está
pronto para ser implantado em produção de maneira
automatizada.
Integração Contínua e
Entrega Contínua (CI/CD)
Benefícios da CI/CD
- Rápida Identificação de Problemas: A CI identifica quase
imediatamente após uma alteração de código, permitindo correções
rápidas.
- Entrega Contínua e Confiável: A CD garante que o software esteja
sempre pronto para ser implantado, proporcionando entregas frequentes
e consistentes.
- Redução de Erros: A automação de testes ajuda a identificar e corrigir
erros de maneira precoce, reduzindo o risco de problemas em produção.
- Eficiência e Agilidade: A automação de todo o processo acelera o ciclo
de vida do desenvolvimento, permitindo que as equipes entreguem valor
aos usuários mais rapidamente.
- Feedback Imediato: Incentivando práticas de programação mais
seguras e eficientes.
Integração Contínua e
Entrega Contínua (CI/CD)
Ferramentas CI/CD
Jenkins: Um servidor de automação que suporta a
construção, teste e implementação contínua.
GitLab CI/CD: Integrado diretamente com repositórios
Git, oferece funcionalidades CI/CD e rastreamento de
alterações.
Travis CI: Uma plataforma de CI/CD baseada em
nuvem que é fácil de configurar e integrada com
repositórios GitHub.
CircleCI: Oferece uma plataforma de automação
flexível para CI/CD, suportando várias linguagens e
ambientes.
Integração Contínua e
Entrega Contínua (CI/CD)

A implementação eficaz da CI/CD promove


uma cultura de desenvolvimento ágil,
colaborativo e confiável. Isso resulta em
entregas mais frequentes e consistentes,
além de melhorar a qualidade do software,
reduzir custos e aumentar a satisfação do
cliente.
Blockchain em
Desenvolvimento de Software
A aplicação de blockchain no desenvolvimento de software
tem se destacado devido às suas características únicas,
como transparência, segurança e descentralização.
ALGUNS ASPECTOS RELEVANTES SOBRE O USO DE
BLOCKCHAIN NESSE CONTEXTO:

Integridade e Imutabilidade
Smart Contracts
Gestão de Identidade
Rastreabilidade e Proveniência
Desenvolvimento Descentralizado
Tokenização de Ativos e Recompensas
Contratos e Acordos Transparentes
Segurança
Blockchain em
Desenvolvimento de Software
Integridade e Imutabilidade
A blockchain é conhecida por sua capacidade de garantir
a integridade e imutabilidade dos dados.

No desenvolvimento de software, isso pode ser aplicado


para garantir que o código fonte e os artefatos
associados permaneçam inalterados ao longo do tempo.

Cada transação (alteração no código, por exemplo) é


registrada como um bloco na cadeia, proporcionando
uma trilha auditável e rastreável.
Blockchain em
Desenvolvimento de Software
Smart Contracts
Os contratos inteligentes são programas autoexecutáveis
que residem na blockchain e são ativados
automaticamente quando certas condições são
atendidas.

No desenvolvimento de software, os smart contracts


podem ser usados para automatizar e garantir o
cumprimento de acordos, como processos de
pagamento, autorizações de acesso e execução de lógica
de negócios.
Blockchain em
Desenvolvimento de Software
Gestão de Identidade
A blockchain pode ser usada para implementar sistemas
de gestão de identidade mais seguros.

Os desenvolvedores podem criar aplicativos que usam


blockchain para verificar identidades de forma
descentralizada e garantir que as informações pessoais
sejam protegidas e controladas pelo usuário.
Blockchain em
Desenvolvimento de Software
Rastreabilidade e Proveniência
No desenvolvimento de software, especialmente em
ambientes de colaboração, a rastreabilidade é crucial.

A blockchain oferece uma trilha imutável de alterações,


proporcionando uma visão clara da proveniência de cada
linha de código, facilitando a detecção de bugs, auditorias
e a colaboração entre desenvolvedores.
Blockchain em
Desenvolvimento de Software
Desenvolvimento Descentralizado
A natureza descentralizada da blockchain permite a
criação de aplicativos e serviços sem a necessidade de
uma autoridade central.

Isso pode ser aplicado em sistemas de armazenamento


de dados, redes peer-to-peer e plataformas de execução
de código, promovendo a autonomia e resistência a
falhas.
Blockchain em
Desenvolvimento de Software
Tokenização de Ativos e Recompensas
Tokens na blockchain podem representar ativos digitais,
como licenças de software ou recompensas por
contribuições significativas ao desenvolvimento de um
projeto.

Isso cria um sistema de incentivos e pode ser utilizado


para recompensar desenvolvedores, manter a motivação
e promover a participação ativa na comunidade.
Blockchain em
Desenvolvimento de Software
Contratos e Acordos Transparentes
A transparência inerente à blockchain torna os contratos
e acordos mais compreensíveis e confiáveis.

Isso é particularmente útil em ambientes de


desenvolvimento colaborativo, onde várias partes estão
envolvidas e é necessário estabelecer regras claras.
Blockchain em
Desenvolvimento de Software
Segurança
A tecnologia blockchain é conhecida por sua robustez em
termos de segurança.

No desenvolvimento de software, isso pode ser aplicado


para criar ambientes mais seguros, protegendo contra
ataques cibernéticos e garantindo a integridade do
código.
Blockchain em
Desenvolvimento de Software
Embora o uso de blockchain no
desenvolvimento de software esteja
evoluindo, é importante reconhecer que nem
todas as aplicações podem se beneficiar
igualmente dessa tecnologia.
Avaliar cuidadosamente os requisitos do
projeto e entender como a blockchain se
encaixa nas necessidades específicas é
crucial para uma implementação bem-
sucedida.
OBRIGADO

Você também pode gostar