Buscar

E-book 2 - Paradídmas de Linguagens de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 67 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PARADIGMAS DE 
LINGUAGENS DE 
PROGRAMAÇÃO
E-book 2
Bruno Zolotareff dos Santos
Neste E-Book:
INTRODUÇÃO ����������������������������������������������4
PROGRAMAÇÃO IMPERATIVA ��������������� 5
TIPOS COMPOSTOS ����������������������������������10
PROGRAMAÇÃO ORIENTADA A 
OBJETOS �������������������������������������������������������11
PROGRAMAÇÃO FUNCIONAL �������������� 14
PROGRAMAÇÃO IMPERATIVA VS 
PROGRAMAÇÃO DECLARATIVA ����������16
PROGRAMAÇÃO LÓGICA ������������������������17
PROGRAMAÇÃO ORIENTADA A 
EVENTOS ������������������������������������������������������18
PROGRAMAÇÃO CONCORRENTE �������20
GERENCIAMENTO DE PROJETOS 
DE SOFTWARE �������������������������������������������21
PROCESSOS DE PROJETOS ������������������ 25
PROCESSO DE GERÊNCIA DE 
PROJETOS ���������������������������������������������������26
ÁREAS DE CONHECIMENTO DO 
PMBOK ���������������������������������������������������������28
2
MÉTODO DE MELHORIA CONTÍNUA 
PDCA ������������������������������������������������������������29
PROJETO DE SOFTWARE E 
QUALIDADE ASSEGURADA ������������������ 33
DESENVOLVIMENTO DE 
SOFTWARE BASEADO EM 
COMPONENTES ����������������������������������������36
INTERFACES DE COMPONENTES �������38
ABSTRAÇÃO DE COMPONENTES ������ 40
MODELOS GENÉRICO DE 
PROCESSO DE SOFTWARE 
BASEADO EM COMPONENTES �������������41
IMPACTO DAS LINGUAGENS DE 
PROGRAMAÇÃO NA ENGENHARIA 
DE SOFTWARE ������������������������������������������47
CICLO DE VIDA �������������������������������������������51
FLUXO DE TRABALHO ��������������������������� 53
GESTÃO DE PROJETOS���������������������������56
CONSIDERAÇÕES FINAIS ����������������������59
SÍNTESE �������������������������������������������������������60
3
INTRODUÇÃO
Desde o início, a programação tem passado por vá-
rias modificações e adaptações de acordo com as 
necessidades industriais, comerciais e científicas.
A evolução das linguagens gerou uma vasta esco-
lha de linguagens a serem utilizadas em projetos 
de software. Entretanto, com o avanço da tecnolo-
gia na área de linguagens de programação, muitos 
problemas de projetos têm aparecido em relação 
ao software.
Os projetos de software começaram a exigir um alto 
nível de qualidade, assim, padrões de software e me-
todologias foram surgindo baseados em melhoria 
contínua. Nesse sentido, a engenharia de software 
surgiu dada a preocupação com a qualidade do sof-
tware e a padronização dos modelos e processos 
de desenvolvimento. Com isso, melhoraram-se as 
técnicas de programação e o entendimento dos pa-
radigmas em aplicações de acordo com os objetivos.
Neste módulo, estudaremos conceitos de aplica-
ções com paradigmas de programação, proje-
tos de software e o ciclo de vida no processo de 
desenvolvimento.
4
PROGRAMAÇÃO 
IMPERATIVA
Em todas as linguagens de programação imperativas, um 
programa é entendido como uma sequência linear de 
instruções que o computador processa na sequência de-
finida. O microcódigo especifica, no nível do processador, 
como o computador deve lidar com quais dados. Dessa 
forma, os comandos são usados para esse propósito, ou 
seja, para manipular o estado das áreas de memória que 
contêm dados para processamento ou saída. 
Esses dados geralmente são armazenados em variáveis 
para que possam mudar na sequência do programa. A 
ordem dos comandos determina a sequência de tempo 
no programa. Para implementar programas responsivos, 
há instruções de salto que alteram dinamicamente a 
sequência de instruções ordenada uma vez.
De acordo com o paradigma imperativo, uma solução é 
dada: Quais passos individuais devem ser tomados um 
após o outro? Como as variáveis devem ser alteradas de 
modo que o resultado desejado saia no final?
Em primeiro plano está a pergunta “como?” Programas 
imperativos são sequências ramificadas de instruções, 
as quais contêm atribuições que, quando executadas, 
alteram valores de variáveis e, portanto, o estado do 
programa.
Os ramos no programa são decididos por condições 
através de variáveis. As funções parametrizadas são 
5
usadas para abstrair os cálculos e chamá-los em di-
ferentes pontos do programa. Por exemplo, considere 
uma função que resume os elementos de uma lista. 
Está escrito na linguagem C:
int ListSum (IntList l) {
  int sum = 0;
  while (l != NULL)
   { sum = sum + l->val; l = l->next; }
  return sum;
}
Aqui, uma lista é representada por uma referência a um 
par de valores: um val inteiro e uma referência à lista 
restante. 
As atribuições no corpo do loop while adicionam o 
número val do elemento list de l à soma da variável e 
definem l para o próximo elemento. Essas instruções 
são iteradas desde que eu não aponte para a lista vazia. 
Em seguida, o valor da soma variável é retornado como 
resultado da chamada da função.
O paradigma imperativo também é baseado na formu-
lação clássica de algoritmos que especificam sequên-
cias ramificadas de etapas que executam cálculos 
e atribuições a variáveis.
O princípio estrutural abstrato da calculadora de von 
Neumann também corresponde ao paradigma im-
perativo: um processador executa uma sequência 
6
ramificada de instruções que alteram os dados na 
memória.
A programação imperativa possui três aspectos ele-
mentares: tipos, variáveis e valores. Esses elementos 
interagem com a composição do paradigma impera-
tivo de programação. Visando a entendê-los melhor, 
vamos analisar o que cada um deles significa:
 ● Tipos: As regras de classificação das informações 
são agrupadas conforme seu tipo, e o tratamento 
das informações se dá de maneira categorizada de 
acordo com o domínio, senão haveria grandes dificul-
dades para tratar as informações fora do escopo. Se 
não fosse esse tipo de agrupamento, cada informa-
ção teria de ser tratada individualmente. Assim, os 
tipos podem ser três: primitivo, composto e recursivo.
 ● Variáveis: Os atributos são definidos dentro do 
escopo para a manipulação das informações, conhe-
cidas como variáveis de programação; elas definem 
um valor temporário alocado na memória do compu-
tador. Há diferentes tipos de variáveis dependendo 
da linguagem escolhida.
 ● Valores: Os valores das variáveis são atribuídos 
segundo o tipo declarado no escopo da linguagem 
de programação, as informações podem ser, por 
exemplo, nome de objetos, data de aniversário, peso 
de algo etc.
Um conceito na programação de tipos
Conforme abordado anteriormente, há tipos na pro-
gramação imperativa, que são analisados a seguir:
7
 ● Tipo Primitivo: É conhecido como atômico, sem 
subdivisão, possibilitando que cada linguagem de 
programação possa tratar os conceitos de seus do-
mínios diferentemente, pois há arquitetura e supor-
te para aplicações com objetivos diferenciados. A 
maioria utiliza em seus atributos os tipos declarados 
como boolean, int ou integer, real, char e enum.
Existem linguagens cujos objetivos são voltados à 
área científica, como Fortran e C; ao passo que ou-
tras são criadas para fins comerciais, como o Cobol. 
Salientamos, porém, que uma linguagem científica 
não é utilizada apenas em experimentos com fins 
acadêmicos, a aplicação comercial também utiliza 
essas linguagens de programação.
Saiba mais
Saiba mais sobre linguagens como o Fortran têm 
sido utilizadas na programação em foguetes, ao 
ler Desenvolvimento de um microfoguete para 
fotografias aéreas de pequeno formato (LOURE-
DA, 2006), disponível em: http://www.bibl.ita.br/
xiiencita/mec_09.pdf. Acesso em: 03 ago. 2019.
Esse tipo de linguagem é utilizado principalmente 
em aplicações matemáticas com tipos numéricos de 
precisão, como o Fortran. Tais linguagens trabalham 
basicamente com os tipos: inteiro e ponto flutuante.
Não numéricos: Conhecidos principalmente no uso 
de estado verdadeiro ou falso, 0 e 1 (Boolean). 
8
http://www.bibl.ita.br/xiiencita/mec_09.pdf
http://www.bibl.ita.br/xiiencita/mec_09.pdf
Caracteres com agrupamentos também são supor-
tados, por exemplo ‘A’, ’U’, ‘a’...’u’. Além disso, utiliza-
-se um sistemade gerenciamento das informações 
das variáveis.
 ● Alocação dinâmica: Os dados não precisam ser 
declarados sequencialmente no espaço da memó-
ria, visto que a alocação ou desolação de blocos de 
memória pode ser feita automaticamente durante a 
execução. Nesse caso, não é preciso inserir infor-
mações de modo ordenado. A C é um exemplo de 
linguagem que utiliza esse tipo de alocação.
 ● Enumeração: Este tipo oferece uma forma de agru-
pamento de informações, sendo conhecido como 
constante de enumeração. Segue um exemplo em 
Java:
Class enum dias {Dom, Seg, Terç, Qua, Qui, Sex, 
Sab;}
9
TIPOS COMPOSTOS
É uma composição de diferentes tipos, primitivos ou 
não. Para entender melhor o procedimento deste tipo, 
vamos colocar um exemplo em C dessa composição:
enum QuantidadeProduto { 1,2,3,4,5,6,7,8,9,10}
enum CaixasProduto{caixa1, caixa2, caixa3, cai-
xa4, caixa5}
struct DadosP{
 QuantidadeProduto q;
 CaixasProduto p
}
10
PROGRAMAÇÃO 
ORIENTADA A 
OBJETOS
A programação orientada a objetos é um paradigma 
desenvolvido com o princípio de trocar informações 
entre objetos. Teve início com a linguagem Simula 
67, que mais tarde foi aperfeiçoada com o Smalltalk, 
considerada por muitos uma linguagem puramente 
orientada a objetos.
Com o mesmo conceito, a linguagem C++ possui os 
elementos da orientação a objetos, mas não é uma 
linguagem puramente orientada a objetos. Trata-se 
de uma linguagem híbrida, com a qual é possível 
utilizar diferentes paradigmas.
Entretanto, a programação orientada a objetos ficou 
mais conhecida com a linguagem Java por muitos 
motivos, especialmente sua portabilidade, escalabi-
lidade e uso em aplicativo móveis e na Web.
A programação orientada a objetos tem alguns pila-
res: herança, polimorfismo, encapsulamento e abstra-
ção. Praticamente, são utilizados classes e métodos 
com essa programação, a saber:
 ● Herança: considerada a propriedade mais impor-
tante da programação orientada a objeto, a herança 
funciona como uma hierarquia das classes, ou seja, 
11
uma classe herda as propriedades de outra, aumen-
tando assim a reutilização de código.
 ● Polimorfismo: é uma classe que pode ter mais que 
uma característica, por exemplo, uma classe com 
o nome anfíbio herda as características de outras 
classes, como carro e barco. Possui a herança das 
propriedades.
Podcast 1 
 ● Encapsulamento: os atributos privados ou pro-
tegidos são acessados com os getters e setters, 
protegendo o estado das variáveis, em que o en-
capsulamento é feito na construção do objeto ou 
instância da classe.
 ● Abstração: utilizada como uma classe genérica, 
é conhecida como uma superclasse ou classe abs-
trata herdada por classes concretas. Utiliza-se para 
definição de entidades do mundo real.
As classes em POO têm atributos, métodos e heran-
ça. Recomenda-se que a herança seja feita por uma 
classe abstrata, como demonstrado na Tabela 1:
12
https://famonline.instructure.com/files/142261/download?download_frd=1
Classe Abstrata Classe Concreta Classe Principal
public abstract 
class Auto {
private String 
marca;
private int ano;
public void setMar-
ca(String marca){
this.marca = marca;
}
public String get-
Marca(){
 return marca;
}
public void setA-
no(int ano){
this.ano = ano;
}public int getA-
no(){
 return ano;
}
public class 
Carro extens 
Auto {
public void car-
ro(){
this.
setMarca(“VW”);
this.
setAno(2019);
System.out.printl-
n(“O carro é um: “ 
+ this.getMarca() 
+ “\n O ano do 
carro é: ” + this.
getAno();
}
}
public class 
Principal{
public static void 
main(String[] 
args){
Carro car = new 
Carro();
car.carro();
}
}
Tabela 1: Classe abstrata, concreta e principal. Fonte: Elaboração 
própria.
13
PROGRAMAÇÃO 
FUNCIONAL
Conhecida como um tipo de programação que utiliza 
funções matemáticas sem mudança de estado ou 
imutabilidade, a programação funcional é utilizada 
principalmente para multiprocessamento e aplica-
ções matemáticas recursivas. Sua programação re-
aliza-se com funções que chamam outras funções, 
conhecidas também como funções de alta ordem. 
Na tabela 2, temos alguns dos princípios desse tipo 
de programação:
Programação 
Imperativa
versus
Declarativa
São dois paradigmas de 
programação 
Mutable state São funções que dificilmente 
modificam seus valores, utili-
zam funções matemáticas e 
recursividade.
Funções como first-
-class values
São classes que podem ser 
utilizadas para manipular valo-
res, possuem uma estrutura de 
dados apontada a funções.
Higher-order functions É uma função que recebe outra 
função como argumento, tra-
duzida como função de ordem 
maior.
Side-effect-Free 
functions
É um tipo de função que retorna 
os mesmos valores de entrada.
14
Lambdas e Closures São semelhantes a classes 
internas anônimas que podem 
ou não retornar valores. 
Recursividade É uma função que chama a si 
mesmo repetidamente, até a 
condição de parada.
Lazy vs Eager Evalution O valor do cálculo já é conhe-
cido antes de fazer alguma 
requisição.
Gluing functions É um encadeamento de funções.
Tabela 2: Princípios da programação funcional. Fonte: Elaboração 
própria.
Apesar de haver várias linguagens de programação 
funcionais (Ruby, Lisp, Scala etc.), isso não quer dizer 
que uma única linguagem tenha todos os princípios 
mencionados anteriormente. A programação fun-
cional, mesmo sendo um conceito antigo, é cada 
vez mais utilizada em empresas com linguagens 
como Scala, Google Guava e versões mais recente 
do Java 8.
15
PROGRAMAÇÃO IMPERATIVA 
VS PROGRAMAÇÃO 
DECLARATIVA
São dois os paradigmas da programação. Na impe-
rativa, declaramos os passos para o compilador que 
desejamos que sejam executados; já na declarativa, 
colocamos comportamentos e regras (Tabela 3):
Programação imperativa Programação declarativa
for(int i=0;i<30;++i){
if(i % 2 ==0){
System.out.println(i + “é 
ainda”);
}
}
UnaryPredicate<Integer> 
isEven = new 
UnaryPredicate<Integer>() {
 public boolean test(Integer 
number) {
 return number % 2 == 0;
 } };
IntegerRange zeroToTen = new 
IntegerRange(0, 11);
for(Integer number : zeroToTen.
toCollection()) {
 if ( isEven.test(number) ) {
 System.out.println(number + “ 
is even”);
 } }
Tabela 3: Programação imperativa e Programação declarativa.Fonte: 
Elaboração própria.
A programação funcional é declarativa, pois não há 
muitas mudanças na criação das funções. Quando 
se altera algo, isso é feito com aplicação de recur-
sividade. Entretanto, não há preocupação de alterar 
os valores internamente, ou seja, o termo mutable 
data se refere à estabilidade dos dados internos da 
função.
16
PROGRAMAÇÃO 
LÓGICA
A programação lógica é um tipo de linguagem volta-
do à lógica matemática. A primeira desse tipo foi o 
Planner, que é uma linguagem orientada a padrões 
voltados aos objetivos, além de ser bastante utili-
zada para o uso da Inteligência Artificial.
Desde o Planner, houve uma evolução de lingua-
gens, entre as quais estão QA-4, QLISP, Mercury, 
Visual Prolog, Oz e Fill.
Para entender o funcionamento de uma linguagem 
lógica, analise a Figura 1, na qual se pode observar o 
funcionamento das regras de acordo com a lógica:
Figura 1: Exemplo de uso de programação lógica. Fonte: Adaptada 
de Álvares (s. d.).
17
PROGRAMAÇÃO 
ORIENTADA A 
EVENTOS
Há pouco, estudamos que o modelo imperativo deter-
mina a ordem de entrada dos dados. Diferentemente, 
as programações orientadas a eventos não contro-
lam a sequência dos eventos de entrada, bem como 
são direcionadas a reagir a qualquer sequência ra-
zoável de eventos.
Esse tipo de paradigma utiliza laços de repetição de 
eventos, que recebem repetidamente a informação 
no processamento em que é disparada a resposta 
de acordo com o evento. O que determina a entrada 
são os eventos que envolve as funções. A seguir, 
temos alguns exemplos relacionados a eventos em 
programação:
 ● Clicar em botão com o mouse.
 ● Escolher uma opção no menu.
 ● Escrever em uma caixa de texto.
 ● Movimento de mouse.
Na programação em Java, os tipos de eventosão 
definidos pelas subclasses da classe java.Awt.Event. 
Esses eventos são detectados pela classe que im-
plementam a interface Listener (ouvinte), e para 
responder aos eventos sobre os métodos Handlers 
(manipuladores).
18
Os Handlers são implementados no Java dentro das 
classes Listeners, como na Figura 2:
Figura 2: Exemplo de evento no Java.Fonte: Adaptada de Cáceres 
(s. d., p. 8).
19
PROGRAMAÇÃO 
CONCORRENTE
A programação concorrente é um tipo de paradigma da 
programação que realiza a execução concorrente, ou 
seja, de maneira simultânea. A programação paralela 
ou multithreading está associada à linha de execução 
na mesma função.
Em Java, o thread é utilizado com o pacote java.lang. 
Na sequência, estudaremos um código em Java com 
threads para gerar PDF e barra de progresso. O exemplo 
é uma representação da compilação de threading, visto 
que, na implementação, a intenção é gerar um arquivo 
PDF e uma barra de progresso (Tabela 4):
Classe e métodos Implementação
public class GeraPDF imple-
ments Runnable
 {
 public void rodar () {
 // lógica para gerar o 
pdf...
 }
}
public class BarraDeProgresso 
implements Runnable {
 public void rodar () {
 // mostra barra de pro-
gresso e vai atualizando ela...
 }
}
public class MeuPrograma {
 public static void main (String[] 
args) {
 GeraPDF gerapdf = new 
GeraPDF();
 Thread threadDoPdf = new 
Thread(gerapdf);
 threadDoPdf.start();
 BarraDeProgresso 
barraDeProgresso = new 
BarraDeProgresso();
 Thread threadDaBarra = new 
Thread(barraDeProgresso);
 threadDaBarra.start();
 }
}
Tabela 4: Exemplo do uso de threading.Fonte: Adaptada de Caelum 
(s. d.).
20
GERENCIAMENTO 
DE PROJETOS DE 
SOFTWARE
Um projeto é um empreendimento com caracterís-
ticas próprias que tem princípio e fim; é conduzido 
por pessoas e visa a atingir as metas estabelecidas 
dentro dos parâmetros de prazo, custo e qualidade 
(PMBOK, 2017). Trata-se de um empreendimento 
temporário, ou seja, um projeto que tem um ponto 
definido de início e fim, cujo objetivo é criar um pro-
duto ou serviço distinto e único no sentido de que o 
produto do projeto possa se diferenciar de outros.
Gerenciar consiste em “executar atividades e tarefas 
que têm como propósito planejar e controlar ativi-
dades de outras pessoas para atingir objetivos que 
não podem ser alcançados caso as pessoas atuem 
por conta própria” (KOONTZ; O´DONNEL; WEINRICH, 
2002).
A gerência é um dos aspectos mais crítico em pro-
jetos, pois sua ausência demonstra resultados não 
favoráveis para nenhuma organização que esteja 
executando ou planejando um projeto. A aplicação de 
conhecimentos, habilidades, ferramentas e técnicas 
em projetos visa a atingir ou até mesmo exceder às 
necessidades e expectativas dos clientes e demais 
partes interessadas do projeto (PMBOK, 2017).
A gerência de projetos envolve muitas decisões:
21
 ● Escopo, tempo, custo e qualidade.
 ● Diferentes necessidades e expectativas dos clien-
tes e partes interessadas.
 ● Requisitos identificados (necessidades) e não iden-
tificados (expectativas).
Em geral, os projetos são gerenciados a partir de 
metodologias já utilizadas pelas empresas; não 
há um único modo de gerenciar, e sim melhores 
caminhos a seguir baseados em projetos anteriores. 
Sendo assim, os projetos de software possuem uma par-
ticularidade: o primeiro passo para entender é que, mui-
tas vezes, os projetos de software são caros e, às vezes, 
envolvem riscos às pessoas.
É muito grande o risco de projetos de software darem 
errado, por esse motivo alguns guias e metodologias fo-
ram criados com a finalidade de ajudarem esse processo 
de desenvolvimento de software.
Um dos principais guias de gerenciamento de projeto 
é o Project Management Body of Knowledge (PMBOK), 
ou Corpo de conhecimento em Gerência de Projetos. 
Trata-se de um padrão internacional reconhecido pelas 
instituições IEEE e ANSI.
A primeira versão do PMBOK foi publicada pelo Project 
Management Institute (PMI), ou Instituto de Gerência de 
Projeto, em 1987. Fundado em 1969, o PMI tinha como 
objetivo identificar as práticas de gerência em projetos.
Apesar de esta disciplina não ser voltada ao 
Gerenciamento de Projetos, deve-se considerar o 
22
desenvolvimento de softwares um projeto como ou-
tro qualquer, mas com detalhes de engenharia que 
utilizam muitas normas, técnicas e metodologias.
O PMBOK, para muitos, é o principal guia de projetos, 
por isso estudaremos mais sobre ele, abordando os 
sus detalhes e técnicas. Para projetos de software, 
foram lançadas algumas metodologias, que conhe-
ceremos em breve.
Para auxiliar esse processo de software, metodologias 
foram construídas. Nos Estados Unidos da América, foi 
elaborado o Capability Maturity Model (CMM), e depois 
modelos mais atualizados, como o People-CMM e o 
Capability Maturity Model Integration (CMMI).
Na Europa, há um modelo semelhante ao CMMI dos 
Estados Unidos da América. O modelo é reconhecido 
como uma norma ISO/IEC 12207 e evoluiu para o ISO/
IEC 15504. Além desses métodos e normas, há outros 
que são utilizados em Projetos de Software.
O CMMI foi elaborado principalmente pelas forças arma-
das dos Estados Unidos junto com a National Aeronautics 
and Space Administration (Nasa). Na atualidade, muitos 
se preocupam com a Qualidade de Software para os pro-
jetos. Tal preocupação surge principalmente com o ad-
vento da internet, pois a área de Qualidade Assegurada 
é uma das mais importantes em Projetos de Software.
Certamente, você já deve ter ouvido falar da área da 
qualidade e, no tocante a softwares, não é diferente. 
Conhecida como Quality Assurance (QA), ou Qualidade 
23
Assegurada, é algo de grande importância para projetos 
internacionais.
No Brasil, a Qualidade de Software é utilizada sobretudo 
em Projetos de Software de grande porte, de âmbito 
internacional com inúmeras exigências. Provavelmente, 
você já ouviu falar de testes de Software, uma vez que 
essa área faz parte da Qualidade Assegurada.
Aqui, uma norma que está sendo muito recomendada é 
a ISO/IEC 27000, referente à segurança da informação. É 
uma norma que ainda está em construção. Não se preo-
cupe, há diversas normas e métodos para você conhecer 
e aplicar em Projetos de Software. Há um guia especial 
para ser utilizado em software, o Software Engineering 
Body of Knowledge (SWEBOK), ou Corpo de conhecimento 
em engenharia de software.
Você conhecerá um pouco sobre tais serviços voltados 
à tecnologia da informação, conhecida como ITIL e ISO/
IEC 2000.
Há uma família de ISOs para se abordar,mas estudaremos 
as mais utilizadas em Projetos de Software. Você deve ter 
percebido que a Engenharia de Software está envolvida 
em todo o projeto que envolva software.
Agora, você verá que os projetos de software e mode-
los adotados surgiram dos primeiros modelos citados 
no PMBOK. Por isso, abordaremos como os primeiros 
modelos foram elaborados.
Podcast 2 
24
https://famonline.instructure.com/files/142264/download?download_frd=1
PROCESSOS DE 
PROJETOS
Segundo o Project Management Body of Knowledge 
(PMBOK, 2017), um processo é uma série de ações 
que geram resultados. Os processos dos projetos são 
realizados por pessoas e normalmente se enquadram 
em duas categorias:
 ● Processos Orientados ao Produto, especificação 
e criação dos produtos do projeto.
 ● Processos da Gerência de Projeto, que relatam 
a descrição, a organização e o trabalho do projeto.
25
PROCESSO DE 
GERÊNCIA DE 
PROJETOS
O processo de gerência de projetos é semelhante 
ao Plan, Do, Check, Act (PDCA), ou Planejar, Fazer, 
Checar e Agir, que segue o mesmo conceito de con-
tinuidade e fases baseado no ciclo. Na Tabela 5, ob-
servamos o funcionamento do processo de gerência 
de projetos do PMBOK.
SAIBA MAIS
Saiba mais sobre o Ciclo PDCA, visitando ht-
tps://www.siteware.com.br/metodologias/
como-fazer-pdca-passo-a-passo/. 
 Processos da Gerência de Projetos
Processo de 
InicializaçãoReconhecer que um projeto 
ou uma fase deve começar 
e se comprometer com sua 
execução.
Processo de 
Planejamento
Planejar e manter um esquema 
de trabalho viável para atingir 
aqueles objetivos de negócio 
que determinaram a existência 
do projeto.
26
https://www.siteware.com.br/metodologias/como-fazer-pdca-passo-a-passo/
https://www.siteware.com.br/metodologias/como-fazer-pdca-passo-a-passo/
https://www.siteware.com.br/metodologias/como-fazer-pdca-passo-a-passo/
 Processos da Gerência de Projetos
Processo de Execução Coordenar pessoas e outros 
recursos para realizar o que foi 
planejado.
Processo de Controle Assegurar que os objetivos do 
projeto estão sendo atingidos, 
através da monitoração e da 
avaliação do seu progresso, 
tomando ações corretivas 
quando necessárias.
Processo de Finalização Formalizar a aceitação do 
projeto ou a fase e fazer o 
seu encerramento de forma 
organizada.
Tabela 5: Cinco fases do processo de gerência do projeto. Fonte: 
PMBOK (2017).
27
ÁREAS DE 
CONHECIMENTO DO 
PMBOK
O manual do instituto PMI é organizado em áreas de co-
nhecimento, o PMBOK (2017) descreve cada uma dessas 
áreas através de processos, pois as áreas de conhecimen-
to se referem a um aspecto a ser considerado dentro da 
gerência de projetos, em geral dividida em uma maneira 
clara de entender.
O PMBOK é dividido em dez áreas de conhecimento e, 
no final do manual, há um glossário que descreve a 
função citada nos capítulos abordados (Tabela 6).
Áreas de Conhecimento do PMBOK
Qualidade Recursos 
Humanos
Escopo
Partes 
Interessadas
Aquisições Integração Comunicações
Custo Riscos Tempo
Tabela 6: As dez áreas do conhecimento. Fonte: Adaptada de PMBOK 
(2017).
28
MÉTODO DE 
MELHORIA 
CONTÍNUA PDCA
O método de melhoria contínua conhecido como Plan, 
Do, Check, Act, ou simplesmente PDCA, é utilizado por 
muitas corporações em todo o mundo. Assim, o método 
é muito útil em diversas áreas e tem sido adaptado 
de acordo com a necessidade da aplicação no desenvol-
vimento de algum projeto.
O conceito do método de melhorias PDCA foi original-
mente desenvolvido na década de 1930 pelo cientista 
norte-americano Walter A. Shewhart e aperfeiçoado por 
William Edwards Deming para o ciclo PDCA de controle 
estatístico do processo, que pode ser repetido continua-
mente sobre qualquer processo ou problema.
As etapas do ciclo PDCA são interligadas com a finalidade 
de obter melhores resultados. Dessa forma, o planeja-
mento tem controle de outras etapas do processo do 
ciclo de melhoria contínua (SOUZA; GOMES; SOARES; 
CONCILIO, 2019). No PMBOK, pode-se verificar o ciclo 
do PDCA adaptado em cinco fases nos processos 
em projetos (Figura 3):
29
ETAPAS DO CLICO
Processos de 
Iniciação
Processos de 
Planejamento
Processos de 
Execução
Processos de 
Controle
Processos de 
Encerramento
P
A
D
C
A
Act
C
Check
P
Plan
D
Do
Figura 3: Etapas do ciclo de vida de processo. Fonte: PMBOK (2017).
No Manual de Qualidade Assegurada de Software, 
(SCHULMEYER, 2007, p. 70-73), relata-se que um 
paço importante é a utilização do ciclo PDCA em 
projetos de software. Weinstein e Vasovski (2004) 
definem cada etapa do ciclo PDCA baseados no mo-
delo de Deming:
Módulo Plan (Planejar):
 ● Plan – Identificação dos problemas: 
 � Identificar os problemas a serem examinados.
 � Identificar um problema específico para entendê-
-lo melhor.
 � Definir as metas mensuráveis e realizáveis.
30
 � Identificar os interessados e desenvolver canais 
de comunicação.
 ● Plan – Análise de problemas:
 � Dividir o sistema global em processos individuais 
no mapa do processo.
 � Reunir potenciais pela causa do problema.
 � Coletar dados e identificar a raiz do problema.
 � Formular hipóteses.
 � Confirmar e rever o problema principal 
identificado.
Módulo Do (Executar):
 ● Do – Desenvolver / Implementar soluções:
 � Estabelecer critérios de sucesso experimentais.
 � Delineamento experimental para testar hipóteses.
 � Obter a aprovação das partes interessadas e o 
apoio para a solução escolhida.
 � Implementar experimento / solução em uma base 
experimental ou piloto.
Módulo Check (Verificar): 
 ● Check – Avaliar os resultados:
 ● Reunir / analisar dados sobre a solução.
 ● Validar a hipótese.
 ● Check – Atingir o objetivo pretendido:
 ● Se SIM, ir para agir.
31
 ● Se não, ir para planejar, hipótese revise / declaração 
do problema.
Módulo Act (Atuar):
 ● Act – Implementar a solução de escala completa 
(e aproveitar as novas oportunidades):
 � Identificar as mudanças sistêmicas e necessida-
des de formação para a plena aplicação.
 � Planejar o monitoramento contínuo da solução 
melhoria contínuo.
 � Procurar outras oportunidades de melhoria.
32
PROJETO DE SOFTWARE 
E QUALIDADE 
ASSEGURADA
Ao desenvolver projetos, a segurança faz parte da 
qualidade do software, o que envolve fazer testes 
e o ciclo de vida. O PDCA faz parte do processo de 
maturidade na elaboração de software.
A segurança do software em relação à sua qualidade 
está ligada a cada nível de maturidade descrito em 
modelos de referência, dentre eles citamos: 
 ● ISO/IEC 15504, Capability Maturity Model – 
Integration (CMMI) e o modelo brasileiro MPS.BR.
A qualidade de software é algo que se aplica no processo 
em que se definem os requisitos, utilizando métricas de 
melhoramento contínuo. Ainda, realizar as atividades 
de segurança da qualidade em cada escopo, que estão 
relacionadas ao projeto (PRESSMAN; MAXIM, 2016).
A qualidade de software contém uma lista de requisi-
tos, a saber: funcionalidade, confiabilidade, facilidade 
de uso, economia e segurança de uso. Em qualida-
de extra: flexibilidade, manutenibilidade, adaptável, 
clareza, documentação e iteração em melhorias 
(SWEBOK, s. d.).
Sendo assim, a qualidade de software pode ser definida 
segundo os procedimentos das normas citadas anterior-
mente: ISO/IEC 9126-1, ISO/IEC 12207, ISO/IEC 15504, 
ISO/IEC 20000 e ISO/IEC 27000. Entretanto, cada projeto 
33
possui seus próprios requisitos e políticas de qualidade 
e segurança do software.
O projeto de software deve, então, ser visto como uma in-
tegração de requisitos e procedimentos que contenham 
as melhores práticas da engenharia de software a fim de 
garantirem a qualidade de acordo com as necessidades 
do cliente (PRESSMAN; MAXIM, 2016).
A construção de um produto de software é um projeto 
que demanda diversas áreas do conhecimento a serem 
aplicadas (PMBOK, 2017). No entanto, os procedimentos 
descritos na norma ISO/IEC 15504 descrevem os níveis 
de maturidade de um projeto e como cada processo 
de software é realizado conforme o ciclo de vida e as 
áreas de conhecimento de um projeto (BALDASSARRE; 
PIATTINI; PINO; VISAGGIO, 2009).
Já o guia SWEBOK especifica e detalha as melhores prá-
ticas da engenharia de software para o processo de de-
senvolvimento de software, dividindo em dez áreas do 
conhecimento (SWEBOK, s. d.): 
 ● Requisitos de Software 
 ● Design de Software
 ● Construção de Software
 ● Teste de Software 
 ● Manutenção de Software 
 ● Gerenciamento de Configuração de Software 
 ● Gerenciamento de Engenharia de Software 
 ● Engenharia de Processo de Software 
34
 ● Ferramentas e Métodos de Software 
 ● Qualidade de Software
Assim, a gestão do projeto de software envolve diversos 
escopos que são desenvolvidos conforme a necessidade 
do produto. Cada projeto escolhe as metodologias apro-
priadas para o desenvolvimento do software seguindo 
os parâmetros descritos como modelos das normas ISO 
em busca da segurança da qualidade.
35
DESENVOLVIMENTO DE 
SOFTWARE BASEADO EM 
COMPONENTES
Na programação de software, são utilizadas técnicas de 
engenharia para o reaproveitamento de componentes 
que possuem funcionalidades lógicas definidas para a 
comunicação com o uso de interfaces. Na programação 
orientada a objetos, os componentes trocam informa-
ções por mensagens de dados.
Na Engenhar ia de Software Baseada em 
Componentes (ESBC), os requisitos são analisadoslevando em conta a arquitetura do software para um 
esquema de composição baseada em subconjuntos, 
em vez de serem construídos por técnicas convencio-
nais, na qual o design da arquitetura é determinado.
Nesse tipo de arquitetura, a abstração é utilizada na 
composição dos objetos, com o foco na produção de 
alto desempenho. Para garantir o baixo acoplamento 
entre as regras de negócio e os componentes, alguns 
princípios da programação orientada a objetos são 
adotados nas funcionalidades.
A programação de componentes funciona como um 
provedor de serviços, cuja comunicação é realizada pe-
las interfaces. Os componentes podem ser utilizados 
de muitas maneiras e, para entendermos melhor, um 
componente pode ter uma simples função matemática 
que pode ser requisitada.
36
O componente é requisitado de modo independente da 
linguagem de programação, por isso devemos conside-
rá-lo como uma entidade executável. Esse tipo de arqui-
tetura é utilizado principalmente em reúso, considerado 
um elemento-chave em diversos tipos de aplicações.
Componentes utilizados no desenvolvimento possuem 
alguns benefícios, tais quais:
 ● Produção: economia de tempo no desenvolvimento 
de software.
 ● Robustez: qualidade na produção do software, 
devido a muitos componentes já serem testados, 
trazendo velocidade e confiança em projetos com 
escopo definido.
 ● Padronização: utilização de padrões na equipe de 
desenvolvimento orientado a regras de negócio dos 
componentes.
37
INTERFACES DE 
COMPONENTES
Para entendermos melhor os componentes, vamos 
relembrar o conceito de interface, que é um contrato 
da classe com o exterior, ou seja, a assinatura da 
interface colabora com o comportamento da classe, 
padronizando os códigos implementados.
Nos componentes, a interface estabelece os serviços 
prestados, a implantação física pode ser definida 
na integração dos componentes. Com esse tipo de 
serviço, é possível desenvolver um sistema em que 
os serviços são independentes da localização de 
seus componentes, cuja comunicação funciona via:
 ● Interface Provides: é a interface que fornece serviços 
do componente para outros componentes.
 ● Interface Requires: é a interface que define quais re-
quisitos ficaram disponíveis para as suas funcionalidades.
FIQUE ATENTO
A programação por componentes é considerada 
complexa e nem sempre é a melhor solução.
Para termos um melhor entendimento, analisare-
mos dois exemplos de componentes com Provi-
des e Requires na Figura 4.
38
Interface requires Interface provides
Define os serviços 
do ambiente dos 
componentes 
usados pela 
interface
Define os serviços 
fornecidos pelo 
componente para 
outros componentes
sensorManagement
sensorData
sensorData
removeSensor
startSensor
stopSensor
testSensor
initialise
report
listAll
Coletor de 
dados
Componente
Interface requires Interface provides
E
X
E
M
P
LO
IN
T
E
R
FA
C
E
S
Figura 4: Exemplo de uso provides e requires. Fonte: Masiero (s. d., p. 6).
39
ABSTRAÇÃO DE 
COMPONENTES
 ● Abstração funcional: sua única função é imple-
mentada, pois pode ser uma aplicação simples, por 
exemplo, a conversão de dados de reais para dólar.
 ● Agrupamentos casuais: têm relações fracas entre 
os componentes, por exemplos, o uso de funções, 
conversão de dados, dentre outros.
 ● Abstrações de dados: utilizadas em classes de 
linguagens de programação orientadas a objetos, o 
componente é ilustrado como uma abstração.
 ● Abstração em clusters: classes abstratas contidas 
nos componentes que trabalham em conjunto.
 ● Abstração de sistema: trata-se de um sistema com-
pletamente contido.
40
MODELOS GENÉRICO 
DE PROCESSO DE 
SOFTWARE BASEADO EM 
COMPONENTES
Não há consenso do que deve fazer parte de um 
modelo de componentes, porém, algumas caracte-
rísticas precisam ser definidas: os tipos de compo-
nentes, formas de interação entre os componentes 
e o que deve ser definidos aos recursos.
Na definição dos recursos, que é como os compo-
nentes são ligados, os recursos podem ser providos 
por um framework ou uma ligação dos componentes, 
sendo que o modelo que disponibiliza quais com-
ponentes estarão disponíveis (BACHMANN, 2000).
Os modelos apresentam um conjunto de funções que 
se relacionam com um conjunto de componentes já 
existentes no sistema. Todo processo na modelagem 
precisa passar por algumas etapas até os sistemas 
serem desenvolvidos. Essas etapas são:
 ● Seleção: os componentes são pesquisados e ana-
lisados visando a saber qual é o potencial de uso 
para o sistema.
 ● Qualificação: os requisitos selecionados são qua-
lificados e testados de acordo com as necessidades 
de aplicação, como desempenho, confiabilidade e 
usabilidade (PRESSMAN; MAXIM, 2016).
41
 ● Adaptação: a correção de conflitos para que os 
componentes possam ser utilizados no projeto.
 ● Composição: responsável pela integração dos com-
ponentes no sistema que coordena os componentes e 
as realizações das tarefas.
 ● Atualização: nesta fase, os componentes podem 
ser substituídos ou atualizados por componentes 
com novas interfaces.
Essas etapas podem ser conferidas na Figura 5:
Seleção Qualificação Adaptação
Composição Atualização
Figura 5: Atividades do desenvolvimento com componentes. Fonte: 
(PRESSMAN; MAXIM, 2016).
Observe que não há uma ordem nessas etapas, por-
tanto, o que determina é a necessidade de acordo 
42
com os requisitos do projeto. Para essa atividade, 
algumas tarefas são realizadas, conforme consta 
na Tabela 7.
Item Descrição
Especificações de 
requisitos
Para esta fase, podem ser utiliza-
dos modelos, sendo comparável ao 
modelo cascata. As funções e regras 
de negócios são estabelecidas por 
consulta aos usuários.
Análise de 
componentes
As especificações são implementa-
das segundo os requisitos estabele-
cidos, visto que nem sempre há uma 
combinação coerente, e as funcionali-
dades são parcialmente utilizadas.
Modificação de 
requisitos
Os componentes são utilizados e 
modificados conforme a necessidade; 
caso não seja possível, outras alterna-
tivas são realizadas.
Projeto de sistema 
com reúso
Faz-se ou projeta-se uma análise no 
software desde o início, as regras de 
negócio são baseadas nos compo-
nentes existentes caso seja uma atua-
lização do software ou reutilização de 
bases comuns.
Desenvolvimento 
e integração
Nesta fase, os softwares não compra-
dos podem ser desenvolvidos, porém, 
pode ser feito uma integração com 
softwares conhecidos como comer-
cial off-the-shelf (sistemas comerciais 
de prateleira).
Validação O sistema é validado de acordo 
com os requisitos estabelecidos no 
projeto.
Figura 6: Processos de software baseados em componentes. Fonte: 
Adaptada de Pressman e Maxim (2016).
43
O Processos de Software Baseado em Componentes 
identifica os requisitos e remove as incongruências da 
arquitetura. Para tanto, há dois processos envolvidos: 
engenharia de domínio e desenvolvimento baseado 
em componentes (DBC).
A engenharia de domínio tem por objetivo a construção, 
classificação e liberação de um conjunto de componen-
tes de software com as aplicabilidades para softwares 
existentes ou novos projetos.
O DBC estabelece a construção e o controle dos estados 
dos componentes, que possuem cinco estágios: seleção, 
qualificação, adaptação, composição e atualização do 
componente (BROWN; SHORT, 1997).
Na prática, um componente dificilmente é reutilizável e, 
mesmo assim, precisa de modificações, ou seja, de mu-
danças para se adaptar aos novos projetos e estabelecer 
conexão com outros componentes (BOSCH, 1999). Para 
a adaptação de componentes segundo a engenharia de 
software, as aplicações mais conhecidas são:
 ● Encapsulamento de caixa-branca: a modificação é 
feita diretamente no código fonte, onde dificilmente é 
disponibilizada. Quando há necessidade de modificações 
de incompatibilidade, é necessário fazer adaptações, po-
rém, neste caso, torna-se difícil o acesso ao código fonte.
 ● Encapsulamento caixa-cinza: a adaptação do códigoé feita com o uso de Interface de programação de apli-
cações ou Interface de Programação de Aplicação, que 
possibilita o acerto de erros e conflitos.
44
 ● Encapsulamento caixa-preta: neste caso, o código 
não fica exposto, e para sua adaptação é preciso utilizar 
interfaces nas condições de processamento.
Como você já deve ter percebido, a programação por 
componentes apresenta diferenças de incompatibili-
dade. Algumas técnicas de encapsulamento e empa-
cotamento são utilizadas para adaptar as interfaces 
a uma nova versão com o requisito atualizado.
Muitos componentes possuem falha na interação, 
há diversos fatores para ocorrerem erros e falta de 
compatibilidade, e as causas podem estar relaciona-
das à plataforma do sistema e linguagem em que o 
componente foi desenvolvido. Tal fator é conhecido 
como heterogeneidade dos componentes.
Para resolver essa situação de acoplamento de com-
ponentes, desenvolveram-se algumas tecnologias de 
interação por camadas, ou seja, a ligação e a comu-
nicação entre diferentes componentes se realizam 
por uma terceira base, conhecidas como tecnóloga 
de componentes. Algumas dessas tecnologias são:
 ● CORBA Component Model (CMM) do Object 
Management Group (OMG).
 ● Distributed Component Obejct (DCOM) e COM/
COM+ (Component Object Model) da Microsoft.
 ● JavaBeans e Entreprise JavaBeans (EJB).
45
SAIBA MAIS
saiba mais sobre o Middleware, consultando Tec-
nologias de Middleware, de Fernando Martins, 
que se encontra disponível em: https://www.gsd.
inesc-id.pt/~ler/docencia/tm0607/slides/J2EE-
-FernandoMartins.pdf. 
46
https://www.gsd.inesc-id.pt/~ler/docencia/tm0607/slides/J2EE-FernandoMartins.pdf
https://www.gsd.inesc-id.pt/~ler/docencia/tm0607/slides/J2EE-FernandoMartins.pdf
https://www.gsd.inesc-id.pt/~ler/docencia/tm0607/slides/J2EE-FernandoMartins.pdf
IMPACTO DAS LINGUAGENS 
DE PROGRAMAÇÃO 
NA ENGENHARIA DE 
SOFTWARE
Como você já deve ter notado, até este momento as 
linguagens de programação foram surgindo de acor-
do com as necessidades científicas e do mercado 
de trabalho. Voltando um pouco na história, vamos 
relembrar as linguagens e seus propósitos.
A princípio, as linguagens se desenvolveram nos anos 
de 1960 e 1970, como a Fortran e Algol surgiram 
para fins matemáticos e, mais tarde, o Cobol para 
aplicação de negócios. Nessa época, as linguagens 
de programação evoluíam de acordo com o desenvol-
vimento de hardware. Com o lançamento de sistemas 
compartilhados, houve uma grande dificuldade nessa 
fusão de grandes plataformas. Além disso, outros 
problemas de multiprocessamento e programação 
concorrente trouxeram grandes dificuldades para as 
empresas na época.
Com diversas dificuldades, o assunto foi discutido 
abertamente em uma conferência na Alemanha em 
Garmisch-Partenkirchen, em 1968, onde se cunhou o 
nome engenharia de software. O termo e o que deve-
ria ser levado em consideração não foram discutidos, 
assim, a indústria não levou muito em consideração 
e ainda demorou muito tempo para haver mudanças.
47
A evolução foi acontecendo aos poucos; cientistas 
como E.W. Dijkstra e C.A.R Hoare reconheceram a 
linguagem de programação como uma disciplina. 
Algumas de suas publicações, na época, influencia-
ram as linguagens de programação, principalmente 
as estruturadas.
Nesse contexto de mudanças e conceitos de lingua-
gens de programação, houve um retrocesso no en-
tendimento de linguagem de alto nível com o uso da 
linguagem C, a qual era muito utilizada no sistema 
operacional Unix. Os conceitos de abstração eram 
facilmente quebrados na linguagem C, e os termos 
discutidos na engenharia de software não eram sus-
tentados. Porém, para muitos programadores, a lin-
guagem C era considerada melhor que o Assembly.
A linguagem C trazia muitos defeitos em relação 
à verificação de dados e sua consistência. As ma-
trizes possuíam índices que não eram verificados, 
frustrando alguns princípios de qualidade referente 
à engenharia.
Alguns anos depois, precisamente em 1985, surgiram 
a linguagem Ada e C++, em que muitos tentaram 
resolver os erros referentes à linguagem C, que é a 
abstração e a inconsistência de verificação de da-
dos. Porém, ao invés de melhorar, para muitos piorou 
ainda mais a situação (DIJKSTRA, 1962).
A complexibilidade na programação de computa-
dores aumentou, com isso, poderosas estações de 
trabalhos individuais foram criadas. Alguns conceitos 
como Programação Orientada a Objetos (POO) foram 
48
aceitos e, aos poucos, começaram a virar tendência 
de mercado.
A engenharia de software praticamente surgiu em 
crises de software, complexibilidade nos projetos 
e adequações necessárias para fazer um software 
de qualidade. A palavra engenharia representa: criar, 
construir, analisar, desenvolver e melhoramento con-
tínuo. A engenharia de software possui como base 
metodologias, modelos, normas e técnicas utiliza-
dos no processo de desenvolvimento e projeto de 
software.
Para acompanhar o desenvolvimento dessa disci-
plina, observe os encontros e as iniciativas dessa 
evolução na Figura 6:
Figura 7: Linha do tempo de eventos na Engenharia de Software. 
Fonte: Time Toast. 
Como observado na Figura 6, a POO teve uma gran-
de evolução no desenvolvimento de software, pois 
houve praticamente um grande domínio no mercado 
por ser um paradigma de programação que cobre a 
49
https://www.timetoast.com/timelines/historia-da-engenharia-de-software
maioria das aplicações, porém, não é recomendada 
para todos os tipos.
A POO apresenta problemas como qualquer outro 
paradigma, a sua ideia de utilização de objetos e pa-
dronização dos códigos aplicando a Unified Modeling 
Language (UML) trouxe muitas vantagens nos pro-
jetos. Vamos deixar bem claro que nem todas as 
linguagens de POO seguem bem os princípios da 
engenharia de software.
Esses fatores foram decisivos para uma ou outra lin-
guagem se destacar. A POO não é um princípio novo, 
e a UML trouxe vantagens aos projetos. Contudo, não 
é toda linguagem que adota o máximo possível dos 
padrões da UML. Além disso, a arquitetura de cada 
linguagem de programação é modificada para o me-
lhor funcionamento seguindo regras dos fabricantes.
SAIBA MAIS
Saiba mais sobre a UML, assistindo a Unified Mo-
deling Language, uma breve história, disponível 
em: http://www.dsc.ufcg.edu.br/~jacques/cursos/
map/html/uml/historia_uml/historia_uml.htm. 
50
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/uml/historia_uml/historia_uml.htm
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/uml/historia_uml/historia_uml.htm
CICLO DE VIDA
As tarefas envolvidas no desenvolvimento de softwa-
res implicam atividades que pertencem aos proces-
sos do ciclo de vida do software. O modelo escolhido 
para o desenvolvimento é o que determina como 
esse software será projetado.
De acordo com a ISO/IEC 12207 (1998), o ciclo de 
vida é 
Estrutura contendo processos, atividades e 
tarefas envolvidas no desenvolvimento, ope-
ração e manutenção de um produto de sof-
tware, abrangendo a vida do sistema, desde 
a definição de seus requisitos até o término 
de seu uso.
Não há um ciclo de vida ideal para todas aplicações, 
alguns projetos são adotados mais do que um tipo 
de ciclo de vida. O que de fato determina são os 
requisitos e as regras de negócio da aplicação. Os 
modelos mais conhecidos da engenharia de software 
estão descritos na Tabela 8:
SAIBA MAIS
Conheça a ISO/IEC 12207, acessando https://
www.dcce.ibilce.unesp.br/~ines/cursos/eng_
soft/2006/aula03_ISO_IEC.pdf.
51
https://www.dcce.ibilce.unesp.br/~ines/cursos/eng_soft/2006/aula03_ISO_IEC.pdf
https://www.dcce.ibilce.unesp.br/~ines/cursos/eng_soft/2006/aula03_ISO_IEC.pdf
https://www.dcce.ibilce.unesp.br/~ines/cursos/eng_soft/2006/aula03_ISO_IEC.pdf
Modelos Descrição
Cascata
Primeiro modelo de gerenciamento de proces-
sos de software, modelo sequencial, modelo 
com ênfase maior na análise de projeto.
Não é iterativo, utilizado principalmente em 
projetos críticos e de alto custo, uma vez que 
apresentatodo o processo que pode ser iniciado 
do zero ou o projeto é abortado.
Incremental
Neste modelo, os escopos são agrupados em 
módulos, e as prioridades são validadas junto ao 
cliente. Utilizam como base o modelo cascata.
Evolutivo
Esse modelo é escolhido quando os requisitos não 
estão muito claros ou há faltas dele.
Existe um desenvolvimento gradual, a partir de mo-
delos anteriores, o desenvolvimento é atualizado 
em novas versões.
RAD
O modelo Rapid Application Development é 
incremental, utilizado para prototipagem rápida, 
o ciclo de vida não é curto e tem a duração entre 
60 e 90 dias.
Prototipagem
Entende-se como desenvolver parte do projeto, 
como uma tela para ser apresentada e validada 
para o cliente. Serve principalmente para ter uma 
ideia de como ficaria essa parte, muitas vezes 
complexas, por apresentarem resultados mais 
imediatos em pouco tempo.
Espiral
Esse modelo é baseado em análise de riscos, 
onde cada iteração ou volta é analisado: viabili-
dade do projeto, definição de requisitos, desen-
volvimento e testes.
Tabela 7: Modelos de ciclo de vida de software.Fonte: Devmedia. 
52
https://www.devmedia.com.br/ciclos-de-vida-do-software/21099
FLUXO DE 
TRABALHO 
O workflow (fluxo de trabalho) em projetos de software 
normalmente é auxiliado por ferramentas Computer-
Aided Software Engineering (Case), ou Engenharia 
de Software Assistida por Computador. Esse tipo de 
ferramenta faz parte da engenharia de software, não 
entenda como apenas um fluxo de trabalho simples, 
pois cada escopo definido representa as regras de 
negócios e os requsitos do sistema.
Na programação orientada a objetos, uma das fer-
ramentas mais utilizadas foi o Business Process 
Execution Language (BPEL), ou Linguagem de 
Execução de Processos de Negócios. Trata-se de 
uma ferramenta incrível que teve origem em empresas 
como Microsoft e IBM. Algumas dessas ferramentas 
disponibilizam os sistemas de orquestração, que inte-
rage com os requisitos internos e externos do projeto 
de software.
O BPEL tem uma definição para o fluxo entre serviços 
e lógica de acoplamento; para a orquestração, utiliza-
-se a Web Service como base, ferramenta que pode 
ser visual, que é fácil de entender e interagir com o 
fluxo de trabalho. O BPEL utiliza a linguagem XML, é 
capaz de trabalhar com códigos e administrar as ta-
refas a serem executadas em tempo real em projetos. 
Algumas dessas ferramentas são Microsoft BizTalk 
Server e Oracle Process Manager.
Para você ter um entendimento melhor do BPEL, ob-
serve a Figura 7, onde temos o BPEL na ferramenta 
53
Oracle JDeveloper. Analise o workflow e as notações 
utilizadas no lado esquerdo da ferramenta.
Figura 8: Exemplo BPEL no JDeveloper. Fonte: Elaboração própria. 
O BPEL é uma ferramenta muito interessante e com-
plexa, praticamente uma evolução de alguns modelos 
da UML. Entretanto, é uma ferramenta utilizada mais 
ao nível de programadores, por ter funções avançadas. 
Alguns anos depois do BPEL, houve uma evolução da 
ferramenta para ser utilizada em fluxo de processos 
de negócio, essa ferramenta é o Business Process 
Model and Notation (BPMN).
O BPMN tornou-se um padrão mundial no uso de fluxo 
de processos de negócios, uma vez que é considerado 
mais simples do que o BPEL; trouxe para a área de 
negócios uma integração de pessoas que não são 
da área de informática, mas que estão envolvidas 
em processos de negócio e seu fluxo de execução 
(LEYMANN, 2010).
54
O BPMN pertence a UML e, desde a versão 2.0, não 
teve muitas modificações; há ferramentas como o 
BizAge, SigNavio e plug-ins para serem utilizados no 
eclipse e outras plataformas de desenvolvimento.
Uma das empresas com um vasto material para estu-
do é a Camunda, que tem manuais e exemplos práti-
cos envolvendo casos de uso para serem utilizadas 
como aprendizado. Além da própria OMG, que dispo-
nibiliza gratuitamente manuais do BPMN (CHINOSI; 
TROMBETTA, 2012). É algo em que vale a pena investir 
e se especializar, pois faz parte da engenharia de sof-
tware e compõe os projetos de qualidade. As notações 
são simples e há vários manuais disponíveis na Web.
Como você pode perceber na Figura 8, o BPMN é mui-
to semelhante ao BPEL:
Figura 9: Exemplo de BPMN. Fonte: BGT Brasil. 
O BPMN é uma metodologia de fluxo de trabalho mui-
to utilizada em projetos de software. Algumas ferra-
mentas comerciais utilizam o BPMN como forma de 
monitorar todo o processo de negócio ou parte dele.
55
http://www.bgtbrasil.com/bpmn/
GESTÃO DE PROJETOS
A gestão de projetos dependerá muito do propósito, 
se é uma inovação, se é uma atualização, integração 
ou outros fatores. A engenharia de software preocu-
pa-se com todas as fases dos projetos de softwa-
re, desde os processos envolvidos até os serviços 
prestados.
O conhecimento de metodologias, normas e técnicas 
é muito importante em projetos de software de alto 
padrão, principalmente a nível governamental e inter-
nacional, que deve obedecer às normas e métricas 
de qualidade assegurada.
Países como Estados Unidos da América, Canadá, 
alguns europeus e outros desenvolvidos possuem ex-
periência em projetos de software. No Brasil, não há 
uma cultura de software como na Índia, que discuta a 
matemática e a programação de computadores com 
a mesma efervescência como se debate sobre fute-
bol. O Brasil vem utilizando metodologias e padrões 
internacionais para prestar serviços a empresas com 
níveis de maturidade muito altos. Infelizmente, esses 
métodos e normas na maioria das vezes não funcio-
nam muito bem por questões culturais.
O MPS.BR foi uma tentativa de montar um modelo 
parecido com o CMMI ou ISO/IEC 15504, porém, não 
foi largamente adotado pelas empresas e está lon-
ge de ser uma realidade na gerência de software. O 
PMBOK, já citado anteriormente, é um guia do Project 
56
Management Institute (PMI), mundialmente famoso 
e muito bem aceito em qualquer tipo de projeto.
No entanto, você deve estar ciente quanto à realida-
de do mercado brasileiro. O PMBOK vem servindo 
mais como um certificado para gerentes colocarem 
em seus currículos, provando seu conhecimento da 
teoria e as técnicas do guia, mas que não garante 
que vão conseguir gerenciar um projeto de software.
Lembre-se de que as técnicas e metodologias podem 
auxiliar, mas você trabalha com pessoas que podem 
não estar interessadas nessas técnicas ou as utili-
zam totalmente fora da realidade e do contexto do 
projeto em que você trabalha.
No Brasil, desenvolvedores experientes que atuam na 
área de negócios já são considerados engenheiros 
de software, ainda que não possuam uma grande 
experiência nas diversas áreas. Você provavelmente 
participará de projetos de software com pessoas 
que não são da área da computação e que acham 
que sabem como funciona o projeto, porque já está 
definido em um papel.
Além disso, você deve se preocupar com as pessoas 
envolvidas no projeto, pois, com toda certeza, o seu 
maior problema são os erros humanos. Os fatores 
humanos representam a maioria dos casos de fra-
casso de todos os projetos. Por essa razão, saber 
escolher a equipe e trocar ou adquirir novos recursos 
é uma das funções do gerente de projetos.
57
O PMBOK possui as fases do processo que envolve 
um projeto e as dez áreas do conhecimento para você 
ter uma ideia do que precisa monitorar em um proje-
to. Lembre-se de que, em um projeto de software, os 
acontecimentos são mais dinâmicos e há oportuni-
dade de mudanças quando estas forem necessárias, 
dependendo de modelos escolhidos. Entretanto, al-
gumas metodologias para gerenciamento de equi-
pes em projetos de software apresentaram um bom 
resultado, mesmo aqui no Brasil, como é a adoção 
do SCRUM, XP e FDD, que são metodologias ágeis.
Conhecer o negócio e as experiências faz a diferença 
na produção de software, pois um membro sênior 
(por exemplo um consultor) pode levar o projeto a 
outros níveis de maturidade, ao escolher os melhores 
caminhos e com menores chances de erro no projeto.
58
CONSIDERAÇÕES FINAISOs projetos de software requerem um conhecimento 
de normas e técnicas a fim de refinar a qualidade e 
melhorar as equipes que desenvolvem os softwares. 
Você deve ter notado que há uma evolução nos mo-
delos de ciclo de vida voltados aos softwares, sendo 
que o gerenciamento de projetos exige muito mais 
que apenas programar.
Além dos paradigmas de linguagem de programação, 
o impacto com a evolução das tecnologias levou a 
uma nova disciplina, a engenharia de software. O 
estudo da engenharia de software é considerado pri-
mordial em qualquer projeto de grande importância, 
pois as técnicas e os métodos utilizados garantem 
um bom resultado em diversos tipos de projetos.
Ademais, pudemos estudar que há ferramentas ca-
pazes de ser utilizadas para acompanhar o fluxo de 
desenvolvimento ou acompanhamento de projetos, 
como BPEL e BPMN. Portanto, conhecer essas me-
todologias é essencial para elas serem aplicadas em 
projetos que envolvam software.
59
SÍNTESE
Fluxo de trabalho: 
• Fases que envolvem todos os processos de 
negócios no desenvolvimento.
Gestão de projetos:
• Área de conhecimento que precisa estar 
associado à engenharia de software como 
base nos processos envolvidos em projetos 
de software.
Paradigmas de Linguagem 
de Programação
Programação Imperativa; programação 
orientada a objetos; programação 
funcional; programação lógica; 
programação orientada a eventos; 
programação concorrente:
• Conhecer a aplicação e qual é a ideia e o 
pensamento que envolvem a aplicação é 
muito importante para o desenvolvimento de 
software. Estudar os paradigmas e entender 
os conceitos melhorarão seu entendimento na 
programação.
Gerenciamento de projetos de software:
• Técnicas utilizadas para acompanhamento 
dos processos de software. A gerência de 
software deve estar muito envolvida com a 
qualidade e com os requisitos do projeto.
Desenvolvimento de Software baseado 
em componentes:
• Tipo de aplicação complexa e voltada ao 
reúso de software. Essa técnica requer um 
conhecimento de engenharia de software por 
ser complexo. Porém, a depender do tipo de 
projeto, pode ser eficaz e produtivo.
Impacto das linguagens de programação 
na Engenharia de Software:
• A evolução das linguagens de programação 
possibilitou a necessidade de criar e aplicar 
técnicas da engenharia para aumentar e 
padronizar a qualidade de software.
Ciclo de vida:
• Envolve os modelos de processos de 
desenvolvimento de software.
Referências 
Bibliográficas 
& Consultadas
ÁLVARES, A. R. Programação Lógica (Prolog): aula 
11 (s. d.). Cefet-MG/Decom. Disponível em: ht-
tps://homepages.dcc.ufmg.br/~rimsa/documents/
decom009/lessons/Aula11.pdf. Acesso em: 03 
ago. 2019.
BACHMANN, F. et al. Volume II: Technical 
Concepts of Component-Based Software 
Engineering. 2. ed. Technical Report of Software 
Engineering Institute, Carnegie Mellon University, 
may 2000. Disponível em: http://www.sei.cmu.
edu/pub/documents/00.reports/pdf/00tr008.pdf. 
Acesso em: 05 ago. 2019.
BALDASSARRE, M. T.; PIATTINI, M.; PINO, F. J.; 
VISAGGIO, G. Comparing ISO/IEC 12207 and 
CMMI-DEV: Towards a mapping of ISO/IEC 15504-
7. ICSE Workshop on Software Quality, Vancouver, 
BC, USA, 12 Jun. 2009. Disponível em: https://iee-
explore.ieee.org/document/5071558.
BOSCH, J. Superimposition: A component adap-
tation technique. Information and Software 
https://homepages.dcc.ufmg.br/~rimsa/documents/decom009/lessons/Aula11.pdf
https://homepages.dcc.ufmg.br/~rimsa/documents/decom009/lessons/Aula11.pdf
https://homepages.dcc.ufmg.br/~rimsa/documents/decom009/lessons/Aula11.pdf
http://www.sei.cmu.edu/pub/documents/00.reports/pdf/00tr008.pdf
http://www.sei.cmu.edu/pub/documents/00.reports/pdf/00tr008.pdf
https://ieeexplore.ieee.org/xpl/conhome/5061466/proceeding
https://ieeexplore.ieee.org/document/5071558
https://ieeexplore.ieee.org/document/5071558
https://www.sciencedirect.com/science/article/pii/S0950584999000075
https://www.sciencedirect.com/science/article/pii/S0950584999000075
Technology, Elsevier, 25 mar. 1999. p. 257-273. 
Disponível em: http://citeseerx.ist.psu.edu/
viewdoc/download?doi=10.1.1.25.7736&rep=rep1&t
ype=pdf. Acesso em: 10 ago. 2019.
BROWN, A. W.; SHORT, K. On Components 
and Objects: The Foundation of Component-
Based Development. International Symposiumn 
Assessment of Software Tools and Technologies. 
IEEE, Jul. 25 1997. p. 112-121. Disponível em: 
https://ieeexplore.ieee.org/document/599921/
authors#authors. Acesso em: 05 ago. 2019.
CAELUM. Apêndice – programação concorrente e 
threads. In: Apostila Java e orientação a objetos 
(s. d.). Disponível em: https://www.caelum.com.br/
apostila-java-orientacao-objetos/apendice-progra-
macao-concorrente-e-threads/. Acesso em: 05 ago. 
2019.
CÁCERES, S. Aplicações de Linguagem de 
Programação Orientada a Objeto – Eventos 
(s. d.). Disponível em: https://www.ic.unicamp.
br/~ra100621/class/2017.2/ALPOO_files/aulas-
Sheila/ALPOO5B-Eventos.pdf . Acesso em: 03 ago. 
2019.
CHINOSI, M.; TROMBETTA, A. BPMN: An intro-
duction to the standard. Computer standards & 
Interfaces, vol. 34, n. 1, jan. 2012. p. 124-134. 
Disponível em: https://www.sciencedirect.com/
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.25.7736&rep=rep1&type=pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.25.7736&rep=rep1&type=pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.25.7736&rep=rep1&type=pdf
https://www.caelum.com.br/apostila-java-orientacao-objetos/apendice-programacao-concorrente-e-threads/
https://www.caelum.com.br/apostila-java-orientacao-objetos/apendice-programacao-concorrente-e-threads/
https://www.caelum.com.br/apostila-java-orientacao-objetos/apendice-programacao-concorrente-e-threads/
https://www.ic.unicamp.br/~ra100621/class/2017.2/ALPOO_files/aulasSheila/ALPOO5B-Eventos.pdf
https://www.ic.unicamp.br/~ra100621/class/2017.2/ALPOO_files/aulasSheila/ALPOO5B-Eventos.pdf
https://www.ic.unicamp.br/~ra100621/class/2017.2/ALPOO_files/aulasSheila/ALPOO5B-Eventos.pdf
https://www.sciencedirect.com/science/article/abs/pii/S0920548911000766
science/article/abs/pii/S0920548911000766. 
Acesso em: 01 ago. 2019.
DEITEL, P.; Deitel, H.; Java: Como Programar. 10. 
ed. São Paulo, Pearson Education do Brasil, 2016 
[Biblioteca Virtual].
DIJKSTRA, E. W. Some critical comments on ad-
vanced programming. Proc. IFIP Congress, Munich, 
Aug. 1962.
KOONTZ, H.; O’DONNEL, C.; WEINRICH, H. 
Management of Education. 12. ed. Auckland: 
McGraw-Hill, 2002.
LEYMANN, F. BPEL vs. BPMN 2.0: Should you care? 
In: International Workshop on Business Process 
Modeling Notation. Springer, Berlin, Heidelberg, p. 
8-13, 2010.
LOUREDA, O. B. Desenvolvimento de um microfo-
guete para fotografias aéreas de pequeno formato. 
In: Anais do XII ENCITA 2006, ITA, out.-2006, p. 23-
26. Disponível em: http://www.bibl.ita.br/xiiencita/
mec_09.pdf. Acesso em: 03 ago. 2019.
MANZANO, J. A. N. G. Algoritmos: lógica para de-
senvolvimento de programação de computadores. 
28. ed. São Paulo: Érica, 2016 [Biblioteca Virtual].
MANZANO, J. A. N. G. Java 7: programação de 
computadores: guia prático de introdução, orien-
https://www.sciencedirect.com/science/article/abs/pii/S0920548911000766
http://www.bibl.ita.br/xiiencita/mec_09.pdf
http://www.bibl.ita.br/xiiencita/mec_09.pdf
tação e desenvolvimento. São Paulo: Érica, 2011 
[Biblioteca Virtual].
MASIERO, P. C. Desenvolvimento de Software 
Baseado em Componentes. (s. d.). Disponível 
em: https://edisciplinas.usp.br/pluginfile.
php/130351/mod_resource/content/1/DSBC_UML_
Components_1-2-3.pdf. Acesso em: 05 ago. 2019.
MELO, A. C. V.; SILVA, F. S. C. Princípios de 
Linguagem de Programação. São Paulo: Edgard 
Blücher LTDA, 2003 [Biblioteca Virtual].
PACITTI, T. Paradigmas do software aberto. Rio de 
Janeiro: LTC, 2006 [Minha Biblioteca]
PAULA FILHO, W. P. Engenharia de software: fun-
damentos, métodos e padrões. 3. ed. São Paulo: 
Gen/LTC, 2009 [Biblioteca Virtual].
PERKOVIC, L. Introdução à computação usando 
Python: um foco no desenvolvimento de aplica-ções. Rio de Janeiro: LTC, 2016.
PMBOK. PROJECT MANAGEMENT INSTITUTE. 
Guia de conhecimentos: um Guia do Conjunto em 
Gerenciamento de Projetos. 6. ed., 2017.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de 
Software: uma abordagem profissional. 8. ed. 
Porto Alegre: McGraw-Hill, 2016 [Biblioteca 
Virtual].
https://edisciplinas.usp.br/pluginfile.php/130351/mod_resource/content/1/DSBC_UML_Components_1-2-3.pdf
https://edisciplinas.usp.br/pluginfile.php/130351/mod_resource/content/1/DSBC_UML_Components_1-2-3.pdf
https://edisciplinas.usp.br/pluginfile.php/130351/mod_resource/content/1/DSBC_UML_Components_1-2-3.pdf
PROKOPEC, A. Learning Concurrent Programming 
in Scala. 2. ed. Packt Publishing Ltd, 2017.
SBROCCO, J. H. T. C.; MACEDO, P. C. Metodologias 
ágeis: engenharia de software sob medida. São 
Paulo: Érica, 2012 [Biblioteca Virtual].
SCHACH, S. R. Engenharia de software: os para-
digmas clássico e orientado a objetos. 7. ed. Porto 
Alegre: AMGH, 2010.
SCHULMEYER, G. G. (Ed.). Handbook of Software 
Quality Assurance. 4. ed. Artech House, 2007. 
SEBESTA, R. W. Conceitos de linguagens de pro-
gramação. 11. ed. Porto Alegre: Bookman, 2018.
SOMMERVILLE, I. Engenharia de Software. 10. ed. 
São Paulo: Pearson Education do Brasil, 2018.
SOUZA, M. A. F.; GOMES, M. M.; SOARES, M. V.; 
CONCILIO, R. Algoritmos e lógica de programação. 
3. ed. Cengage, 2019 [Biblioteca Virtual].
SWEBOK. SOFTWARE ENGINEERING BODY OF 
KNOWLEDGE. Guide to the Software Engineering 
Body of Knowledge, 2004. Disponível em: https://
www.computer.org/education/bodies-of-knowled-
ge/software-engineering/v3. Acesso em: 05 ago. 
2019.
https://www.computer.org/education/bodies-of-knowledge/software-engineering/v3
https://www.computer.org/education/bodies-of-knowledge/software-engineering/v3
https://www.computer.org/education/bodies-of-knowledge/software-engineering/v3
TUCKER, A. B.; NOONAN, R. E. Linguagens de 
Programação: Princípios e Paradigmas. 2. ed. 
McGraw-Hill, 2009.
WEINSTEIN, J.; VASOVSKI, S. The PDCA 
Continuous Improvement Cycle. Cambridge: 
Massachusetts Institute of Technology (MIT) 
Leaders for Manufacturing Program, 2004.
	_Hlk15800520
	_Hlk15776630
	_Hlk15777465
	_Hlk15778509
	_Hlk15778190
	_Hlk15803592
	_GoBack
	_Hlk15780275
	_Hlk15780401
	_Hlk14755935
	_Hlk15782314
	_Hlk15798085
	_Hlk15337061
	Introdução
	Programação Imperativa
	Tipos compostos
	Programação Orientada a Objetos
	Programação Funcional
	Programação Imperativa vs Programação Declarativa
	Programação Lógica
	Programação Orientada a Eventos
	Programação Concorrente
	Gerenciamento de projetos de software
	Processos de Projetos
	Processo de Gerência de Projetos
	Áreas de Conhecimento do PMBOK
	Método de melhoria contínua PDCA
	Projeto de Software e Qualidade Assegurada
	Desenvolvimento de Software baseado em componentes
	Interfaces de componentes
	Abstração de Componentes
	Modelos genérico de processo de software baseado em componentes
	Impacto das linguagens de programação na Engenharia de Software
	ciclo de vida
	Fluxo de trabalho 
	Gestão de projetos
	Considerações finais
	Síntese

Mais conteúdos dessa disciplina