Aula 1
Aula 1
Aula 1
DESENVOLVIMENTO DE
SOFTWARES
AULA 1
CONVERSA INICIAL
Com certeza você já ouviu falar de software. Nós usamos algum software
provavelmente todos os dias. Se você utiliza um computador, a Smart TV ou um
celular, então você utiliza software.
Mas mesmo utilizando-o todos os dias, saberia definir o que ele é? O que
diferencia software de sistema? Ou, ainda, o que o diferencia de um programa?
A seguir, veremos algumas definições que o auxiliará a responder às
questões anteriores.
• No tópico 1, veremos sobre software, sistemas e programas.
• No tópico 2, veremos com mais detalhes os sistemas operacionais.
• No tópico 3, veremos sobre algoritmos e linguagens.
• No tópico 4, abordaremos sobre o jargão na área de TI.
• No tópico 5, ainda, veremos o ciclo de vida do desenvolvimento de
software, onde serão abordadas diferentes metodologias que são
frequentemente utilizadas.
2
• estruturas de dados que possibilitam aos programas manipular
informações adequadamente;
• informação descritiva, tanto na forma impressa quanto na virtual,
descrevendo a operação e o uso dos programas.
3
Devido à importância, falaremos mais adiante e com mais detalhes sobre
o Sistema Operacional.
Os softwares utilitários ou ferramentas de sistema são os que
acompanham o sistema operacional e o auxiliam nas suas tarefas (por exemplo,
gerenciamento de dispositivos, mídias e programas).
O software utilitário fornece ao usuário ferramentas para organizar os
discos, verificar a disponibilidade de memória e corrigir as falhas de
processamento. Costumamos dizer que são softwares úteis ao sistema
operacional, ou seja, que trabalham em função do sistema operacional.
São exemplos de utilitários: antivírus, compactadores, emuladores,
desfragmentadores, formatadores, backup.
4
exemplo temos as planilhas, o editor de texto, os navegadores (browsers), o
editor de imagem, entre outros.
A figura seguinte ilustra os ícones de vários softwares aplicativos.
5
Para abrir o gerenciador de tarefas no seu computador, você pode usar o
atalho do teclado: CTRL + SHIFT + ESC, ou, ainda, digitar gerenciador de tarefas
na barra de pesquisa do Windows. Também, é possível usar CTRL + ALT +DEL
e escolher a opção Gerenciador de Tarefas.
6
Figura 2 – SO como camada intermediária entre usuário e hardware
Usuário/aplicativo
Sistema operacional
Hardware
Crédito: Iamnee/shutterstock.
7
2.1 Sistemas tradutores
Figura 3 – Tradutor
media =
(nota1 +
nota2)/2;
if(media >
=7)
printf
(“Aprovado
\n”);
10000010011111111010101000111
10001110101010101010101011110
8
em linguagem de alto nível, fazemos referências às linguagens que utilizamos
para desenvolvimento de apps (aplicativos).
Existem, portanto, linguagens interpretadas e compiladas.
A diferença é que nos interpretadores o código é interpretado linha por
linha. Tome como exemplo um intérprete. Pode ser o intérprete de libras, ou
outro qualquer, que, enquanto falamos, ele traduz.
Já os compiladores traduzem o código todo de uma vez, gerando um .exe,
por exemplo. Como analogia temos a tradução de um livro, em que o tradutor
traduz todo o livro e ao final entrega-o traduzido.
Figura 4 – Interpretador
Figura 5 – Compilador
9
No tópico anterior, abordamos os softwares, programas e sistemas. Aqui,
iremos conhecer um pouco mais sobre os algoritmos e as linguagens de
programação.
3.1 Algoritmos
No tópico anterior, vimos algo dos algoritmos. Foi mencionado que podem
assumir que é algo parecido com a receita de bolo. A seguir, apresentamos uma
definição de algoritmo. Essa definição é bem simples e sucinta e descreve
perfeitamente o que ele é. Tal definição foi dada por Forbellone (2022, p. 3), em
um livro sobre lógica de programação bastante utilizado como referência:
“Algoritmo é uma sequência de passos que visa atingir um objetivo bem
definido”.
Nessa definição de algoritmo, uma sequência passo a passo visa atingir
um objetivo bem definido. O objetivo aqui é representar mais fielmente o
raciocínio envolvido na lógica de programação. Uma vez concebida uma
solução, pode ser traduzida para qualquer linguagem de programação.
Quem já teve Lógica de programação deve ter percebido que existe um
gap semântico muito grande entre lógica de programação e a lógica do dia a dia.
Se você ainda não teve Lógica de programação, quando tiver irá perceber esse
gap. Quando falamos em semântica na linguagem de programação, estamos
nos referindo ao conteúdo, ao significado.
Vamos ver primeiro um exemplo em português para entendermos sintaxe
e semântica. A sintaxe está relacionada com as regras, premissas, restrições.
De maneira simplificada, as regras que determinam o modo como as palavras
podem combinar-se para formar os enunciados definem a sintaxe. Tomemos
como exemplo a frase:
Se escrevêssemos:
(2 ] - /
Modo de preparo
11
Em uma caneca com capacidade superior a 350 ml, misture o achocolatado,
a farinha de trigo, o açúcar e o fermento em pó.
Acrescente o leite, o óleo e o ovo e misture
delicadamente até incorporar.
Coloque a caneca sobre um prato de sobremesa e leve
ao forno micro-ondas por 3 minutos em potência alta.
Sirva a seguir.
Crédito: TownFox/Shutterstock.
3.2 Linguagens
12
esse algoritmo para uma linguagem de programação. O programador é quem
profundamente conhece os detalhes da linguagem de programação que ele vai
desenvolver. Costumamos dizer que depois de feito um algoritmo, este pode ser
implementado em qualquer linguagem de programação.
A seguir, temos uma imagem esquematizando que, após desenvolvermos
os algoritmos, que representam a lógica de programação com a estrutura de
dados, basta implementar para uma linguagem de programação.
C++
C#
Java
Python
Algoritmos
Lógica de
Linguagem
programação
Estrutura
de dados
13
na tela a frase “olá mundo!”. Cada linguagem tem um comando próprio para
realizar essa tarefa.
Para imprimir uma frase na tela, em linguagem C, podemos fazer:
printf(“Olá Mundo!”);
System.out.print(“Olá Mundo!”);
Em linguagem Python:
print(“Olá Mundo!”)
//Se a média for igual ou maior que 7,o aluno foi aprovado,
if (media >= 7)
System.out.println("Aprovado");
//Se não, ele foi reprovado
14
else
System.out.println("Reprovado");
15
Mas ainda temos alguns acrônimos, palavras ou termos que são utilizados e
compreendidos apenas por quem trabalha na área de desenvolvimento. A seguir
são citados alguns termos utilizados na área, que são importantes para o
profissional de TI conhecer.
Front-end: esse termo está relacionado com desenvolvimento da parte
gráfica de uma aplicação web.
Back-end: está relacionado ao desenvolvimento no lado do servidor. Ou
seja, a programação que acontece no lado do servidor. Geralmente, o
profissional que trabalha com Back-end tem experiência em versionamento e
controle, deve ter, ainda, a habilidade para gerenciar o ambiente de
hospedagem, levando em consideração a acessibilidade e segurança.
Full-stack: o desenvolvedor full-stack é aquele que trabalha com ambas
as abordagens tanto da parte gráfica, quanto da parte do lado do servidor.
API: a Application Programming Interface (Interface de Programação de
Aplicativos) pode ser definida como um conjunto de rotinas e padrões de
programação que possuem o objetivo de acessar aplicativos de software ou
plataformas baseados na web. A API é uma interface utilizada por um programa
ou aplicação e não por um usuário.
Framework: é um conjunto de código de uma linguagem de programação
específica que auxilia no desenvolvimento de projetos de web ou de software.
Podemos pensar no framework como se fosse uma biblioteca de códigos com
funções já prontas. Na área de TI, também é comumente vista a definição como
arcabouço de código. Exemplo de frameworks são: Vue.js, Angular, Bootstrap e
React frameworks para desenvolvimento front-end. Spring boot e Laravel:
framework para aplicações web back-end.
A seguir temos logotipos do spring, angular, vue.js, react, laravel e
bootstrap, respectivamente.
16
auxilia e agiliza o processo de desenvolvimento. São exemplos de IDE: Pycharm,
Eclipse, Apache Netbeans, Visual Studio.
Híbridos: dizer que uma aplicação é híbrida implica falar que sua
implementação utiliza html, css e Javascript. As aplicações híbridas utilizam
frameworks ou ferramentas que permitem uma mesma base de código. A
aplicação híbrida é desenvolvida em uma única linguagem e distribuída para
várias plataformas.
Serviços: na área de desenvolvimento podem ser entendidos como
processos de software. O termo processo de software, nesse caso, não é no
sentido de conjunto de atividades que temos na engenharia de software, mas
em um programa processado pelo SO (Sistema Operacional).
Monolítico: é uma aplicação que roda com um único processo.
Microsserviço: é uma abordagem arquitetônica e organizacional do
desenvolvimento de software na qual o software consiste em pequenos serviços
independentes que se comunicam usando APIs bem definidas. Esses serviços
pertencem a pequenas equipes autossuficientes. Como características dos
microsserviços temos que eles são autônomos e especializados.
17
A próxima figura ilustra o conceito de aplicação monolítica e
microsserviços.
Crédito: Ashalatha/shutterstock.
18
Figura 9 – Independência de webservices em relação a linguagens de
programação
Crédito: Ashalatha/Shutterstock.
19
Git: é um sistema de controle de versão que gerencia as várias versões
no desenvolvimento de um documento. Criado por Linus Torvalds, a justificativa
para a escolha do nome é controversa, sendo que nenhuma delas foi desmentida
pelo autor. GIT, em inglês britânico, é uma gíria para cabeça dura, também pode
ser o acrônimo para "Global Information Tracker" ou, ainda, "Goddamn idiotic
truckload of sh*t" (é um xingamento, não iremos traduzir). O logo do GIT
representa a ramificação para desenvolvimento não linear.
20
desenvolvido. O ciclo de vida de um software indica as etapas que devem ser
cumpridas e a sequência para que o software seja desenvolvido.
Os modelos de processos trazem ordem ao caos existente na área de
desenvolvimento de software. O engenheiro de software deve adaptar um
modelo de processo às suas necessidades e, então, deve segui-lo. O processo
dá controle, estabilidade e organização ao desenvolvimento de software.
Segundo Sommerville (2019), quatro atividades são comuns a todos os
processos de software: especificação, desenvolvimento, validação e evolução.
Antes de explicar mais detalhadamente cada fase, para ficar fácil de
entender, podemos fazer uma analogia com a construção de uma casa. Essas
fases genéricas são semelhantes também às fases da construção de uma
moradia; a fase especificação, por exemplo, seria especificar com o contratante
como ele quer que a casa seja. Na fase de desenvolvimento, é realizada a
construção da moradia propriamente dita. Na fase de validação, é garantido que
a casa está sendo construída de acordo com o que o contratante solicitou. A fase
de evolução serve para manter a casa em boas condições, ou seja, evoluir para
atender às necessidades do contratante. É possível incluir: pintura,
troca/retirada/acréscimo de encanamento, troca/retirada/acréscimo de fiação,
conserto de problemas que surgirem após final da construção, construção de um
novo cômodo etc.
Entendido o que cada fase faz na construção da casa, vejamos essa
definição para o desenvolvimento de software.
Na fase de especificação de um software ocorre a definição do problema.
A funcionalidade e as restrições quanto às funções do software são definidas
aqui. Nessa fase, é feita uma reunião com o cliente para levantamento de
requisitos. Existem basicamente dois tipos de requisitos: os funcionais e os não
funcionais. Os primeiros dizem respeito ao que o software deve fazer, ou seja,
quais funções ele deve possuir. Já os não funcionais dizem respeito às restrições
do software.
Na etapa de desenvolvimento de software ocorre a codificação do
software de acordo com as especificações coletadas na fase anterior. Aqui,
também é feita a escolha da linguagem de programação que será utilizada para
implementação do sistema.
Na fase de validação o programa é analisado para garantir que atenda ao
que foi solicitado pelo cliente.
21
Na fase de evolução o software deve evoluir de acordo com a mudança
nas necessidades do cliente, ou seja, devem ser realizados ajustes caso o
software ou algum módulo necessite de alguma modificação.
22
Figura 10 – Modelo cascata (Waterfall)
O projeto de software
é implementado em
Verificação
unidades de programa
Manutenção
Sistema é instalado e
colocado em operação
24
Crédito: Henrik Kniberg.
5.4 Scrum
25
Figura 11 – Componentes do Scrum
•Scrum master
•Product owner
•Desenvolvedor
Papeis
Figura 12 – Sprints
Crédito: KPDMedia/Shutterstock.
26
Artefatos: no Scrum representam o trabalho feito para fornecer
transparência ao processo. São projetados para maximizar a transparência das
informações-chave para que todos no time recebam as informações relevantes
e tenham a mesma compreensão do que deve ser feito.
Como colocado anteriormente, o Scrum possui três artefatos: o product
backlog, o sprint backlog e o increment.
O Product Backlog é uma lista ordenada de tudo que é conhecidamente
necessário para fornecer o produto. É a única origem dos requisitos para
qualquer mudança a ser feita no produto. O product backlog é, então, uma lista
de produtos pendentes.
O Sprint backlog possui os itens do product Backlog selecionados para
a Sprint, com o plano para entregar o incremento do produto e atingir o objetivo
da Sprint. Possui também uma previsão do Time de Desenvolvimento sobre qual
funcionalidade estará no próximo incremento. O Sprint Backlog é um plano feito
por e para desenvolvedores. É uma imagem em tempo real altamente visível do
trabalho que os desenvolvedores planejam realizar durante o Sprint para atingir
o objetivo do Sprint.
O increment (incremento) é a soma de todos os itens do Product Backlog
completados durante a Sprint e o valor dos incrementos de todas as Sprints
anteriores.
Eventos: o Scrum prescreve alguns eventos formais para inspeção e
adaptação:
• Sprint;
• Sprint Planning (Planejamento da Sprint);
• Daily Scrum (Reunião diária);
• Sprint Review (Revisão da Sprint); e
• Sprint Retrospective (Retrospectiva da Sprint).
• Coragem: o time Scrum precisa ter coragem para fazer a coisa certa e
trabalhar em problemas difíceis.
• Foco: todos focam no trabalho da Sprint e nos objetivos do time Scrum.
• Comprometimento: as pessoas se comprometem pessoalmente em
alcançar os objetivos do time scrum.
• Respeito: os membros do time scrum respeitam uns aos outros para
serem pessoas capazes e independentes.
• Abertura: o time scrum e seus stakeholders concordam em estarem
abertos a todo o trabalho e aos desafios com a execução dos trabalhos.
28
O Scrum master é o responsável por promover e suportar o Scrum como
definido no Guia Scrum. O Scrum Master faz isso ajudando a todos a
entenderem a teoria, as práticas, as regras e os valores do Scrum.
O Time de Desenvolvimento consiste em profissionais que realizam o
trabalho de entregar um incremento potencialmente liberável do produto ao final
de cada Sprint.
A figura a seguir representa o ciclo do Scrum.
Fonte: Scrum.org.
FINALIZANDO
29
REFERÊNCIAS
30