Você está na página 1de 273

Introdução à

Engenharia de Software
Ucsal 2023.1
Prof. Elton Figueiredo da Silva

Msc. Engenharia de Software - UFBA


Coordenador de Projetos – TOTVS
CFO (Chief Financial Officer) – SINDADOS-BA
Diretor Pleno - FENADADOS
Conteúdo Programático
1ª Unidade

● Introdução ● Contexto social e econômico da


Engenharia de Software
○ Conceitos de produto (software) e
processo de desenvolvimento de ○ O software e a sociedade
software ○ O software e a economia mundial
○ O software e a economia brasileira
○ O que é Engenharia de Software

○ Diferença entre Engenharia de Software


e Ciência da Computação
● Práticas profissionais
○ Tecnologia, inovação e plano de
○ Profissionalismo
negócios
○ Psicologia e dinâmica de grupo
○ Habilidades de comunicação
Conteúdo Programático
2ª Unidade

● Áreas do conhecimento da Engenharia de Software ○ Processos de software


○ Requisitos ○ Modelos e métodos
○ Design ○ Qualidade
○ Construção
○ Teste ● Ferramentas do engenheiro de software
○ Manutenção ○ Ferramentas Case
○ Gerenciamento de configuração
○ Gerenciamento de projetos
Bibliografia Básica

PRESSMAN, R. S. Engenharia de Software. Uma abordagem profissional. McGraw Hill, 7ª


ed. 2010. São Paulo: Makron Books, 2010.

SOMMERVILLE, Ian. Engenharia de Software. Pearson Brasil, 9ª ed. 2011. 08. ed.São
Paulo: Addison Wesley, 2010.

PETERS, James F. PEDRYCZ, Witold. Engenharia de Software: teoria e prática. Campus,


2001. Rio de Janeiro: Guimarães, 2001.
Produto de Software

Segundo a norma IEEE-STD-610 (IEEE, 1990):

“O conjunto completo, ou qualquer dos itens individuais do


conjunto, de programas de computador, procedimentos, e
documentação associada e dados designados para liberação para
um cliente ou usuário final”

Quando entregamos a um cliente um pacote bem delimitado e identificado,


podemos dizer que entregamos um produto (SPINOLA,1998)
Produto de Software

"Um software é um conjunto composto por instruções de


computador, estruturas de dados e documentos" (Pressman, 2006)

"O software é o conjunto de vários artefatos e não apenas o código


fonte" (Sommerville, 2003)
Produto de Software

Os softwares estão categorizados nos seguintes tipos (Pressman, 2006):

● Software de sistema. São programas que apoiam outros programas, como o software que realiza
a comunicação com o hardware (sistema operacional) e software que ajuda na construção de
outro software (compiladores).

● Software de aplicação. São programas que são desenvolvidos para executar no negócio de uma
empresa determinada.

● Software científico e de engenharia. São algoritmos que processam números.

● Software embutido. São programas construídos para executarem dentro de um produto


específico como as teclas digitais de um forno micro ondas

● Software para linhas de produtos. São os softwares conhecidos como software de prateleiras.
Produto de Software

Os softwares estão categorizados nos seguintes tipos (Pressman, 2006):


(Continuação)

● Software de web. São aplicativos que são executados via Internet.

● Software de inteligência artificial. São softwares que fazem os usos de algoritmos não
numéricos. Estes tipos software se encaixam na robótica.

● Computação ubíqua. São softwares que realizam a verdadeira computação distribuída


(corresponde a vários computadores trabalhando juntos para resolver um problema comum. Isso
faz com que uma rede de computadores pareça um único computador).

● Software aberto. São softwares que disponibilizam a visualização do código fonte da aplicação
para o engenheiro de software modifica da maneira que deseja.

● Software Legado. Se refere a um programa de computador que foi desenvolvido por há muito
Processo de Desenvolvimento de Software

Um processo de desenvolvimento de software pode ser visto como um


conjunto de atividades organizadas, usadas para definir, desenvolver, testar e
manter um software.

● Objetivos do processo de desenvolvimento


○ Definição das atividades a serem executadas
○ Quando determinada atividade deve ser executada
○ Pessoa ou grupo a executar tais atividades
○ Padronização no processo de desenvolvimento
Processo de Desenvolvimento de Software

● O que é?
○ Define quem faz o que, quando e como, para atingir um certo objetivo
● Fases de qualquer processo de desenvolvimento
○ Levantamento de requisitos
○ Análise de Requisitos
○ Projeto
○ Implementação
○ Testes
○ Implantação
Engenharia de Software - Definição

● Friedrich Ludwig Bauer (1969). Autor da primeira definição

“O estabelecimento e uso de sólidos princípios de


engenharia para que se possa obter
economicamente um software que seja confiável e
que funcione eficientemente em máquinas reais”
Engenharia de Software - Definição

● Anneliese Mayrhauser (1990)

"Uma disciplina da Ciência da Computação que


oferece Métodos, Técnicas e Ferramentas para
desenvolver e manter softwares com alta qualidade
para a resolução de problemas"
Engenharia de Software - Definição

● IEEE (Institute of Electrical and Electronics Engineers) (1993) desenvolveu


uma definição muito mais abrangente

"Engenharia de Software é:

(1) A aplicação de uma abordagem sistemática, disciplinada e


quantificável no desenvolvimento, na operação e na manutenção
de software; isto é, a aplicação de engenharia de software.

(2) O estudo de abordagens como definido em (1)".


Engenharia de Software - O que é ?

● A disciplina de engenharia se preocupa com todos os aspectos da produção de


software, incluindo:
● Processos
○ Racionalizam o desenvolvimento de Software

● Métodos
○ Conhecimento técnico; “Como” fazer

● Ferramentas
○ Suporte automatizado para processos e métodos

Desenvolver software não é só programar!


Engenharia de Software - Fundamentos

● A Engenharia de Software é multidisciplinar e podemos dizer que une as seguintes áreas:


○ Ciências da Computação: abrange arquitetura de computadores, lógica de
programação, estrutura de dados algoritmos, etc.
○ Administração: o engenheiro de software atua como gestor de um projeto,
administrando prazos, equipe, custos, resultados etc.
○ Comunicação: habilidade para saber se expressar com
clientes ou usuários;
○ Técnicas de solução de problemas: o engenheiro de software deve ser um
solucionador de problemas, um gerador de soluções integradas e inteligentes.
Engenharia de Software - Objetivos

● Obter software de qualidade


● "No free lunch" -
● Com produtividade no seu desenvolvimento, operação e manutenção
● Dentro de custos, prazos e níveis de qualidade controlados
● Com o melhor custo-benefício entre Qualidade e Produtividade
Engenharia de Software - Histórico

● Década de 50
○ Surgiram os primeiros softwares
○ Pesquisas eram voltadas para o hardware
○ Hardware disponível apenas nos centros de pesquisa
○ Software desenvolvido sem utilizar técnicas de engenharia
Engenharia de Software - Histórico

● Década de 60: a chamada “Crise do Software”


○ Criação do termo "Engenharia de Software"
○ Dificuldade em escrever programas corretos, verificáveis
○ Surgiram os microprocessadores e o hardware deixou de representar um
problema
○ Software tornou-se o foco dos pesquisadores
○ Desenvolvimento fora de controle
○ Iniciou como um problema de Custo e Produtividade
○ Organizações começaram a desenvolver grandes sistemas
○ Os programas eram ruins e não alcançaram as expectativas dos clientes
○ Era um problema de Qualidade
Engenharia de Software - Histórico

● Década de 60: a chamada “Crise do Software”


○ Uso indiscriminado de comando GOTO
○ GOTO
■ pular para uma parte arbitrária do código
■ mudança do fluxo de controle
○ Não existiam linguagens de programação de alto nível (JavaScript, Python...)
○ Não havia estrutura de controle de programação: seleção, repetição,
blocos de controle, rotinas
○ Manutenção do sistema muito mais difícil
○ Entendimento do código por outros programados ficou complicado
Engenharia de Software - Histórico

● Década de 70
○ Programação Estruturada
■ Linguagens com estruturas de controle mais sofisticadas
■ seleção (if-else), repetição (for, while), rotinas, blocos
○ Projeto Estruturado
■ Visava estruturar a arquitetura do sistema: coesão e acoplamento
dos módulos
■ Organização das macro-estruturas dos sistemas
○ Surgimento do Fortran, para aplicações matemáticas
Engenharia de Software - Histórico

● Década de 70
○ Os problemas não se limitavam à programação
○ A programação ocorria depois de várias atividades anteriores
○ O programa visa dar solução a um sistema
○ Sistema surgiu para resolver um problema de um negócio
○ Projeto estruturado de sistemas vão dar a solução para um problema
○ Estruturava-se a solução
Antigamente...
Engenharia de Software - Histórico

● Década de 80
○ Análise Estruturada
■ Entender o problema antes de partir para um solução
■ Analisar os requisitos a serem tratados
■ Elaborar DFD-Diagrama de Fluxo de dados, Dicionário de Dados,
Diagrama ER, de Estados, etc.

○ Surgimento de ferramentas CASE (Computer-Aided Software Engineering)


■ Softwares para auxiliar a Engenharia de Software
Engenharia de Software - Histórico

● Década de 90
○ Análise e Projeto baseado em Orientação a Objetos
■ Aumentou sua evidência no desenvolvimento de software

○ Java (1994-95, utilizada em aplicações web)

○ UML (1994-95)

○ Processo Unificado (1995-96)


Engenharia de Software - Histórico

● Anos 2000
○ Metodologias Ágeis
■ Começaram a ser disseminados no mercado de software
■ Alternativa mais flexível de desenvolvimento

○ Novos paradigmas: SOA(arquitetura de software orientada a serviço),


Aspectos, Model-Driven Architecture, etc.
○ Cloud Computing
Engenharia de Software - Desafios

● Reduzir custos
● Melhorar a qualidade do software
● Atender às expectativas do cliente
Engenharia de Software - Camadas
Contexto Social e Econômico Da Engenharia de Software

● O software e a sociedade
● O software e a economia mundial
● O software e a economia brasileira
O Software e a Sociedade
Comunicação
Comunicação
Conservação de alimentos
Meios de transporte
Pesquisa
Localização
Medição de tempo
Fogão
Consumir música
Cirurgia
Cirurgia do futuro
Inovações baseadas em software

Maior empresa de
transporte de passageiros
do mundo não possui
veículos em sua frota
Inovações baseadas em software

Maior empresa de
hospedagem do mundo
não é proprietária de
hotéis
Inovações baseadas em software

Gigante do varejo virtual


mais valorizado do
mundo não possui
produtos em seu estoque
Inovações baseadas em software

Maior rede de TV do
mundo sem precisar fazer
propaganda em intervalos
comerciais.
É o maior cinema do
mundo sem ter nenhuma
sala
Inovações baseadas em software

Maior intermediador de
pagamentos do mundo
sem precisar ter nenhuma
agência bancária ou caixa
eletrônico
Inovações baseadas em software

Maior empresa de mídia


do mundo não produz
nenhum conteúdo
Inovações baseadas em software

Responsável pelo
desligamento de 10
milhões de linhas de
celulares em apenas 5
meses no Brasil
(fonte: ANATEL, 2015)
Inovações baseadas em software

Maior enciclopédia do
mundo sem publicar um
único livro
Inovações baseadas em software

Maior empresa de
recrutamento do mundo
sem ter nenhum head
hunter e nenhum
escritório de RH
Internet das Coisas

● Quando falamos em ‘coisas’,


queremos dizer: qualquer coisa
● Trata de objetos conectados entre si
pela rede, que trocam informações
para facilitar ou criar diversas ações
● 3 componentes que precisam ser
combinados:
○ dispositivos
○ rede
○ sistema de controle
Inteligência Artificial

● Criar máquinas inteligentes


● Programação de computadores para
determinados traços, tais como
conhecimento, raciocínio, solução de
problemas, percepção, aprendizagem,
planejamento, capacidade de manipular
e mover objetos
Inteligência Artificial

Aplicações da inteligência artificial no mercado

● Linhas de produção
● Lojas de varejo online
● Jornalismo
● Bancos
● Automóveis
● Entretenimento
● Cuidados com a saúde
● Serviço de Atendimento ao Cliente
Inteligência Artificial
Inteligência Artificial
Atividade

Baseado no texto "O futuro era melhor no passado" descreva:

Como vocês enxergam o mundo daqui a 50 anos?

Que futuro vocês gostariam que a tecnologia ajudasse a


criar em 2073?
Práticas profissionais

• Profissionalismo;

• Psicologia e dinâmica de grupo;

• Habilidades de comunicação;
Profissão

Profissão é um trabalho ou atividade especializada dentro


da sociedade exercida por um profissional

Ofício; emprego; ocupação; mister


Profissional

1. pertencente ou respeitante a profissão


2. que prepara para certas profissões
3. que desempenha o seu trabalho de modo sério,
rigoroso, competente
Profissionalismo

1. qualidade do que é profissional.


2. cumprimento do trabalho com seriedade, rigor,
competência; procedimento do que é bom profissional.
3. conjunto de profissionais e sua atuação.
4. carreira de profissional.
Profissionalismo

É a capacidade que o indivíduo tem para a realização


do seu trabalho de forma competente e plausível

É sua postura como profissional, o modo como você


demonstra sua seriedade no trabalho
Profissionalismo

Esta competência ou comportamento profissional é o que


nos torna especial neste mundo cada vez mais competitivo
e nos diferencia das máquinas

Quanto mais olhamos para o futuro, mais percebemos que


o ritmo acelerado do mercado de trabalho exigirá de todos
nós, profissionais, um conjunto de habilidades essenciais.
Profissional do Futuro

São competências não técnicas, mas "humanas",


que ajudarão os "profissionais" do futuro a se
diferenciarem das máquinas. De quebra, também
ajudarão as pessoas a se adaptarem a cada nova
tecnologia que surgir pela frente – e que afeta suas
vidas, relações sociais e trabalho
Habilidade Profissionais

"A humanidade está ingressando na Quarta Revolução


Industrial, uma nova era em que a união de tecnologias
digitais, físicas e biológicas modificará drasticamente não
apenas o modo como vivemos, mas a maneira como
trabalhamos"
Klaus Schwab, fundador do World Economic Forum (WEF)
Habilidades Profissionais

Foi realizada uma pesquisa e o resultado foi o relatório


The Future of Jobs: Employment, Skills and
Workforce Strategy for the Fourth Industrial
Revolution

Fonte: https://futuroexponencial.com/10-habilidades-profissional-futuro/
Habilidades Profissionais

1. Resolução de problemas Complexos


Habilidades Profissionais

1. Resolução de problemas Complexos

A resolução de problemas complexos não é uma habilidade que nasce com o profissional,
mas se aprimora ao longo dos anos. A habilidade, que consiste na capacidade de resolver
problemas novos e indefinidos em ambientes reais, se constrói a partir de uma base sólida
de pensamento crítico.

O profissional do futuro deverá ter a elasticidade mental para resolver problemas que
nunca viu antes, e que podem ficar mais complexos a cada minuto. Os solucionadores de
problemas complexos serão os profissionais mais demandados no futuro.
Habilidades Profissionais

2. Pensamento crítico
Habilidades Profissionais

2. Pensamento crítico

Pensamento estruturado, capacidade de comunicação clara, habilidade de fazer as


perguntas certas, de reconhecer o problema atrás do problema e de olhar para uma
questão sob diferentes perspectivas

Os pensadores críticos serão adições bem-vindas a qualquer equipe.

O pensamento crítico envolve lógica e raciocínio. O profissional deve ser capaz de usar a
lógica e o raciocínio para questionar determinado problema, considerar várias soluções
para aquele obstáculo e colocar os “prós” e “contras” na balança, a cada nova abordagem.
Habilidades Profissionais

3. Criatividade
Habilidades Profissionais

3. Criatividade

Ser criativo é ser capaz de conectar informações aparentemente díspares e, a partir dessa
conexão, construir novas ideias para apresentar algo “novo”. A avalanche de novos
produtos e novas tecnologias vêm exigindo dos profissionais uma boa dose de criatividade
para que possam se beneficiar de todas essas mudanças.

Mesmo com toda a ascensão da robótica avançada, as máquinas não têm – ainda – a
capacidade criativa do ser humano. Logo, se a criatividade já é uma ferramenta importante
no mercado de trabalho de hoje, nos próximos anos ela deverá se tornar uma habilidade
imprescindível nas empresas.
Habilidades Profissionais

4. Gestão de pessoas
Habilidades Profissionais

4. Gestão de pessoas

Mesmo com o avanço de áreas como inteligência artificial e a automação do trabalho,


funcionários sempre serão recursos valiosos para qualquer empresa. No entanto, como
qualquer ser humano, os funcionários têm dias ruins, ficam cansados, doentes, distraídos
e desmotivados. Daí a importância da gestão de pessoas.

Saber gerenciar pessoas significa saber motivar equipes, maximizar a produtividade e


responder às necessidades dos funcionários. A gestão de pessoas é uma ferramenta
muito importante e se conecta diretamente com a inteligência emocional.
Habilidades Profissionais

5. Coordenação com os outros


Habilidades Profissionais

5. Coordenação com os outros

Colaboração é fundamental em qualquer ambiente de trabalho e, nesse aspecto, os seres


humanos conseguem se sair melhor do que as máquinas.

As organizações estão privilegiando a contratação de profissionais com fortes habilidades


interpessoais, que sejam capazes de relacionar bem com colegas de trabalho e superiores
– em suma, que saibam se coordenar com os outros.

A coordenação com os outros é uma habilidade social importante, que envolve saber se
comunicar, trabalhar com pessoas de diferentes personalidades e, acima de tudo, lidar
com as diferenças encontradas em cada uma delas.
Habilidades Profissionais

6. Inteligência Emocional
Habilidades Profissionais

6. Inteligência Emocional

O conceito de “inteligência emocional” foi popularizado pelo psicólogo Daniel Goleman, e


envolve reconhecer e avaliar as emoções de outras pessoas, estabelecer empatia com esses
sentimentos e produzir os resultados desejados.

A inteligência emocional compreende também identificar nossos próprios sentimentos, para


que possamos nos motivar e gerir as emoções dentro de nós. É uma habilidade social
importante para os gestores e líderes e será muito demandada em todas as indústrias do
futuro.

A gestão das emoções é fundamental a profissionais. A gestão adequada das emoções é


uma habilidade que pode fazer profissionais passarem pela crise com mais serenidade e sem
perder o “espírito de luta”.
Habilidades Profissionais

7. Julgamento e tomada de decisões


Habilidades Profissionais

7. Julgamento e tomada de decisões


asasa

Diante do gigantesco volume de dados que as organizações estão reunindo nos dias de hoje,
é cada vez maior a necessidade de profissionais com capacidade não apenas de ler e
interpretar essas informações, mas também de tomar decisões cruciais.

O julgamento e tomada de decisões será uma habilidade fundamental no mercado de trabalho


de 2020. Os profissionais do futuro deverão examinar números, encontrar insights nas
informações analisadas e utilizar o Big Data para tomar decisões estratégias nas empresas.

Um bom líder será sempre bom na tomada de decisões em ambientes de alta complexidade,
contexto mais frequente na rotina corporativa. Acertar em soluções neste ambiente é meio
caminho para o sucesso no mundo dos negócios
Habilidades Profissionais

8. Orientação de serviço
Habilidades Profissionais

8. Orientação de serviço

As empresas de produtos alimentícios, serviços financeiros e tecnologia da informação estão


sendo cada vez mais confrontadas com novas preocupações dos consumidores.

Dúvidas relacionadas à segurança alimentar e privacidade são frequentemente formuladas e,


caso não sejam adequadamente respondidas pelas empresas, conduzem à perda de clientes,
prestígio e reputação.

Como os valores estão mudando rapidamente, saber orientar corretamente os clientes será
uma habilidade essencial no mercado de trabalho. Mais do que saber orientar, o profissional
deverá conhecer seu público, estudar seus clientes, para adaptar os produtos e serviços
oferecidos à realidade do consumidor.
Habilidades Profissionais

9. Negociação
Habilidades Profissionais

9. Negociação

Com a ascensão das máquinas no mercado e a consequente automação do trabalho, as


habilidades sociais serão mais importantes do que nunca no futuro. Relacionar-se com
pessoas é um constante negociar. Por isso, habilidades de negociação e conciliação de
diferenças são importantes para todos os profissionais.

A capacidade de negociar com você mesmo (tempo, foco, prioridades) e com outros
(colegas, gestores, clientes e equipes) em prol daquilo que está sendo construído e do que é
importante para você e para os outros estará no alto da lista de habilidades desejáveis.

Mesmo pessoas com cargos técnicos em breve deverão mostrar mais empenho em suas
habilidades interpessoais.
Habilidades Profissionais

10. Flexibilidade cognitiva


Habilidades Profissionais

10. Flexibilidade cognitiva

A flexibilidade cognitiva envolve ampliar as maneiras de pensar, imaginando diferentes


caminhos para resolver os problemas que surgem diante de nós. A habilidade compreende
expandir os interesses pessoais e profissionais, sair da zona de conforto e se relacionar com
pessoas que desafiam suas visões de mundo.

Quanto mais flexível uma pessoa é, mais facilmente ela será capaz de enxergar novos
padrões e fazer associações únicas entre ideias. As empresas do futuro estarão aguardando
esse tipo de atitude ansiosamente.

Usar a intuição, colocar a opinião à prova, viver a diversidade, ouvir diferentes tribos e
conceitos, ser elegante com outras pessoas e analisar linguagem não-verbal também vão
contribuir para o desenvolvimento dessa habilidade profissional.
Habilidades Profissionais

Conclusão
Habilidade Profissionais

Conclusão

O mundo está evoluindo com tamanha velocidade e um terço das habilidades


consideradas essenciais no mercado de trabalho de hoje não serão mais necessárias até
2020.

Logo, para acompanhar o ritmo de todas as mudanças, precisamos nos armar de algumas
dessas habilidades ou, no mínimo, aprimorar aquelas que já possuímos.
Perspectivas de Futuro

A chamada Quarta Revolução Industrial - era da inteligência artificial, dos


robôs, impressão 3D, da nanotecnologia e da internet das coisas - vai
cortar milhões de postos de trabalho.

Uma entrevista realizada pela Infosys com jovens com idades entre 19 e 25
anos de países como Índia, África do Sul, Brasil, China, Grã-Bretanha,
França, Austrália e Alemanha, o levantamento traz seus interesses e
perspectivas para o futuro.

Fonte: https://exame.abril.com.br/carreira/como-os-jovens-vao-enfrentar-a-quarta-revolucao-industrial/
Perspectivas de Futuro

Otimismo

Os jovens se mostram otimistas em


relação ao futuro de carreira. Quase dois
terços do total de entrevistados têm
percepção positiva. E os brasileiros se
destacam por esta característica: 34%
são otimistas e 40% são muito otimistas.
Perspectivas de Futuro

Saber gerir o tempo

A competência essencial ao sucesso que


mais citada pelos jovens foi a gestão do
tempo. Veja a lista com 5 competências mais
valorizadas pelos entrevistados da pesquisa:

5 competências necessárias ao sucesso


1º Gestão do tempo
2º Comunicação verbal
3º Trabalho em equipe
4º Pensamento crítico
5º Competências técnicas da sua profissão
Perspectivas de Futuro

Apostar no aprendizado contínuo


de novas competências

A grande maioria reconhece que o


sucesso profissional está intimamente
ligado ao aprendizado contínuo de novas
competências e habilidades ao longo da
carreira. E as mulheres se destacam mais
do que os homens nesta percepção.
Perspectivas de Futuro

Dominar habilidades no campo da


tecnologia
Quem não tem habilidades no campo da
tecnologia terá enorme dificuldade em
encontrar emprego estável no futuro.

Em média, dois terços dos entrevistados de


países como China, Brasil, Austrália, Grã
Bretanha e Estados Unidos concordam com
essa premissa.
Perspectivas de Futuro

Desvendar a ciência de dados


(Big Data)

O interesse em aprender sobre ciência de


dados é maior entre os jovens das
economias em desenvolvimento. Indianos
são os mais interessados, alemães, os
menos.
Perspectivas de Futuro

Saber desenvolver apps

Os jovens indianos também são os mais


interessados em aprender a desenvolver
aplicativos, entre todas as nacionalidades
consultadas. Jovens sul-africanos e
brasileiros também aparecem entre os mais
interessados em dominar este tipo de
tecnologia no futuro.
Perspectivas de Futuro

Dominar programação

Aprender programação e suas linguagens


está entre as metas de quase metade dos
indianos entrevistados, que mais uma vez
encabeçam a lista de grandes
interessados em dominar novas
tecnologias.
Habilidades Comportamentais

Um conjunto de características relativas à


maneira de agir do profissional em suas
atividades de trabalho

São tão ou até mais importantes do que as


competências técnicas, portanto o
profissional tem de estar atento a
necessidades que muitas vezes não
aparecem nas descrições das vagas.
Habilidades Comportamentais - Trabalho em equipe

● Habilidade do colaborador
○ Profissionalismo
○ Maturidade
○ Respeito ao ponto de vista do outro
○ Engajamento
○ Empatia
○ Cordialidade
○ Compreensão com a experiência individual
○ Sentimento de coletividade
○ Altruísmo
○ Solidariedade
Habilidades Comportamentais - Trabalho em equipe

● Benefícios para a empresa


○ Um problema, diversas soluções
○ Aprendizagem garantida
○ Um grupo unido jamais será vencido
○ Habilidades específicas para tarefas específicas
○ Um melhor ambiente de trabalho
Habilidades Comportamentais - Trabalho em equipe

● Benefícios para a empresa


○ Maior criatividade
■ A troca de informações e experiências favorece a ampliação de visão dos
profissionais, estimulando a criação e inovação para o desenvolvimento de
novas soluções.

○ Aumento de aprendizagem
■ Além do estímulo à criatividade, a troca de conhecimentos contribui
significativamente para enriquecer a sabedoria de todos. Em ambientes
que funcionam dessa forma, todos aprendem e todos ensinam.
Habilidades Comportamentais - Trabalho em equipe

○ Maior envolvimento e comprometimento


■ Quanto maior a participação dos colaboradores nas tomadas de decisão,
mais eles sentem que realmente fazem parte da organização. Esta sensação
de pertencimento impacta diretamente na motivação e comprometimento.

○ Habilidades diferentes para cada necessidade


■ Ninguém consegue ser bom em tudo e trabalhar em equipe é o único
caminho para enfrentar todos os desafios do mercado. Cada profissional
possui um ponto forte, e cabe aos líderes fazer corretamente a gestão de
competências do time, de modo as habilidades se complementem e a equipe
seja forte e completa.
Habilidades Comportamentais - Trabalho em equipe

○ Melhor ambiente de trabalho


■ O trabalho em equipe influencia diretamente no clima organizacional: quanto
mais fluidos e conectados em direção a um mesmo sentido, mais positivo
será o ambiente, estimulando a motivação, bem-estar, produtividade,
engajamento e a lucratividade.
Habilidades Comportamentais - Liderança

● Comunicação: manter um canal de comunicação aberto, onde pessoas podem ouvir e


serem ouvidas
● Saber dar e receber feedbacks
● Criar engajamento entre colaboradores e equipes, evitando competitividade
● Saber identificar o perfil de cada liderado e assim, delegar responsabilidades
● Ser o exemplo
● Aprimorar e desenvolver habilidades em seus liderados
● Propor desafios, instigando cada um a dar o melhor de si
● Incentivar a inovação e a criação
Habilidades Comportamentais - Liderança

● Ser ousado
● Compartilhar conhecimento e experiência
● Compartilhar os planejamentos e processos de trabalho
● Transmitir confiança, ser firme nas palavras
● Fazer das mudanças e crises oportunidades de crescimento e aprendizado para todos.
● Ser responsável pela redução do estresse
● Saber gerenciar crises, tanto de relacionamento quanto de processos de trabalho
● Ser positivo, otimista
● Eliminar burocracias
Habilidades Comportamentais - Proatividade

● Consegue enxergar além da situação


● Não espera ordens para executar tarefas
● Apresenta resultados além do esperado
● Antecipa-se aos problemas apresentando soluções práticas
● Busca formas de otimizar o tempo e execução de suas tarefas
● Diante de desafios, foca na solução e não no problema
● Adapta-se facilmente a qualquer ambiente
● Gosta de cumprir metas e inovar em seus resultados
● É comprometido, responsável e determinado
Habilidades Comportamentais - Comunicação

● Capacidade de comunicação com público externo


○ Somos todos vendedores! Saber vender é importante desde que seja um produto
ou um serviço até mesmo uma ideia.
● Capacidade com público interno
○ Revela a sua habilidade de relacionamento com colegas, clientes... Que empresa
não quer um funcionário que saiba lidar de maneira saudável com todos ao
redor?
● Capacidade de comunicação com chefes
○ A perspicácia de elaboração de ideias é esperada, mas de nada adianta ser
criativo se não souber organizar os conceitos, colocá-los de forma inteligível e
vendê-los a quem deve tomar decisões: o chefe.
Habilidades Comportamentais - Comunicação

● Capacidade de ouvir
○ As informações hoje chegam de maneira intensa e de todos os lados. É possível
ouvir notícias o dia todo, o acesso às informações é constante, mas é importante
saber filtrar o que é relevante. Quem tem a capacidade de ouvir, em qualquer
ambiente, sabe absorver aquilo que é importante para o seu crescimento e o da
empresa.
○ Valorização do outro
● Capacidade de saber outras línguas
○ Se comunicar pelo menos em inglês e espanhol. Acho que pelo menos essas
duas hoje são essenciais.
Habilidades Comportamentais - Comunicação

● Capacidade de se atualizar:
○ Muito se fala em MBA, especialização etc, mas hoje é possível encontrar cursos
na internet, inclusive gratuitos, que dão a oportunidade de aprender coisas novas
todos os dias. Empresas desejam funcionários que estejam se aprimorando em
sua e outras áreas. Isso revela sua capacidade de adaptação de mercado, além
de obviamente mostrar a habilidade da pessoa de absorver conhecimento e
utilizá-los no cotidiano profissional.
Habilidades Comportamentais - Relacionamentos

RELACIONAMENTOS INTERPESSOAIS

A forma como interagimos com as pessoas ao nosso redor: amigos, colegas de trabalho,
familiares, ou seja, as diversas interações que podem acontecer baseadas em sentimentos,
emoções e tipos de relacionamentos que temos com o núcleo de pessoas que nos cerca
em nosso dia a dia.

● Conceitos
○ Relacionamento Interpessoal Profissional
○ Relacionamento Interpessoal Pessoal
○ Relacionamento Interpessoal Virtual
Habilidades Comportamentais - Relacionamentos

● Tipos de relacionamentos interpessoais


○ Relações Unilaterais
○ Relações Bilaterais

● Fatores que influenciam a sua relação interpessoal


○ Autoconhecimento
○ Amor próprio
○ Tolerância
○ Empatia
Habilidades Comportamentais - Trabalho Voluntário
Ser voluntário é mais que ajudar, é mais que fazer qualquer
ação voluntária.

O trabalho voluntário te faz crescer como ser humano, te faz


enxergar e pensar "fora da caixa", te faz ter empatia, te faz ter
ideias criativas e inovadoras, te faz tomar iniciativa e adquirir
novos conhecimentos, te faz saber trabalhar em equipe em
prol de um propósito maior, te faz saber lidar com as
diferenças e te faz ser um solucionador de problemas.

O trabalho voluntário ainda te faz adquirir habilidades e


competências pessoais, interpessoais e profissionais.
Habilidades Comportamentais - Trabalho Voluntário

Ser voluntário é:
● se colocar no lugar do outro
● ser solidário
● respeitar o outro
● compreender o que o outro está passando
● ajudar sem esperar e querer nada em troca
● ter compaixão
● ter um olhar complacente
É amar o ser humano
● servir sem julgar
● ser um bom ouvinte
● ser humilde
● buscar sempre o melhor de si mesmo e fazer o outro buscar o que ele tem de melhor
● é motivar
Habilidades Comportamentais - Trabalho Voluntário

● É um sinal de maturidade, responsabilidade e de engajamento em causas sociais.

● Se o trabalho voluntário se alinha à vaga que o candidato está procurando, é ainda


melhor, pois demonstra que ele adquiriu experiência na área.

● Além de fazer o bem para a sociedade, pessoas que realizam trabalho voluntário
são valorizadas pelas empresas na hora da contratação
Ciência da Computação x Engenharia de Software

Ciência da Computação

Estudo de como os computadores funcionam, principalmente a partir da


perspectiva teórica e matemática.

Desenvolvimento de modelos matemáticos, algoritmos, formalização lógica de


processos para que possam ser aplicados em dispositivos mecânicos e
eletrônicos, principalmente em processos mediados por computadores

Fundamentos teóricos dos aspectos computacionais

Estudo das linguagens de programação, sua evolução, diferenças e suas técnicas


de desenvolvimento
Ciência da Computação x Engenharia de Software

Ciência da Computação

São estudados softwares básicos e complexos (sistemas de processamento de


informações, por exemplo) utilizados em campos avançados da ciência.

Também aborda a parte de banco de dados (gerenciamento, implantação, etc.) e


segurança para programas. Também é estudada a parte de redes.

Aborda matérias como física, matemática, cálculo avançado e algoritmos, além dos
fundamentos de computação e linguagens.

O mercado de trabalho se estende desde empresas de desenvolvimento a


pesquisa científica.
Ciência da Computação x Engenharia de Software

Engenharia de Software

Estudo e aplicação de abordagens sistemáticas, econômicas e quantificáveis para


o desenvolvimento, operação e manutenção de software de qualidade

Envolve todos os aspectos práticos da produção de software

Abordagem prática, aprende-se o ciclo de vida geral de como o software é


construído e mantido, inclui tópicos como gerenciamento de projetos, garantia de
qualidade e testes de software

Desenvolvimento de programa, sua manutenção e adequação a diferentes


processos produtivos, de forma a garantir maior desempenho e produtividade
Ciência da Computação x Engenharia de Software

Engenharia de Software

O engenheiro de software vai muito além da programação e deve estar atento aos
apelos do contratante, do cliente final e dos usuários do programa desenvolvido.
Só assim poderá fazer os ajustes adequados para otimizar o uso dos softwares.

Profissão considerada a 2ª melhor da área de TI em crescimento e remuneração,


segundo o site especializado em carreiras de tecnologia, CareerCast.
Engenharia de Software x Ciência da Computação

Engenharia de Software

Principais atribuições
● Desenvolvimento: desenvolver aplicativos para dispositivos móveis, como
smartphones e tablets, jogos e softwares.

● Gestão: gerenciamento de negócios e projetos de empresas de computação


e software.
Engenharia de Software x Ciência da Computação

Engenharia de Software
Principais funções
● Desenvolvimento e manutenção de software e apps
● Desenvolvimento e administração de bancos de dados
● Desenvolvimento de programas técnico/científicos
● Desenvolvimento de jogos
● Desenvolvimento de sistemas de gerenciamento para empresas
● Desenvolvimento de sistemas de apoio à área de medicina
● Administração e gestão de grandes, médias e pequenas empresas
● Gerenciamento de projetos ligados a software
● Arquitetura de design estrutural dos programas
● Realização de testes nos sistemas
● Desenvolvimento de documentação, relacionadas à gestão de projetos e à composição dos manuais
de instruções
Ciência da Computação x Engenharia de Software

Ambos ensinam fundamentos de programação e ciência da


computação, para que você possa escolher qualquer um para se
tornar um desenvolvedor de software
Engenharia de Software

Habilidades para Engenharia de Software


● Programação não é o foco principal
○ É necessário conhecer as linguagens mais utilizadas – como JavaScript,
Visual Basic, Python, C++, C# - , e seu funcionamento.
● Habilidades matemáticas são necessárias
○ Frequentemente, vão criar algoritmos matemáticos – instruções das
operações descritas “passo a passo”.
● Podem empregar uma série de ferramentas para facilitar o trabalho
○ Entre elas Ambientes de Desenvolvimento Integrado (IDE), que agilizam o
processo de escrever códigos.
Engenharia de Software

Habilidades para Engenharia de Software

● Saber utilizar ferramentas de teste automatizadas e bibliotecas de código


aberto, que oferecem as funcionalidades prontas, diminuindo o trabalho de
desenvolvê-las

● Saber interagir com bancos de dados e ser capazes de administrá-los

● Embora as graduações abordem estes conteúdos, o entendimento de boa


parte deles pode ser aprofundado por conta própria.
Engenharia de Software

Áreas de atuação

● Empresas públicas ou privadas

● Startups, na área de inovação

● Grandes companhias de tecnologia

● Trabalhar em outros países


Engenharia de Software

Mercado de trabalho
● O Brasil é o oitavo país no ranking mundial de desenvolvedores, fabricantes e
distribuidores de softwares, movimentando cerca de 27 bilhões de dólares
apenas com o mercado interno.
● Esse cenário mantém o setor aquecido para os engenheiros. O uso massivo
de celulares e tablets pela população brasileira também eleva a busca por
profissionais aptos a lidar com esses sistemas.
● A demanda internacional por esse engenheiro também é grande. Neste caso,
ele precisa ter bom domínio do inglês.
Engenharia de Software

Perspectivas salariais
● Como em qualquer outra área, o salário de um engenheiro de software pode variar — e
muito
● Depende da qualidade do seu serviço, da faculdade que cursou e também do seu
currículo profissional
● Quanto mais conhecimento você tiver na área, melhor será para alcançar o
sucesso na sua carreira
● Vamos aos números! A média salarial de um engenheiro de software é de R$ 4,6 mil.
No entanto, esse valor pode chegar a R$ 18-22 mil, como é o caso dos profissionais
seniores da área, que trabalham em grandes empresas.
Engenharia de Software

Previsões de Futuro

O mercado de softwares está entre os setores de tecnologia dos quais o Brasil é o


1º investidor da América Latina, e o 9º no ranking mundial, com investimento
de 38 bilhões de dólares em Tecnologia da Informação – software, hardware e
serviços – em 2017

Dados da Associação Brasileira das Empresas de Software (ABES).


Engenharia de Software

Previsões de Futuro

Ainda que o mercado esteja aumentando, a Associação para a Promoção da


Excelência do Software (Softex) aponta que o país pode ter carência de mais de
400 mil profissionais de TI em 2020. Dentre as trabalhadores em falta, os
engenheiros de software, área à qual 8,2 bilhões de dólares do investimento total
foram destinados.
Engenharia de Software

Engenharia de Software é uma boa escolha para quem tem afinidade com a
área de tecnologia. O mercado está em crescimento, necessita desse
profissional valioso, oferece uma boa remuneração e oportunidades para
atuar em empresas de todos os portes.

E o melhor: escolhendo o curso certo, se dedicando e se atualizando, é possível se


preparar bem para conquistar uma dessas vagas e impulsionar sua carreira.
Engenharia de Software x Engenharia de Sistemas

A Engenharia de Software ocorre como consequência de um processo


chamado Engenharia de Sistemas.

Em vez de se concentrar somente no software, a engenharia de sistemas


focaliza diversos elementos, analisando, projetando, e os organizando em
um sistema que pode ser um produto, um serviço ou uma tecnologia para
transformação da informação ou controle.
Engenharia de Software x Engenharia de Sistemas

A Engenharia de Software faz parte da Engenharia de Sistemas, mas trata


apenas de software.

Já a Engenharia de Sistemas se ocupa de todos os aspectos de


desenvolvimento e evolução de sistemas baseado em computadores,
incluindo hardware, software e engenharia do processo.
Engenharia de Sistemas

É a engenharia que desenvolve sistemas tecnológicos complexos – que


integram outros sistemas e envolvem grande quantidade de variáveis.

Este engenheiro está apto a atuar na análise, no projeto e na integração de


sistemas complexos e também em sistemas de empresas industriais e comerciais,
procurando otimizar seu funcionamento.
Engenharia de Sistemas

Um engenheiro de sistemas trabalha em organizações do setor tecnológico


de alta complexidade, como fabricantes de aviões, automóveis, navios e
equipamentos de grande porte, como plataformas marítimas de petróleo e
infraestrutura de telecomunicações. Também atua em empresas
especializadas na terceirização de projetos tecnológicos.
Engenharia de Sistemas

Atividades

● Projetos
○ Projetar, analisar e integrar sistemas complexos nos mais diversos
campos, como dispositivos, equipamentos e plantas industriais, entre
outros.
● Consultoria
○ Assessorar indústrias no projeto de operações para otimizar sua
produção.
SWEBOK

● Nas últimas décadas, a computação tem se desdobrado em uma extensa lista


de subáreas de estudo. A quantidade de informação aumentou de tal modo
que a especialização profissional tornou-se comum, de modo a alcançar o
nível de excelência desejado.

● A partir de agora vamos apresentar o SWEBOK (Software Engineering Body


of Knowledge), um guia para o corpo de conhecimento em Engenharia de
Software, patrocinado pelo IEEE (Institute of Electrical and Electronics
Engineering).
SWEBOK

● O SWEBOK é um guia de uso e aplicação das melhores práticas de Engenharia de


Software. Ele foi desenvolvido com conhecimentos recolhidos no período de 4 décadas
e revisado por inúmeros profissionais de diversos países envolvidos com a Engenharia
de Software.

● O SWEBOK é recomendado para diversos tipos de público, em todo o mundo, com o


objetivo de ajudar organizações a terem uma visão consistente da Engenharia de
Software. É endereçado a gerentes, engenheiros de software, às sociedades
profissionais, estudantes, professores e instrutores desta área de conhecimento.
SWEBOK - Objetivos

● Oferecer uma visão consistente da Engenharia de Software no âmbito mundial


● Deixar claros os limites da Engenharia de Software com respeito a outras disciplinas
como ciência da computação, gerência de projetos, engenharia da computação,
matemática, entre outros
● Caracterizar o conteúdo da disciplina de Engenharia de Software
● Prover acesso aos tópicos do corpo de conhecimento da Engenharia de Software
● Prover uma base para desenvolvimento curricular e para certificação individual
● Servir como material de apoio
SWEBOK - Público-Alvo

● Organizações públicas e privadas que necessitavam de uma visão consistente sobre a


engenharia de software para definição de requisitos de formação e treinamento, classificar vagas,
desenvolver políticas de avaliação de desempenho ou até mesmo especificar atividades de
desenvolvimento de software

● Engenheiros de software

● Autoridades responsáveis por elaborar políticas públicas

● Sociedades profissionais e educadores para definição de regras de certificação, políticas de


acreditação para currículos acadêmicos e orientações para a prática profissional.

● Estudantes de engenharia de software


SWEBOK - Áreas do Conhecimento (KA)
Disciplinas Relacionadas
Requisitos de Software

● Os requisitos expressam a necessidade e restrições colocadas sobre o


produto de software que contribuem para a solução de algum problema do
mundo real. Esta área envolve elicitação, análise, especificação e validação
dos requisitos de software (SWEBOK, 2004).

● As principais falhas verificadas em projetos de software são relativas aos


requisitos, devido às dificuldades no entendimento das necessidades do
usuário. Portanto, realizar corretamente o levantamento e administração de
requisitos é essencial para a qualidade de software
Requisitos de Software

A área de requisitos de software está dividida em sete subáreas:

● Fundamentos dos Requisitos de Software ● Processo de Requisitos


○ Requisitos de produto ○ Modelos de processos
○ Requisitos de processo ○ Atores dos processos
○ ○ Processo de suporte e gestão
Requisitos funcionais
○ Processos de Qualidade e
○ Requisitos não-funcionais
Melhoria
○ Requisitos Emergentes
Requisitos de Software

● Especificação de Requisitos
● Elicitação de Requisitos ○ Documentação de definição do sistema
○ Fontes de requisitos ○ Especificação dos requisitos do sistema
○ Técnicas de elicitação ○ Especificação dos requisitos do
● Análise de Requisitos software
○ Classificação de requisitos ● Validação de Requisitos
○ Modelagem conceitual ○ Revisão dos requisitos
○ Projeto arquitetural e Distribuição ○ Prototipação
de requisitos ○ Validação de modelos
○ Negociação de requisitos ○ Testes de aceitação
Requisitos de Software

● Considerações Práticas

Principais responsabilidades

● Preocupação com a origem dos requisitos e como os engenheiros de software


podem coletá-los. Inclui fontes e técnicas de levantamento de requisito.
● Descrever a importância dos requisitos quantificáveis, e distinguir entre sistemas e
requisitos de software.
● Demonstração de como o planejamento de requisitos se encaixa com o processo
completo de planejamento de software.
● Preocupação com os modelos de processo, atores, suporte, gerenciamento de
Requisitos de Software

● (Pressman,2002) cita que “se você não analisa, é


altamente provável que construa uma solução de
software muito elegante que resolve o problema
errado”. Uma vez que cada pessoa envolvida na
construção do software contribui efetuando uma
“pequena” modificação, a cada estágio a
especificação do produto acabou diferente da
existente no estágio anterior [Koscianski e
Soares, 2007]. Esta atitude pode resultar em
perda de tempo e dinheiro, pessoas frustradas e
clientes insatisfeitos.
Design de Software

● Também chamado de Projeto de Software, é a atividade do ciclo de vida da


Engenharia de Software em que os requisitos são analisados a fim de produzir
uma descrição da arquitetura do software (estrutura interna) que servirá como
base para sua construção [Swebok, 2004].

● Esta é uma área de grande importância, pois compreende tanto a definição da


arquitetura, componentes, relações, e outras características de um sistema ou
de um componente quanto o resultado do próprio processo [IEEE, 1990].
● “É um processo iterativo através do qual os requisitos são traduzidos num
Design de Software

A área de projetos de software está dividida em seis subáreas:

● Fundamentos do Projeto de Software

● Questões Chave no Design de Software

● Estrutura e Arquitetura de Software

● Evolução e Análise de Qualidade do Projeto de Software

● Notações do Projeto de Software

● Estratégias e Métodos para o Projeto de Software


Design de Software

● Fundamentos: minimização da complexidade, antecipação de mudanças,


construção para verificação e padrões de construção.

● Gerenciamento da construção: modelos, planejamento e métricas.

● Considerações práticas: design, linguagens, codificação, testes, reutilização,


qualidade e integração
Construção de Software

● Área envolvida com todas as áreas de conhecimento do guia, entretanto existe


um relacionamento maior com o projeto de software e com teste de software.
● Fazem parte desta área as atividades de implementação do software,
verificação, testes de unidade, teste de integração e depuração. Isso ocorre
porque o processo de construção do próprio design de software envolve vários
testes das suas atividades [Swebok, 2004].
Construção de Software

As áreas correlatas à construção de software:

● Fundamentos da Construção de Software


● Gerenciamento da Construção de Software
● Considerações Práticas da Construção de Software

O guia SWEBOK recomenda que nesta etapa as funcionalidades do software


sejam testadas durante todo o processo de desenvolvimento, não deixando
apenas para a etapa de testes.
Teste de Software

● É uma atividade realizada para avaliação da qualidade do produto, efetuando sua melhoria
através da identificação de defeitos e problemas [Swebok, 2004].

● O destaque crescente do software como elemento de sistema e os “custos” envolvidos


associados às falhas de software são forças propulsoras para uma atividade de teste
cuidadosa e bem planejada [Pressman, 1995].

● É um elemento crítico da garantia de qualidade de software e representa a revisão final da


especificação, projeto e geração de código [Pressman, 2002]

● Esta área consiste na verificação dinâmica do comportamento de um programa com um


conjunto finito de casos de testes, selecionados de um domínio geralmente infinito de
Teste de Software

São subáreas dessa área de conhecimento:

● Fundamentos do Teste de Software


● Níveis de Teste de Software
● Técnicas de Teste de Software
● Medidas de Teste de Software
● Processo de Teste
● Considerações práticas
Teste de Software

Segundo Coelho (2005) os tipos de teste são:


● Teste funcional: verifica as regras de negócio, condições válidas e inválidas
● Teste de recuperação de falhas: as falhas são provocadas diversas vezes a fim de verificar
a eficiência da recuperação
● Teste de desempenho: verifica o tempo de resposta e processamento para configurações
diferentes
● Teste de segurança e controle de acesso: verifica a funcionalidade dos mecanismos de
proteção de acesso e de dados
● Teste de interfaces com o usuário: verifica navegação, consistência e padrões;
● Teste de volume: verifica até aonde o software suporta.

A etapa de teste de software é relevante para que os erros possam ser encontrados e corrigidos
antes que o software seja entregue ao cliente.
Teste de Software 31/03/2023 terça

● Considera-se atualmente que a atitude certa para qualidade é a de prevenção,


sendo muito melhor evitar problemas do que corrigi-los. Mas ao se debater
com falhas em software já concluído, um bom plano de manutenção corretiva
é um remédio a ser planejado pela equipe.
Manutenção de Software Inicio: 28/04/2023

● O desenvolvimento de software requer esforços que visam à entrega de um


produto que satisfaça aos requisitos do cliente. Nesta área de conhecimento
sua principal responsabilidade é totalizar as atividades requeridas para
fornecer suporte custo-efetivo a um sistema de software, que pode ocorrer
antes ou depois da entrega.

● Antes da entrega do software são realizadas atividades de planejamento e


depois, as modificações são feitas com o objetivo de corrigir as falhas,
melhorar o desempenho ou adaptá-las a um ambiente externo [Swebok,
Manutenção de Software

● No guia, a manutenção de software está relacionada com todos os aspectos


da Engenharia de Software, sendo assim, ligada a todas as áreas do
SWEBOK. Sendo seu objetivo principal sustentar o produto ao longo do seu
ciclo de vida operacional.
Manutenção de Software

Os tipos de modificações durante a fase de manutenção, segundo Pressman


(2002) são:

● Manutenção corretiva: modifica o software para corrigir erros


● Manutenção adaptativa: altera o software para acomodar mudanças no seu
ambiente externo
● Manutenção perfectiva: aprimora o software (solicitações do cliente)
● Manutenção preventiva (reengenharia): modifica o software a fim de torná-
lo mais fácil de ser corrigido, adaptado e melhorado.
Manutenção de Software

As áreas correlatas à manutenção de software :

● Fundamentos da Manutenção de Software


● Questões Chave sobre Manutenção de Software
● Processo de Manutenção de Software
● Técnicas de Manutenção de Software
Manutenção de Software

● Em torno de 60% do esforço despendido por uma organização de


desenvolvimento é referente à manutenção de software. Este percentual
continua crescendo à medida que mais softwares são produzidos.
● Manutenção de software não é só consertar erros. Apenas 20% do trabalho de
manutenção é referente à correção de falhas e, os outros 80% refere-se à
adaptações ao ambiente externo e a melhorias solicitadas pelos usuários
(Pressman, 2002).
09/05/2023

Gerenciamento de Configuração de Software

● É um processo que provê recursos para a identificação, controle da evolução


e auditagem dos artefatos de software criados durante o desenvolvimento do
projeto. De grosso modo, é o controle de versões do software [Cunha et al,
2004]
Gerenciamento de Configuração de Software

● A finalidade é estabelecer e manter a integridade dos produtos de software


durante todo seu ciclo de vida (Swebok, 2004):
○ Identificar a configuração do software em um dado momento
○ Controlar sistematicamente as mudanças de configuração
○ Manter a integridade e a rastreabilidade da configuração ao longo do ciclo
de vida do software
○ Controlar a integridade dos artefatos compostos, levando em conta cada
um dos componentes do software
○ Registrar e controlar o estado do processo de alteração
Gerenciamento de Configuração de Software

● Porém, sua aplicação em empresas de desenvolvimento de software é


complexa, e às vezes inviabilizada pelos gastos. Uma forma de contornar isso
é desenvolver uma metodologia de gerenciamento de configuração que leve
em conta somente aspectos relevantes para a realidade da empresa,
descartando aqueles que são menos utilizados.
Gerenciamento de Configuração de Software

● É um processo que provê recursos para a identificação, controle da evolução


e auditagem dos artefatos de software criados durante o desenvolvimento do
projeto. De grosso modo, é o controle de versões do software [Cunha et al,
2004]
Gerenciamento de Configuração de Software

● A finalidade é estabelecer e manter a integridade dos produtos de software


durante todo seu ciclo de vida (Swebok, 2004):
○ Identificar a configuração do software em um dado momento
○ Controlar sistematicamente as mudanças de configuração
○ Manter a integridade e a rastreabilidade da configuração ao longo do ciclo
de vida do software
○ Controlar a integridade dos artefatos compostos, levando em conta cada
um dos componentes do software
○ Registrar e controlar o estado do processo de alteração
Gerenciamento de Configuração de Software

● Porém, sua aplicação em empresas de desenvolvimento de software é


complexa, e às vezes inviabilizada pelos gastos. Uma forma de contornar isso
é desenvolver uma metodologia de gerenciamento de configuração que leve
em conta somente aspectos relevantes para a realidade da empresa,
descartando aqueles que são menos utilizados.
Gerenciamento de Configuração de Software

● As atividades e as respectivas ferramentas de apoio são:

○ Controle de mudança: controle e acompanhamento de mudanças.


○ Controle de Versão: registro da evolução do projeto.
○ Integração Contínua: estabelece a integridade do sistema.
Gerenciamento de Engenharia de Software

Pode-se definir como a aplicação das atividades de gerenciamento: planejamento,


coordenação, medição, monitoração, controle e documentação, garantindo que o
desenvolvimento e a gerência de software sejam sistemáticos, disciplinados e
qualificados.
Gerenciamento de Engenharia de Software

O Gerenciamento de Engenharia é tratado sob dois aspectos:

● Engenharia de Processo: refere-se às atividades empreendidas para


geração de políticas, padrões e objetivos organizacionais consistentes
● Engenharia de Mensuração: refere-se à atribuição de valores e rótulos às
atividades referentes à Engenharia de Software.

O gerenciamento de processo e a mensuração são importantes em todas as áreas de


conhecimento, mas o Gerenciamento de Engenharia trata esses aspectos de forma mais
direta. Um grande aliado desta área de conhecimento é o Gerenciamento de Projetos.
Gerenciamento de Engenharia de Software

As atividades podem ocorrer em três níveis:

● Gerenciamento organizacional e de infraestrutura


● Gerenciamento de projetos
● Gerenciamento de medição
Gerenciamento de Projeto de Software

● Projeto é um empreendimento temporário, de elaboração progressiva e com o


objetivo de criar um produto ou serviço único (PMBOK, 2004).
● Temporário: o projeto possui início e fim bem definidos e pode ser de curta ou
longa duração. O projeto chega ao fim quando os seus objetivos são atingidos
● Elaboração progressiva: o desenvolvimento ocorre em etapas e continua por
incrementos
● Produto ou serviço único: cada projeto é exclusivo
Gerenciamento de Projeto de Software

● É a aplicação de conhecimento, habilidades, ferramentas e técnicas às


atividades do projeto a fim de atender aos seus requisitos.

● É realizado através de cinco grupos de processos: iniciação, planejamento,


execução, monitoramento e controle, e encerramento. [PMBOK, 2004]

● Envolve o planejamento, a monitoração e controle do pessoal, processo e


eventos que ocorrem à medida que o software evolui de um conceito
preliminar para uma implementação operacional”. [Pressman, 2002]
Gerenciamento de Projeto de Software

● O gerenciamento de projetos auxilia as organizações a atenderem as


necessidades de seus clientes, padronizando tarefas do dia a dia e reduzindo
o número de tarefas, que muitas vezes são esquecidas (PMI-SC, 2006).
● Por fim, gerenciar projetos é manter o equilíbrio entre escopo, qualidade,
custos, recursos e tempo (PMBOK, 2004). É papel do gerente de projetos
avaliar os riscos e impactos associados a qualquer mudança em um desses
fatores.
Engenharia de Processo de Software

● Trata da adaptação, da manutenção e do desenvolvimento dos próprios


processos, assim como das tecnologias e do treinamento que dão suporte a
esses processos.
● Pode ser interpretada como uma visão geral sobre questões relacionadas ao
processo de Engenharia de Software, principalmente as atividades
relacionadas à definição, implementação, avaliação, mensuração,
gerenciamento, mudanças e melhorias do processo de ciclo de vida de
software (SWEBOK, 2004).
Ferramentas e Métodos de Software

● Ferramentas de desenvolvimento de software são ferramentas criadas


para auxiliar no ciclo de vida do software. Essas ferramentas normalmente
automatizam algumas atividades do processo de desenvolvimento, fazendo
com que o analista concentre-se nas atividades que exigem maior trabalho
intelectual (SWEBOK, 2004).

● Métodos de Engenharia de Software impõe estrutura sobre a atividade de


desenvolvimento e manutenção de software com o objetivo de torná-la
sistemática e mais propensa ao sucesso (SWEBOK, 2004).
Ferramentas e Métodos de Software

● Esta área de conhecimento tem como objetivo pesquisar ferramentas e


métodos que aumentem a produtividade dos desenvolvedores enquanto
reduzem a ocorrência de falhas no desenvolvimento (Fernandes, 2003).
Qualidade de Software

● A qualidade de software não pode ser entendida como perfeição. Qualidade é


um conceito multidimensional, realizado por um conjunto de atributos,
representando vários aspectos relacionados ao produto: desenvolvimento,
manutenção e uso. Qualidade é algo factível, relativo, dinâmico e evolutivo,
adequando-se ao nível dos objetivos a serem atingidos (SIMÃO, 2002).
● Um dos principais objetivos da Engenharia de Software é melhorar a
qualidade dos produtos de software, ela visa estabelecer métodos e
tecnologias para construir produtos de software de qualidade dentro dos
limites de tempo e recursos disponíveis.
Qualidade de Software

● A qualidade de software está diretamente ligada com a qualidade do processo


através do qual o software é desenvolvido, portanto, para se ter qualidade em
um produto de software é necessário ter um processo de desenvolvimento
bem definido, que deve ser documentado e acompanhado (SWEBOK, 2004).

● A avaliação da qualidade de produtos de software normalmente é feita através


de modelos de avaliação de qualidade. Esses modelos descrevem e
organizam as propriedades de qualidade do produto em avaliação.
Qualidade de Software

● Os modelos de avaliação mais aceitos e usados no mercado são:


○ CMMI (Capability Maturity Model Integration), proposto pelo CMM
(Capability Maturity Model)
○ Norma ISO/IEC 9126, proposta pela ISO (International Organization for
Standardization).
Qualidade de Software

● As organizações desenvolvedoras desses modelos de qualidade fornecem selos de


qualidade para as empresas que se submetem às avaliações e estiverem dentro dos
padrões propostos.
● Esses selos são muito valorizados pelas empresas que compram software, e
representam um diferencial competitivo no mercado. Porém, nem todas as empresas
têm condições financeiras de bancar os custos de uma aquisição de um selo de
qualidade, pois implantar um processo de qualidade em uma empresa envolve custos
elevados.
Qualidade de Software

● Contudo, é possível implantar boas práticas e desenvolver um processo de


desenvolvimento organizado adaptando modelos de desenvolvimento conhecidos,
despendendo menos recursos e provendo um mínimo de sistematização no
desenvolvimento de software, a fim de se ter maior qualidade.
Qualidade de Software
Processo de Software

A utilização de um processo de software têm sido apontada como um fator


primordial para o sucesso de empresas de desenvolvimento de software.

Um processo de software pode ser entendido como um conjunto estruturado de


atividades exigidas para desenvolver um sistema de software.

Assim Sommerville trás a seguinte definição:

"[O processo é] um conjunto de atividades e resultados associados que produzem


um produto de software".
Processo de Software

Jalote conclui que um processo de software é :

"É um conjunto de atividades, ligadas por padrões de relacionamento entre elas,


pelas quais se as atividades operarem corretamente e de acordo com os padrões
requeridos, o resultado desejado é produzido.
O resultado desejado é um software de alta qualidade e baixo custo. Obviamente ,
um processo que não aumenta a produção (não suporta projetos de software
grandes) ou não pode produzir software com boa qualidade não é um processo
adequado."
Processo de Software

Fases de um processo de Software

Para Schwartz as principais fases de um processo de software são :


● Especificação de Requisitos: tradução da necessidade ou requisito
operacional para uma descrição da funcionalidade a ser executada.
● Projeto de Sistema: tradução destes requisitos em uma descrição de todos
os componentes necessários para codificar o sistema.
● Programação (Codificação): produção do código que controla o sistema e
realiza a computação e lógica envolvida.
● Verificação e Integração (Verificação): verificação da satisfação dos
requisitos iniciais pelo produto produzido.
Processo de Software

Modelos de Processo de Desenvolvimento de Software

Os modelos de processos de desenvolvimento de software surgiram pela


necessidade de dar resposta às situações a analisar, porque só na altura em que
enfrentamos o problema é que podemos escolher o modelo.

Nos modelos de processo de software é dado uma atenção especial à


representação abstrata dos elementos do processo e sua dinâmica, não
estabelecendo métodos de desenvolvimento, pois este trabalha num nível mais
alto de abstração do que os modelos de ciclo de vida.
Processo de Software

Objetivos
Processos de software visam assegurar o desenvolvimento de software:
● com prazos e necessidade de recursos definidos
● com elevada produtividade (de forma econômica)
● com qualidade assegurada

Processos permitem :
● organizar
● instrumentar
● planejar
● acompanhar projetos
● treinar equipes
Modelos de Ciclos de Vida

O que é ciclo de vida?


Conjuntos de fases que devem ser executadas para o desenvolvimento de um
produto de software. O ciclo de vida determina a ordem e interação entre as fases
e atividades.

Modelos de ciclo de vida


● são representações abstratas de processos
● descrevem processos a partir de uma perspectiva específica
● podem ser vistos como frameworks de processos
● devem ser aplicados e personalizados segundo necessidades específicas
Modelos de Ciclos de Vida

Modelo Cascata
Modelo idealizado por Royce em 1970 , também conhecido como abordagem ‘top-
down’, tem como principal característica a sequência de atividades onde cada fase
transcorre completamente e seus produtos são vistos como entrada para uma nova
fase. Sofreu diversos ajustes e aprimoramentos sendo muito utilizado nos dias atuais.

Fases
● Definição e análise de requisitos
● Projeto do sistema e do software
● Implementação e testes de unidade
● Integração e testes do sistema
● Operação e manutenção
Modelos de Ciclos de Vida

Modelo Cascata
Vantagens
● Facilidade de gestão do projeto
● Torna o processo de desenvolvimento estruturado
● Tem uma ordem sequencial de fases
● Cada fase cai em cascata na próxima e cada fase deve estar terminada
antes do início da seguinte
● Todas as atividades identificadas nas fases do modelo são fundamentais
e estão na ordem certa.
Modelos de Ciclos de Vida

Modelo Cascata
Desvantagens
● Dificuldade de acomodar as mudanças após o processo ter sido iniciado
● Particionamento inflexível do projeto em fases distintas
● Dificuldade de responder a requisitos do usuário que mudam
Processo de Software
Modelos de Ciclos de Vida

Modelo Incremental
● Também chamado desenvolvimento iterativo.
● Ao invés de entregar o sistema como uma única entrega, particiona-se o
desenvolvimento e a entrega em incrementos, com cada incremento contendo
parte da funcionalidade requerida.
● Os requisitos do usuário são priorizados e os requisitos de prioridade mais alta
são incluídos nos incrementos iniciais
● Uma vez que o desenvolvimento de um incremento é iniciado, os requisitos
são congelados, ainda que os requisitos para incrementos posteriores
continuem a evoluir
Modelos de Ciclos de Vida

Modelo Incremental
Vantagens
● Cada incremento pode agregar valor para o cliente, portanto a
funcionalidade do sistema está disponível mais cedo
● Incrementos iniciais atuam como um protótipo para ajudar a descobrir
requisitos para os incrementos posteriores
● Menor risco de falha do projeto como um todo
● Os serviços de mais alta prioridade do sistema tendem a receber a maior
parte dos testes
Modelos de Ciclos de Vida

Modelo Incremental
Desvantagens
● Podem surgir problemas relativos à arquitetura do sistema, porque nem
todos os requisitos estão reunidos na frente de todo o ciclo de vida do
software
● Cada fase de uma iteração é rígida e não se sobrepõem uns aos outros
Modelos de Ciclos de Vida – 23/05/2023
Modelos de Ciclos de Vida

Modelo Espiral
● O processo é representado como uma espiral, em vez de uma seqüência de
atividades com caminhos de retorno
● Cada volta na espiral representa uma fase no processo
● Não há fases fixas, tais como especificação ou projeto
○ As voltas na espiral são escolhidas dependendo do que for exigido
Modelos de Ciclos de Vida

Modelo Espiral
Baseia-se em quatro principais atividades:
● Determinação dos objetivos, alternativas e restrições
● Análise de risco e prototipação
● Validação e verificação
● Planejamento da fase seguinte.
Modelos de Ciclos de Vida
Modelos de Ciclos de Vida

Modelo Espiral
1º Quadrante
Um ciclo se inicia com a tarefa:
“Determinação de objetivos, alternativas e
restrições”
Objetivos principais:
● comprometimento dos envolvidos
● estabelecimento de uma estratégia para
alcançar os objetivos da fase que se inicia
● Comunicação com o cliente
Modelos de Ciclos de Vida

Modelo Espiral
2º Quadrante

Na segunda tarefa, “Avaliação de alternativas, identificação e


solução de riscos”, executa-se uma análise de risco.

Protótipos são uma forma de avaliar riscos.

Objetivos principais
● detectar riscos
● avaliar soluções que ofereçam menor risco de
implementação
● adotar atividades para reduzir os riscos principais Análise
Modelos de Ciclos de Vida

Modelo Espiral
3º Quadrante
Na terceira tarefa ocorre o desenvolvimento do produto.
Objetivos principais
● definir e validar os requisitos
● projetar o software
● projetar a validação e verificação
● codificar
● realizar testes ●integração ● unidade ● aceitação
Avaliação do cliente Construção e adaptação
Modelos de Ciclos de Vida

Modelo Espiral
4º Quadrante
Na quarta tarefa o produto é avaliado e se prepara
para iniciar um novo ciclo
O projeto é revisado e a próxima fase da espiral é
planejada
Objetivos principais
● planejar requisitos
● planejar ciclo de vida
● planejar desenvolvimento
● planejar integração e testes
Modelos de Ciclos de Vida

Modelo Espiral
Problemas do modelo espiral:
● O modelo em espiral, por suas características de avaliação e
planejamento baseadas em risco, exige que se tenha gerentes e técnicos
experientes.
● As tarefas gerenciais para acompanhamento e controle do projeto tornam-
se mais difíceis, uma vez que o modelo em espiral pode levar ao
desenvolvimento em paralelo de múltiplas partes do projeto, cada uma
sendo abordada de modo diferenciado.
Modelos de Ciclos de Vida

Sobre Modelos
● Definir o ciclo de vida adequado às características do projeto é essencial para
o seu sucesso
● Deve-se analisar os pontos fortes e fracos de cada modelo de ciclo de vida e
escolher o que ofereça melhores condições para o desenvolvimento do
software
Pontos importantes
● variação da especificação dos requisitos ao longo do projeto
● complexidade do sistema a ser desenvolvido
● características específicas do projeto
Ferramentas CASE

● Do inglês Computer-Aided Software Engineering


● Em português: “Engenharia de Software Auxiliada por Computador”
● São ferramentas utilizadas como suporte para desenvolver um software. Essas
ferramentas oferecem um conjunto de serviços, fortemente relacionados, para
apoiar uma ou mais atividades do processo de desenvolvimento de software e
podem minimizar o tempo de desenvolvimento do programa, mantendo o alto nível
de qualidade.
● Podem ser consideradas como ferramentas automatizadas que tem como objetivo
auxiliar o desenvolvedor de sistemas em uma ou várias etapas do ciclo, de
desenvolvimento de software.
Ferramentas CASE

● O objetivo principal é permitir que o desenvolvedor trabalhe em um nível de


abstração mais elevado, eliminando a preocupação com detalhes intrínsecos do
ambiente de desenvolvimento.
● Nos últimos anos, as ferramentas CASE têm evoluído em direções diferentes,
abrangendo desde a especificação de sistemas até a geração automática de
código fonte.
● A geração atual de ferramentas CASE é composta por softwares complexos que
auxiliam equipes de desenvolvimento a projetar sistemas da mesma forma que
arquitetos e engenheiros projetariam um edifício.
Ferramentas CASE

Vantagens
● Aumento da produtividade
● Maior facilidade para desenvolvimento
● Menor quantidade de códigos de programação
● Melhor qualidade no produto final
● Diminuição dos custos na manutenção
● Melhor gerenciamento e tomada de decisão
● Agilidade no retrabalho do software
● Grande facilidade de manutenção
Ferramentas CASE

Desvantagens
● Incompatibilidade de ferramentas
● Formação para utilização

Cada ferramenta tem propósitos diferentes, fornece serviços diferentes, mas possuem
algumas características em comum.
Ferramentas CASE

Classificação
De acordo com os serviços que oferecem:
● Documentação
● Planejamento e gerenciamento de projetos
● Especificações formais
● Comunicação
● Análise e projeto de software
● Projeto e desenvolvimento de interfaces
● Programação
● Geração de código
● Gerenciamento de Configuração
● Controle de Qualidade
Ferramentas CASE

Categorização
Não há um padrão definido para a categorização das CASE, no entanto os termos
abaixo são os que melhor o identificam.
● Front End ou Upper CASE: apoia as etapas iniciais de criação dos sistemas:
as fases de planejamento, análise e projeto do programa ou aplicação.
● Back End ou Lower CASE: dão apoio à parte física, isto é, a codificação
testes e manutenção da aplicação.
● I-CASE ou Integrated CASE: classifica os produtos que cobrem todo o ciclo
de vida do software, desde os requisitos do sistema até o controle final da
qualidade.
Ferramentas CASE

Atividade II
● A partir das diferentes classificações
Modelos de desenvolvimento

https://www.treinaweb.com.br/blog/ciclo-de-vida-software-por-que-e-importante-saber/

https://br.udacity.com/blog/post/ciclo-de-vida-do-software
XXX

● https://slideplayer.com.br/slide/1356925/
● https://slideplayer.com.br/slide/4086954/#
● http://igti.com.br/blog/swebok-referencia-na-engenharia-de-software/
● https://fernandalira.wordpress.com/2014/05/24/engenharia-de-software-areas-de-conhecimento-segundo-o-swe
bok/
● http://files.engenharia-de-software7.webnode.com/200000016-0a7e60b780/As%2010%20%C3%81reas%20da
%20Engenharia%20de%20Software,%20Conforme%20o%20SWEBOK.pdf
● https://pt.slideshare.net/elainececiliagatto/reas-de-conhecimento-da-engenharia-de-software
● http://www.cin.ufpe.br/~processos/TAES3/Livro/00-LIVRO/11-SWEBOK-v8_CORRIGIDO_Versao_Final_O
K.pdf
● https://www.passeidireto.com/arquivo/4390995/swebok---portugues---guia
● https://slideplayer.com.br/slide/334526/#
https://www.devmedia.com.br/ferramentas-case-conhecendo-algumas-boas-o
pcoes/32034

https://pt.wikipedia.org/wiki/Ferramenta_CASE

https://slideplayer.com.br/slide/1607907/

https://www.devmedia.com.br/ciclos-de-vida-do-software/21099
Gerenciamento de Engenharia de Software

● http://www.cin.ufpe.br/~processos/TAES3/Livro/00-LIVRO/11-SWEBOK-
v8_CORRIGIDO_Versao_Final_OK.pdf
SWEBOK - Áreas do Conhecimento (KA)
Conteúdo Programático
2ª Unidade

● Áreas do conhecimento da Engenharia de Software ○ Processos de software


○ Requisitos ○ Modelos e métodos
○ Design ○ Qualidade
○ Construção
○ Teste ● Ferramentas do engenheiro de software
○ Manutenção ○ Ferramentas Case
○ Gerenciamento de configuração
○ Gerenciamento de projetos
Engenharia de Software -Áreas do Conhecimento

1. Requisitos de Software 7. Gerenciamento de Engenharia


de Software
2. Design de Software
8. Gerenciamento de Projeto de
3. Construção de Software Software
9. Engenharia de Processo de
4. Teste de Software
Software
5. Manutenção de Software 10. Ferramentas e Métodos de
6. Gerenciamento de Configuração Software
de Software
11. Qualidade de Software
Requisitos de Software

Fundamentos dos Requisitos de Software


● O SWEBOK define requisitos como propriedades que devem ser exibidas, a fim de resolver algum
problema no mundo real [Swebok, 2004]. Esta subárea inclui as definições dos próprios requisitos de
software e também dos tipos principais de requisitos, são eles:
○ Requisitos de produto: são os requisitos que descrevem as propriedades de um sistema ou
produto que buscam satisfazer os requisitos do negócio.

○ Requisitos de processo: são “regras para o desenvolvimento do software”

○ Requisitos funcionais: são aqueles que descrevem funções que o sistema deve executar, como
por exemplo: formatação de textos, adaptação de sinais e cadastros de “entidades”.
Requisitos de Software

Fundamentos dos Requisitos de Software


○ Requisitos não-funcionais: são aqueles que descrevem restrições para a solução, exemplos:
requisitos de performance, requisitos de manutenção, requisitos de segurança; e requisitos de
confiança (estabilidade).

○ Requisitos Emergentes: não são identificados por simples componentes, mas a partir da
satisfação de várias dependências de como o software deve operar. Característica: São
extremamente dependentes da arquitetura do sistema.

● Esta subárea também descreve a importância de requisitos quantitativos e distingue-os entre


requisitos de sistema e requisitos de software.
Requisitos de Software

Processo de Requisitos

Descreve o planejamento de requisitos, de forma a efetuar o entendimento das outras cinco


subáreas com o processo completo de planejamento de software. Esta subárea mostra como
os processos de requisitos se integram com os processos de Engenharia de Software, sendo
dividida em quatro subáreas:

● Modelos de processos: o tema está preocupado com a forma que as atividades de análise de
levantamento de requisitos, especificação e validação estão configurados para diferentes tipos de
projetos e restrições. O tema inclui também atividades que contribuem para o processo de requisitos,
tais como marketing e estudos de viabilidade.
Requisitos de Software

Processo de Requisitos

● Atores dos processos: apresenta os papéis das pessoas que participam no processo de
requisitos. Há freqüentemente muitas pessoas envolvidas, além do especialista, mas sempre incluem

usuários, operadores e clientes (que não precisa ser o mesmo) .

● Processo de suporte e gestão: apresenta os recursos do gerenciamento de projetos


necessários e consumidos pelo processo de requisitos. Seu objetivo principal é fazer a conexão entre
as atividades do processo identificado na subárea, modelos de processo, e as questões de custos,

recursos humanos, treinamento e ferramentas .


Requisitos de Software

Processo de Requisitos
● Processos de Qualidade e Melhoria: preocupa-se com a avaliação da qualidade e da melhoria
do processo de requisitos. Seu objetivo é enfatizar o papel fundamental do processo de execuções dos
requisitos em termos de custo e oportunidade de um produto de software e de satisfação do cliente.
Modelos de Ciclo de Vida

● “São uma representação abstrata e simplificada do processo de


desenvolvimento software, apresentada a partir de uma perspectiva
específica”

● Tipicamente contêm:
○ “Esqueleto do processo”
○ Ordem de precedência das atividades
○ Principais artefatos e produtos gerados
Modelos de Ciclo de Vida

● Principais modelos
○ Cascata ou Clássico
○ Prototipagem
○ Métodos formais
○ Espiral
○ Incremental
Modelo em Cascata

Modelo “Clássico”, teve origem na indústria de manufatura e construção

Sua estrutura é composta por várias etapas que são executadas de forma
sistemática e seqüencial

Na falta de uma abordagem estruturada, foi a primeira tentativa de formalizar uma


metodologia de desenvolvimento de software
Modelo em Cascata

● Minimiza o planejamento, organiza as atividades em uma sequência com


entregas bem definidas
● Funciona bem para requisitos estáveis e bem compreendidos
○ O modelo pressupõe que os requisitos ficarão estáveis ao longo do
projeto
● É facilmente aplicável em equipes inexperientes

Porém, atrasa a redução de riscos!


Ciência, Engenharia e Valor

Sem pretender fazer distinções definitivas, vamos explorar o que dizem os dicionários. O Dicionário
Aurélio Eletrônico V.2.0 assim define Ciência e Engenharia:

Ciência Engenharia
Conjunto organizado de conhecimentos Arte de aplicar conhecimentos científicos e
relativos a um determinado objeto, empíricos e certas habilitações específicas à
especialmente os obtidos mediante a criação de estruturas, dispositivos e processos
observação, a experiência dos fatos e um que se utilizam para converter recursos naturais
método próprio. em formas adequadas ao atendimento das
necessidades humanas.
Terminologia

● Software
○ Programa de computador e documentação associada

○ Produtos de software podem ser desenvolvidos para um cliente particular


ou podem ser desenvolvidos para um mercado geral

○ Novos softwares podem ser criados desenvolvendo-se novos programas


ou reusando softwares existentes
Terminologia

● Processo
○ Uma série conectada de ações, com a intenção de satisfazer um objetivo
○ Define quem está fazendo o quê, quando e como para atingir um certo
objetivo

Descreve a ação de receber um ENTRADA, submeter essa entrada a uma série de rotinas
ou passos estabelecidos, para converter essa entrada em uma SAÍDA observável
Terminologia

● Processo de Software
○ Um conjunto estruturado de atividades para desenvolver um sistema de
software
■ Especificação
■ Projeto
■ Validação
■ Evolução
Mitos do Software
Segundo [Pressman], diversos mitos difundidos entre programadores escondem a importância de um desenvolvimento de software
de acordo com os princípios de uma engenharia. Vejamos algumas delas:
● O estabelecimento de objetivos gerais é suficiente para se começar a escrever programas.
● Uma vez que o programa esteja escrito e funcionando, nosso trabalho está feito.
● Mudanças no software podem ser feitas facilmente porque ele é "flexível".
● Dê a uma pessoa técnica um bom livro de programação e você terá um programador.
● Até que o programa esteja "rodando" não é possível verificarmos a sua qualidade.
● Um projeto é bem sucedido se conseguirmos um programa funcionando corretamente.
Qualidades do software
O software como um produto deve ter qualidade. Diversas são as qualidades do software a serem avaliadas. É preciso avaliar tanto a
qualidade do produto em si com a do processo de desenvolvimento. Vejamos algumas das qualidades que podem ser avaliadas.
● Corretude - um software precisa funcionar corretamente. Um software correto é aquele que satisfaz a sua especificação e
que não possui falhas ou erros.
● Validade - um software válido é aquele cuja especificação satisfaz aos requisitos dos usuários e da organização, isto é, está
de acordo com as necessidades dos usuários.
● Robustez - o software deve prever que o usuário de agir de forma não esperada e deve ser capaz de resistir a estas
eventuais situações incomuns sem apresentar falhas.
● Confiabilidade - um software correto e robusto ganha a confiança dos usuários uma vez que ele deve se comportar como
esperado e não falha em situações inesperadas.
● Eficiência - o software deve realizar suas tarefas em um tempo adequando à complexidade de cada uma delas. A utilização
dos recursos de hardware (memória, disco, tráfego de rede) também deve ser feita de forma eficiente.
● Usabilidade - o software precisa ser fácil de aprender e de usar, permitir maior produtividade do usuário, flexibilidade de
utilização, flexibilidade de aplicação e proporcionar satisfação de uso.
● Manutenibilidade - todo software precisa de manutenção, seja para corrigir erros ou atender a novos requisitos. O software
deve ser fácil de manter para que estas correções ou atualizações sejam feitas com sucesso.
● Evolutibilidade - todo software precisa evoluir para atender novos requisitos, para incorporar novas tecnologias ou para
Ferramentas Case

● Antes da década de 90 – “casa de ferreiro, espeto de pau”

● Hoje em dia as ferramentas CASE ainda não são tão variadas nem
fornecem tudo aquilo que os desenvolvedores queriam, mas são um
aparato essencial para o engenheiro de software
● CASE - Computer-Aided Software Engineering
CASE - Visão Geral [Pressman]

● O que são?
○ São ferramentas que auxiliam o engenheiro de SW em cada atividade
associada ao desenvolvimento de SW
● Quem usa?
○ Gerentes de projeto e engenheiros de SW
● Por que são importantes?
○ Reduzem o esforço necessário para produzir artefatos e alcançar metas
○ Aumentam a qualidade do software
CASE - Visão Geral [Pressman]

● Quais são os passos?


○ Ferramentas CASE são usadas em conjunto com o modelo de processo
adotado. Se for escolhida uma ferramenta completa, pode passar por quase
todos os passos do desenvolvimento de SW
● Como são usadas?
● Como complemento às boas práticas de Engenharia de Software. Ferramentas
CASE não substituem uma metodologia de desenvolvimento de software sólida

“Um tolo com ferramentas, ainda é apenas um tolo”


CASE - Categorização

Horizontais
São utilizados durante todo o processo de desenvolvimento de software
Verticais
São específicas para uma disciplina de software
Por funções [Pressman]
Processos de negócio, Planejamento de projeto, Análise de Riscos, Rastreamento de Requisitos, IDEs, Gerenciamento de BDs,
Análise Estática, Análise Dinâmica, etc.
CASE - Categorização

● Como não há um padrão para categorizar ferramentas CASE, a seguinte


proposta foi feita:
○ Front-end ou Upper CASE
■ Apoiam as etapas iniciais da criação dos sistemas: as fases de
planejamento, análise e projeto da aplicação
○ Back-end ou Lower CASE
■ Dão apoio à parte física, i.e, código, testes e manutenção
○ I-CASE ou Integrated CASE
■ cobrem todo o ciclo de vida, do início ao fim
Referências Bibliográficas

IEEE STD. 610 12-1990, IEEE Standard Glossary of Software Engineering Terminology, IEEE, Piscataway, NJ,
1997.

PAULK, M.C. et al. The Capatibility Maturity Model – Guidelines for improving the software process, Addison
Wesley, SEI series, 1995.

SPINOLA, MAURO DE MESQUITA, Diretrizes para o desenvolvimento de software de sistemas embutidos, Tese
de Doutorado, USP - São Paulo, 1998.

PRESSMAN, R. S. Engenharia de Software. 6. ed. Rio de Janeiro: McGraw-Hill, 2006, 720p.


SOMMERVILLE, I. Engenharia de software. 6. ed., São Paulo: Addison Wesley, 2003, 592p.
PROJETO – FINAL (II UNIDADE)
Cada grupo deve elaborar um protótipo de sistema considerando:

• Desenvolver a parte descritiva do protótipo do sistema: Entregar e Apresentar (16/05)


Mínimo 25 linhas.

• Construir o diagrama de caso de uso:


Documento identificando os atores.
Documento especificando os requisitos solicitados pelo cliente/usuário.
Documento “formulário descritivo” para cada requisito fornecido pelo cliente/usuário.
• Construir o diagrama de classe:
Mínimo 6 classes;
Documento descritivo sobre a funcionalidade de cada classe.
• Desenhar o possível frontend
O trabalho completo deve ser entregue (05/06/2023)
NÃO PRECISA PROGRAMAR
E a apresentação será: 06/06/2023
Caso de uso/Diagrama de caso de uso

Um diagrama de caso de uso procura, por meio de uma linguagem simples,


possibilitar a compreensão do comportamento externo do sistema (em termos
de funcionalidades oferecidas por ele) por qualquer pessoa, tentando
apresentar o sistema por uma perspectiva do usuário.
Caso de uso/Atores

Os diagrama de caso de uso concentra-se em dois itens principais: atores e


caso de uso.
Os atores representam os papéis desempenhados pelos diversos usuários
que poderão utilizar, de alguma maneira, os serviços e funções do sistema.
Eventualmente, um ator pode representar algum equipamento especial ou o
mesmo sistema que interaja com o sistema, como no caso de um aistema
integrado, por exemplo.
Caso de uso/Atores

Os atores são representados por um símbolo de “bonecos magros”, contendo uma breve
descrição logo abaixo de seu símbolo que identifica o papel que o ator em questão assume
dentro do diagrama.
Caso de uso

Os casos de uso são utilizados para capturar os requisitos do sistema, ou seja, refere-se aos
serviços, tarefas ou funcionalidades identificados como necessários ao software e que podem
ser utilizados de alguma maneira pelos atores. que interagem com o sistema. Os casos de uso
são utilizado para documentar os comportamentos pretendidos para as funções do sistema. Os
casos de usos são representados por um elipse contendo dentro de si um texto que descreve a
que funcionalidade o caso de uso se refere.
Caso de uso/Documentado
Diagrama de Classes

O diagrama de classe é um dos mais importantes em UML. Seu principal


enfoque esta em permitir a visualização das classes que comporão o sistema
com seus respectivos atributos e métodos, bem como em demostrar como
as classes do diagrama se relacionam, complementam e transmitem
informações entre si. O diagrama de classe serve ainda como base para a
construção da maioria dos outros diagramas da linguagem UML (Unified
Modeling Language) ou Linguagem de Modelagem Unificada.
Diagrama de Classes/atributos e métodos
Existem basicamente quatro modos de visibilidade:

(-) Privada somente será visivelmente na classe detentora.

(#) Protegida será visível na classe detentora e em suas


subclasses.

(+) Pública estará visivelmente para todas as classes/objetos


Diagrama de Classes/Relacionamento ou Associações

As classes costumam ter relacionamento entre si, chamados de associações, que permitem que elas
compartilhem informações entre si e colaborem para a execução dos processos executados pelo
sistema. Uma associação descreve um vinculo que ocorre normalmente entre classes/objetos de uma
ou mais classes.

As associações são representadas por uma linha ligando as classes envolvidas. Essas linhas podem
ter nome ou títulos para auxiliar a compreensão do tipo de vinculo estabelecido entre as
classes/objetos envolvidos.
Diagrama de Classes/Tipos de Associações

Associação Unária ou Reflexiva:


Ocorre quando existe um relacionamento de uma classe/objeto com classe/objeto da mesma classe.

Associação Binária:
Ocorre quando existe um relacionamento entre classe/objeto de classes distintas. Este tipo de associação
é a mais encontrada ou utilizada.

Associação Ternária ou N-ária:


São associações que conectam objetos de mais de duas classes. São representados por um losango de
convergência.
Associação Agregação:
Este tipo de associação tenta demostrar que as informações de uma classe precisa ser completadas por
informações contidas em outra classe.
Diagrama de Classes/Tipos de Associações

Generalização/Especialização:
O objetivo dessa associação é representar a ocorrência de herança entre as classes, identificando a classe
mãe e as classes filhas.

Classe associativa:
Quando a ocorrência de associações que tenham multiplicidade muitos(*) entre suas exterminadas. Essas
classes são utilizadas quando existem atributos de uma classe que não podem ser armazenados por
nenhuma classe envolvida.
Diagrama de Classes/Tipos de Associações - Exemplos
Diagrama de Classes/Tipos de Associações - Exemplos
Diagrama de Classes/Tipos de Associações - Exemplos
Diagrama de Classes/Tipos de Associações - Exemplos
Diagrama de Classes/Tipos de Associações - Exemplos
Diagrama de Classes/Tipos de Associações - Exemplos

Você também pode gostar