Ava Univirtus
Ava Univirtus
Ava Univirtus
ENGENHARIA DE SOFTWARE
AULA 3
https://univirtus.uninter.com/ava/web/roa/ 1/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
CONVERSA INICIAL
anteriormente, no
desenvolvimento de todas as etapas da construção de um sistema, conceituando
um
único projeto. Para isso, iniciaremos esta aula conceituando o que são projetos
e como são
padrão
por projeto e executados por um ou mais modelos de processos.
de projetos Git,
em conjunto com a plataforma GitHub para hospedagem e compartilhamento dos
arquivos de projetos.
evolução do
software. Ao longo desta aula serão trabalhados os seguintes conteúdos:
https://univirtus.uninter.com/ava/web/roa/ 2/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Anteriormente, estudamos
vários modelos de processos prescritivos de software e também nos
aprofundamos
nos métodos ágeis. Pudemos observar que todos os modelos estudados abordam o
então,
distribuirmos encanamentos, fiação elétrica, rede de dados, alarme, entre
outros. Ou seja,
projeto. O Guia
PMBOK (PMI, 2017) define projeto como sendo “um esforço
temporário
Gerenciamento de
Projetos do SISP, podemos perceber a similaridade com a execução das etapas
dos
modelos de processos prescritivos e ágeis que estudamos anteriormente.
demandam um
esforço temporário para criar um produto ou serviço (PMI, 2017), é a mesma
representações de dados e a
estrutura do programa, as características de interfaces e os detalhes
Na abordagem de Pressman,
podemos ser um pouco mais específicos, e estabelecer que um
projeto de software
não é somente um processo, mas um ou vários processos em várias etapas, de
https://univirtus.uninter.com/ava/web/roa/ 3/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
O projeto
da arquitetura representa a estrutura de dados e os componentes de programa
necessários para construir um sistema computacional. Ele considera o estilo de
arquitetura que o
sistema assumirá, a estrutura e as propriedades dos
componentes que constituem o sistema, bem
como as inter-relações que ocorrem
entre todos os componentes da arquitetura de um sistema.
1. Projeto
de dados;
2. Derivação
da estrutura da arquitetura do sistema;
3. Análise
de estilos ou padrões de arquitetura alternativos;
4. Implementação
da arquitetura utilizando-se um modelo de processos.
um exemplo de
representação, o Diagrama Entidade-Relacionamento do banco de dados.
Figura
1 – Representação Diagrama
https://univirtus.uninter.com/ava/web/roa/ 4/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Crédito: Singkham/shutterstock.
etapa, como
um exemplo de representação, o uso da linguagem UML e modelos como o Diagrama
de Classes.
Crédito: laaisee/shutterstock.
conforme um modelo de
processos escolhido.
desenvolvedores devem
saber como o sistema funcionará. Por essa razão, Pfleeger destaca que o
projeto
é um processo iterativo composto pelo projeto conceitual e pelo projeto
técnico.
técnico. Nessa
fase, podemos destacar como um exemplo de um modelo alternativo a uma
UML.
Figura
3 – Projeto conceitual
https://univirtus.uninter.com/ava/web/roa/ 5/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
A Figura 4 apresenta a
diferença entre o projeto conceitual e o projeto técnico, elaborado com
base em
Pfleeger (2004, p. 160-161).
Figura
4 – Projetos conceitual e lógico (técnico)
Fonte:
Elaborado com base em Pfleeger, 2004, p. 160-161.
https://univirtus.uninter.com/ava/web/roa/ 6/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
desenvolvimento
de sistemas de informação. Conforme Pressman (2011), um repositório de dados,
tal
como um banco de dados, reside no centro dessa arquitetura e, em geral, é
acessado por outros
Figura
5 – Arquitetura centralizada em dados
de
entrada devem ser transformados por meio de uma série de componentes
computacionais ou de
manipulação em dados de saída (Pressman, 2011). Conforme
Sommerville (2018), o processamento
metodologia de
programação estruturada, por meio da representação de diagramas de atividades
da
linguagem UML. A Figura 6 ilustra um exemplo de um sistema de fluxo de dados
para o
processamento de faturas.
Figura
6 – Arquitetura de fluxo de dados para o processamento de faturas
https://univirtus.uninter.com/ava/web/roa/ 7/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Fonte:
Sommerville, 2018, p. 162.
Fonte:
Sommerville, 2018, p. 155-156.
https://univirtus.uninter.com/ava/web/roa/ 8/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
A arquitetura cliente-servidor é
muito utilizada para sistemas distribuídos e sistemas web. De
acordo com
Sommerville (2018), nessa arquitetura, o sistema é apresentado como um conjunto
de
serviços, e cada serviço é fornecido por um servidor separado. Os clientes
são usuários desses
Figura
8 – Arquitetura cliente-servidor
Fonte:
Sommerville, 2018, p. 161.
Conforme Pressman
(2011), nessa arquitetura, os componentes de um sistema encapsulam dados e
as
operações que devem ser aplicadas para manipular os dados. A comunicação e a
coordenação
https://univirtus.uninter.com/ava/web/roa/ 9/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
registro de animais em
uma clínica veterinária. Sabendo-se que essa clínica atende vários tipos de
animais e que diversos animais possuem várias características em comum, tal
como gato e cachorro
Figura
9 – Arquitetura orientada a objetos
Essa
arquitetura tem como foco separar a apresentação e a interação dos dados do
sistema.
A Figura 10 apresenta a
arquitetura MVC de uma aplicação web.
Figura
10 – Arquitetura MVC
https://univirtus.uninter.com/ava/web/roa/ 10/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Fonte:
Fonte:
Sommerville, 2018, p. 156.
que são
desenvolvidos em conformidade com mais de uma arquitetura. Olhando mais de
perto o
dados referentes
aos animais atendidos. Este mesmo sistema poderia ser desenvolvido em uma
software, em um
projeto baseado em uma ou mais arquiteturas de software, conforme as
arquiteturas
que estudamos no Tema 2, desta aula. Para uma definição clara e objetiva na
escolha da
https://univirtus.uninter.com/ava/web/roa/ 11/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Os
requisitos de um sistema são as descrições do que o sistema deve fazer, os
serviços que
oferecem e as restrições a seu funcionamento. Esses requisitos
refletem as necessidades dos
clientes para um sistema que serve a uma
finalidade determinada, como controlar um dispositivo,
colocar um pedido ou
encontrar informações.
Os
requisitos de software são classificados como requisitos funcionais e
requisitos não funcionais
como o sistema
deve agir a determinadas entradas e de como deve se comportar em
determinadas
situações. Em alguns casos, os requisitos funcionais também podem declarar
explicitamente o que o sistema não deve fazer;
processo
de elicitação de requisitos são compreender o trabalho que as partes envolvidas
no
processo realizam e entender como usariam o novo sistema para apoiar seus
trabalhos. Nessa fase,
sobre o sistema
requerido e os sistemas existentes e separar dessas informações os requisitos
de
usuário e de sistema. As fontes de informação incluem documentações,
usuários do sistema,
equipe de levantamento de
requisitos questiona as partes envolvidas sobre o sistema que usam
atualmente e
sobre o sistema que será desenvolvido. Os requisitos surgem a partir das
imersão no
ambiente de trabalho em que o sistema será usado. O trabalho do dia a dia é
Figura
11 – Exemplo de cenário
https://univirtus.uninter.com/ava/web/roa/ 13/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Figura
12 – Exemplo de casos de uso
A especificação de requisitos
refere-se ao processo de escrever os requisitos de usuário e de
sistema em um
documento de requisitos. No Quadro 1 podemos observar os quatro principais
Quadro
1 – Especificação de requisitos
Notação Descrição
Sentenças
em Os
requisitos são escritos usando frases numeradas em linguagem natural. Cada
frase deve expressar um
linguagem requisito.
natural
Linguagem Os
requisitos são escritos em linguagem natural em um formulário ou template.
Cada campo fornece
natural informações sobre um aspecto do requisito.
estruturada
Notações Modelos
gráficos suplementados por anotações em texto, são utilizados para definir os
requisitos
gráficas funcionais do sistema. São utilizados com frequência os diagramas
de casos de uso e de sequência da UML.
Essas
notações se baseiam em conceitos matemáticos como as máquinas de estados
finitos ou conjuntos.
Especificações
Embora essas especificações possam reduzir a
ambiguidade em um documento de requisitos, a maioria dos
matemáticas
clientes não
compreende uma representação formal.
https://univirtus.uninter.com/ava/web/roa/ 14/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
portanto, sendo
necessário gerenciá-las. Parafraseando Pressman (2011, p. 514), a gestão de
auditando e relatando
alterações feitas.
Conforme
Sommerville (2018, p. 694), o gerenciamento de configuração de um produto de
sistema
de software envolve quatro atividades intimamente relacionadas:
interfiram com as
outras.
Construção de sistema: processo de reunir
componentes, dados e bibliotecas do programa,
Sommerville.
https://univirtus.uninter.com/ava/web/roa/ 15/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Para
instalar o Git, primeiramente devemos acessar a página de downloads da
aplicação no
endereço: /://git-scm.com/downloads (Acesso em: 29 jan. 2021). Em
seguida escolher o sistema
git
config --global user.name “Alex Mateus”
git config --global user.email
“[email protected]”
git
init (este comando cria
uma pasta oculta .git)
nossos projetos já
está pronta para uso, os próximos passos referem-se ao gerenciamento de
projetos.
git
status (mostra o status dos
arquivos)
git
add arquivo (deixa o
arquivo pronto para ser gravado)
git
add . (deixa todos os
arquivos do diretório prontos para commit)
git
commit (cria o controle
do versionamento)
git
commit –m “descrição” (permite
descrever cada commit)
git
commit –a –m “descrição” (cria
o commit sem add)
https://univirtus.uninter.com/ava/web/roa/ 16/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
git
log –p (mostra todos os
commits e alterações)
git
log –p -2 (mostra
somente os dois últimos commits)
git
log –stat (mostra
estatísticas)
git
log --pretty=online (ajusta
a apresentação do log em uma linha)
git
log --pretty=format “%h - %a, %ar : %s” (formatação do log)
git
log --since=2.days (mostra
o log dos dois últimos dias)
Para
remover arquivos que estão prontos para commit, mas foram adicionados
incorretamente,
git
reset HEAD arquivo
comando:
git
reset HEAD~1 (volta um
commit)
git
reset HEAD~1 --soft (remove
o commit mas mantém as alterações)
git
reset HEAD~1 --hard (exclui
o último commit)
no log de commits, e
informá-lo no seguinte comando:
git
checkout “código do commit”
https://univirtus.uninter.com/ava/web/roa/ 17/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
desenvolvedor pode
trabalhar em uma ou mais ramificações. Para apresentar a ramificação atual, que
por padrão será a ramificação master, por ainda não termos criado nenhuma, utilize
o seguinte
comando:
git
branch
git
checkout –b “nome da ramificação”
voltar
à ramificação principal (master) ou trocar para outras ramificações, utilize os
seguintes
comandos:
git
checkout “nome da ramificação (trocar
de ramificação)
Ao criarmos novas
ramificações, precisamos associá-las a ramificação master para que não
fiquem
isoladas no projeto. Para isso utilize o seguinte comando:
git
merge “nome da ramificação”
git
release “nome da ramificação” (associar
a ramificação na ordem em que ocorreram
os commits)
https://univirtus.uninter.com/ava/web/roa/ 18/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
O primeiro passo
necessário é realizar o cadastro gratuito acessando o endereço <https://github.co
m/>
(Acesso em: 30 jan. 2021).
cd
~/.ssh/ (abre a pasta
das chaves)
repositório para o projeto. Nosso próximo passo é gerar um repositório remoto desse
novo
repositório do GitHub em nosso Git local.
git
remote add origin “endereço do repositório no GitHub”
.git/config
(arquivo de configuração
do git)
comando:
git
push origin máster
seguintes comandos:
git
branch –a (mostra os
branches remotos)
https://univirtus.uninter.com/ava/web/roa/ 19/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
git
pull (verifica se todos
os arquivos estão atualizados)
git
checkout –b “nome da ramificação” origin/”nome da ramificação” (cria a ramificação
git
pull origin master (pega
as atualizações)
git
tag –l (mostra todas as tags)
git
push origin master --tags
denomina, em geral, o
processo de adaptação e otimização de um software já desenvolvido, bem
como a
correção de defeitos que ele possa ter. A manutenção é necessária para que um
produto de
software preserve sua qualidade ao longo do tempo, pois se isso não
for feito haverá uma
Nesse
sentido, Wazlawick (2013, p. 318) ainda aponta que uma vez desenvolvido, um
software
Falhas
são descobertas;
Requisitos
mudam;
Produtos
menos complexos, mais eficientes ou tecnologicamente mais avançados são
disponibilizados.
Tendo
essa perspectiva, torna-se imperativo que, simetricamente, para manter o valor
percebido
de um sistema:
Falhas
sejam corrigidas;
https://univirtus.uninter.com/ava/web/roa/ 20/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
Novos
requisitos sejam acomodados;
Sejam
buscadas simplicidade, eficiência e atualização tecnológica.
Parafraseando
Pressman (2011, p. 662), independentemente do domínio de aplicação, tamanho
ou
complexidade, o software continuará a evoluir com o tempo. No âmbito do
software, ocorrem
alterações quando:
a) São
corrigidos erros;
b) Quando
há adaptação a um novo ambiente;
c) Quando
o cliente solicita novas características ou funções e;
d) Quando
a aplicação passa por um processo de reengenharia para proporcionar
benefício
em um contexto moderno.
para
explicar a necessidade da evolução do software, conforme são apresentadas por
Pressman
(2011) e Wazlawick (2013).
1. Lei da
Mudança Contínua (1974): afirma que um sistema que é
efetivamente usado
2. Lei da
complexidade crescente (1974): expressa que à medida que um
programa
3. Lei da
autorregulação (1974): O processo de evolução do sistema é
autorregulado com
4. Lei da
conservação da estabilidade organizacional (1980): expressa
que a taxa média
efetiva de trabalho global em um sistema em evolução é
invariante no tempo, isto é, ela não
aumenta nem diminui.
https://univirtus.uninter.com/ava/web/roa/ 21/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
5. Lei da
conservação da familiaridade (1980): conforme um sistema evolui,
tudo o que
6. Lei do
crescimento contínuo (1980): estabelece que o conteúdo funcional de
um
sistema deve crescer continuamente para manter a satisfação do usuário.
7. Lei da
qualidade em declínio (1996): expressa que a qualidade de
um sistema vai
parecer diminuir com o tempo, a não ser que medidas rigorosas
sejam tomadas para mantê-lo
e adaptá-lo.
8. Lei do
sistema de realimentação (1996): estabelece que a evolução de
sistemas é um
processo multinível, multilaço e multiagente de realimentação,
devendo ser encarado dessa
Conforme
apresentado em Sommerville (2018, p. 246), a manutenção de software é o
processo
1. Correção
de defeitos;
2. Adaptação
ambiental;
3. Adição
de funcionalidade.
De
acordo com Sommerville (2018, p. 246-247):
CONSIDERAÇÕES
FINAIS
Nesta aula,
abordamos como tema principal a arquitetura de software. Iniciamos o conteúdo
https://univirtus.uninter.com/ava/web/roa/ 22/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
formatos, o projeto
conceitual, definido conforme a visão do cliente, normalmente de um modo
descritivo e explicativo, e o projeto técnico, elaborado a partir das
definições do projeto conceitual
pudemos
compreender que, dependendo da complexidade de um sistema, muitas vezes vários
padrões de arquitetura de software necessitam serem utilizados no mesmo projeto.
Essa necessidade
versionamento do projeto
de software, como também proporcionar o trabalho de forma
colaborativa. Em
conjunto estudamos o uso da plataforma GitHub para disponibilizar os arquivos
do
projeto.
para o
desenvolvimento do software, focando em estimativas para a definição de prazos,
número de
desenvolvedores e custos do projeto de software.
REFERÊNCIAS
https://univirtus.uninter.com/ava/web/roa/ 23/24
18/08/2021 UNINTER - ENGENHARIA DE SOFTWARE
PRESSMAN, R. S. Engenharia
de Software: uma abordagem profissional. 7. ed. Porto
Alegre:
AMGH, 2011.
SOMMERVILLE, I. Engenharia
de Software. 9. ed. São Paulo: Pearson, 2011.
SOMMERVILLE, I. Engenharia
de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018.
PFLEEGER, S. L. Engenharia
de Software: Teoria e Prática. 2. ed. São Paulo: Prentice
Hall, 2004.
WAZLAWICK, R. S. Engenharia
de Software: Conceitos e Práticas. São Paulo:
Elsevier, 2013.
https://univirtus.uninter.com/ava/web/roa/ 24/24