00:00:00
[Música]
00:00:07
o olá eu sou professor marcelo fantinato
00:00:16
é ter disciplina de engenharia de
00:00:18
software do curso de engenharia da
00:00:19
computação da univesp
00:00:21
nós vamos agora começar com a vídeo aula
00:00:23
número 1
00:00:25
o assunto é modelo de processo de
00:00:28
software e atividades de software
00:00:31
então nessa primeira videoaula nós vamos
00:00:33
começar com uma visão geral de todas as
00:00:36
etapas que nós podemos ter durante o
00:00:39
desenvolvimento de software de uma forma
00:00:43
sistemática que nós temos dentro do
00:00:45
conceito de engenharia de software então
00:00:48
nós vamos pensar no processo de software
00:00:51
de uma forma geral
00:00:52
e esse processo então ele é composto de
00:00:55
um conjunto de atividades de software
00:00:57
mas note que existe aqui uma palavra
00:00:59
chamada modelos de processos de software
00:01:02
que significa isso significa que um
00:01:05
processo de software ele pode seguir
00:01:07
diferentes modelos então modelos
00:01:10
eles são usados aqui como exemplos de
00:01:13
como um processo de software pode se
00:01:15
organizar
00:01:16
isso porque por que diferentes empresas
00:01:18
diferentes organizações diferentes
00:01:22
grupos de pessoas podem seguir
00:01:24
diferentes formas de desenvolver
00:01:27
software algumas alguns grupos menores
00:01:30
pode tentar fazer uma coisa mais
00:01:32
simplificada outras empresas maiores
00:01:35
pode tentar fazer uma coisa mais
00:01:36
sistemática para tentar colocar ordem em
00:01:39
muitas pessoas fazendo coisas diferentes
00:01:41
então não pode ser uma coisa muito
00:01:45
improvisada tem que ser uma coisa
00:01:47
bastante ordenada é uma empresa muito
00:01:51
grande dividida em diferentes cidades ou
00:01:53
até mesmo diferentes países têm que
00:01:55
trabalhar de uma forma ou outra uma
00:01:58
empresa pequena no na garagem de casa
00:02:02
pode ter que trabalhar querer trabalhar
00:02:04
de outra forma então cada empresa cada
00:02:07
um grupo de pessoas pensa ou quer
00:02:10
trabalhar ou ver que a melhor forma de
00:02:12
trabalhar para desenvolver software é
00:02:14
diferente da outra elas então seguem
00:02:16
modelos diferentes
00:02:19
como desenvolver software de forma
00:02:21
diferente e esses modelos
00:02:23
esses exemplos eles evoluíram
00:02:27
historicamente com o passar do tempo é
00:02:31
historicamente eles evoluíram
00:02:33
então lá na década de 70 por exemplo
00:02:36
quando começaram a surgir as primeiras
00:02:38
empresas que ligou de um software elas
00:02:41
pensavam em fazer software de uma
00:02:42
determinada forma
00:02:44
com o passar do tempo elas foram
00:02:45
pensando na onu uma outra forma de fazer
00:02:47
assim ao melhor sabe assim tanto que
00:02:50
recentemente então nós temos o que são
00:02:53
chamados métodos ágeis que é o que eu
00:02:55
comentei na aula de apresentação na
00:02:58
apresentação desta disciplina
00:03:00
então eu vou chegar lá também há mas
00:03:02
antes disso é a nós tenhamos eu vou
00:03:05
apresentar para vocês aqui meio que o
00:03:07
histórico de quais são as formas os
00:03:10
modelos de processos de software e não é
00:03:12
porque o mais recente álbum métodos
00:03:14
usados que são os únicos usados na
00:03:16
verdade nós temos outras modelos usados
00:03:21
atualmente
00:03:22
ok então antes de a gente chegar nos
00:03:30
modelos propriamente dito temos aqui
00:03:32
algumas definições básicas sobre
00:03:35
engenharia de software
00:03:36
algumas delas já cobertas na
00:03:38
apresentação da disciplina mas
00:03:42
formalizando aqui algumas coisas até
00:03:44
porque algumas ainda não foram cobertos
00:03:46
mas primeiramente aqui né uma definição
00:03:49
muito básica que a gente não pode deixar
00:03:51
de fazer dentro dessa disciplina
00:03:54
primeira coisa o que é um software
00:03:58
nós costumamos pensar que software
00:04:01
apenas aquele programa que a gente
00:04:03
executa no computador
00:04:04
então só sejam programas de computador
00:04:07
mas na verdade por dentro definição até
00:04:10
mais do que isso
00:04:11
o software também é toda a documentação
00:04:14
associada à então o software é tudo o
00:04:20
que acompanha aquele programa de
00:04:22
computador então se você tem um manual
00:04:25
do usuário se você tem um help online
00:04:27
qualquer documentação inclusive a
00:04:30
documentação usada
00:04:32
para o desenvolvimento do software do
00:04:35
projeto que você fez
00:04:37
a especificação de requisitos tudo isso
00:04:39
compõe o software por perfil missão ok
00:04:43
por mais que nós
00:04:44
no dia a dia não nos lembremos disso
00:04:47
isso é por definição é bom e há um outro
00:04:50
que evito bastante importante é dentro
00:04:53
do engenheiro de software
00:04:55
quais são os atributos para a gente
00:04:57
considerar o software como sendo um bom
00:04:59
software
00:05:00
isso é uma questão bastante abrangente
00:05:03
por isso que existe uma disciplina é que
00:05:06
vocês ainda vão ver no curso de vocês
00:05:08
que é chamada de qualidade de software
00:05:10
vocês vão ter uma disciplina só para
00:05:11
tratar qualidade de software mas vocês
00:05:14
aqui já para jantar
00:05:16
nós já pensamos que a funcionalidade tem
00:05:19
que ser de acordo com que o usuário
00:05:23
espera tem que ter um bom desempenho
00:05:25
além disso tem que ser confiável no
00:05:28
sentido de que o sistema tem que dar
00:05:31
fazer aquilo que o usuário espera e
00:05:34
ainda tem que ser fácil de manter sempre
00:05:37
que alguma alteração tivesse que ser
00:05:39
feita e isso tem que ser feito de uma
00:05:40
forma fácil e por fim tem uma boa
00:05:43
usabilidade então aqui foi destacado
00:05:45
apenas cinco atributos mas vocês vão
00:05:48
perceber quando vocês estiverem
00:05:50
estudando qualidade de software que
00:05:52
existe muito mais do que isso
00:05:54
depois nós temos aqui uma breve
00:05:55
definição do que é a engenharia de
00:05:57
software que eu já defini
00:05:59
já apresentei para vocês na aula de
00:06:01
apresentação então rapidamente aqui é
00:06:04
uma disciplina de engenharia que se
00:06:06
preocupa com todos os aspectos da
00:06:08
produção de software
00:06:09
quais as principais atividades da
00:06:12
engenharia de software basicamente já
00:06:14
tinha adiantado especificação
00:06:16
desenvolvimento validação e evolução do
00:06:19
software
00:06:20
depois qual a diferença entre engenharia
00:06:22
de software ea ciência da computação a
00:06:25
ciência da computação foca a teoria e
00:06:29
fundamentos enquanto engenharia de
00:06:31
software se preocupa com o lado prático
00:06:33
do desenvolvimento do software
00:06:36
eu havia comparado à engenharia de
00:06:38
software com a engenharia da computação
00:06:41
temos aqui um outro termo que a ciência
00:06:43
da computação a nós temos também uma
00:06:46
comparação entre engenharia de software
00:06:48
de engenharia de sistema e eu tinha
00:06:51
comparado engenharia de sistemas de
00:06:53
informação
00:06:54
mas aqui basicamente a mesma comparação
00:06:56
que eu havia feito principais desafios
00:07:00
da engenharia de software
00:07:03
o problema é que nós sempre precisamos
00:07:04
pensar em fazer sofre de uma forma mais
00:07:07
rápida e por outro lado falta tem que
00:07:10
ser confiável novamente fazendo o
00:07:12
paralelo com uma engenharia civil
00:07:15
nós precisamos fazer prédios cada vez
00:07:17
mais rápido mais rapidamente e o prédio
00:07:20
tem que ser confiável não pode cair
00:07:21
então só pra ter um evento simples a
00:07:26
custos da engenharia de software em
00:07:29
geral a gente gasta 60 por cento do
00:07:32
tempo desenvolvendo para propriamente
00:07:34
dito e 40% testando por conta justamente
00:07:39
que tem que ter bastante qualidade
00:07:41
melhores técnicas e métodos da
00:07:43
engenharia de software só por aqui
00:07:50
comparando o tamanho da informação que
00:07:52
nós temos aqui com o restante
00:07:54
vocês a só conseguem abstrair que não
00:07:57
não é fácil responder quais os melhores
00:07:59
técnicas e métodos porque existem muita
00:08:04
controvérsia qual é o melhor técnica
00:08:06
qual é o melhor método para você
00:08:08
desenvolver software e futuro vai
00:08:10
depender de qual a empresa de qual a
00:08:13
organização de que tipo de software
00:08:15
então se você está falando de um sistema
00:08:18
de um software crítico ou não que requer
00:08:21
muita segurança
00:08:22
enfim a gente vai ver essa disciplina
00:08:25
agora para tratar disso a e quais as
00:08:29
diferenças que foram introduzidas pela
00:08:31
internet muito de vocês talvez já na
00:08:33
feira num mundo em que a internet já
00:08:35
existia não é o meu caso
00:08:37
e a gente tem uma evolução muito grande
00:08:39
na engenharia de software por conta da
00:08:41
criação da internet também vamos tratar
00:08:44
um pouco de frio durante a disciplina
00:08:46
bom então para definir mais de uma forma
00:08:50
um pouco mais é sistemático que é um
00:08:53
processo de software
00:08:54
junto de todas as atividades
00:08:56
relacionadas que levam à produção de um
00:08:59
produto de software
00:09:00
nesse caso a gente pode pensar que um
00:09:02
software pode ser desenvolvido
00:09:04
totalmente do zero ou então estendido
00:09:07
você já tem um software você quer
00:09:09
melhorar aumentar o foster pra isso você
00:09:13
pode inclusive usar componentes de
00:09:16
software que já existem
00:09:17
juntando todos e criando um software
00:09:20
novo e de novo aqui
00:09:24
repetindo vocês vão ver isso em vários
00:09:26
slides durante o curso inteiro
00:09:29
disciplina inteira
00:09:30
quais são as atividades fundamentais da
00:09:32
engenheira de software especificação
00:09:34
projeto implementação validação e
00:09:37
evolução é esses nomes eles não são
00:09:41
exatamente sempre usado dessa forma a
00:09:45
parecer 155 12345 em outro lugar pode
00:09:50
aparecer três pode parecer 4 pode
00:09:52
parecer 7 podem aparecer com nomes
00:09:55
similares sinônimos então evite em
00:09:58
diferentes livros com diferentes autores
00:10:00
com diferentes professores
00:10:02
os nomes podem variar vocês vão ver que
00:10:04
inclusive slides nomes variam até porque
00:10:07
o material que eu estou usando como base
00:10:09
que o livro do senhor viu para poder ter
00:10:12
uma referência exata também varia e eu
00:10:15
estou tentando manter o mesmo padrão que
00:10:17
o brasil está usando
00:10:18
então não existe uma verdade absoluta em
00:10:21
termos de nomenclatura ok o mais
00:10:23
importante é você entender e
00:10:25
acompanharem a idéia abstração
00:10:31
bom então voltando aqui em termos de
00:10:34
modelos de processos de software
00:10:37
quais são os principais modelos seguidos
00:10:40
para a tratar o processo de software
00:10:46
nós quando nós pensamos em processo de
00:10:49
software nós temos a idéia de uma
00:10:52
representação simplificada como a idéia
00:10:55
de um exemplo
00:10:56
ok então que tipos de modelos que tipo
00:11:01
de exemplo que tipo de idéias nós
00:11:02
podemos ter
00:11:03
quando nós queremos organizar o processo
00:11:06
de desenvolvimento de software ciclo de
00:11:08
vida dentro de uma organização dentro de
00:11:11
uma empresa é como se fosse um tipo de
00:11:13
senhor que é uma palavra inglesa que nós
00:11:16
não temos exatamente uma tradução para o
00:11:20
português mas nenhuma delas é muito boa
00:11:23
então a gente acaba usando inglês mesmo
00:11:24
não é uma prática indesejável mas é uma
00:11:28
das palavras que a gente não consegue
00:11:29
inclusive software é uma palavra inglesa
00:11:32
que a gente não gosta de ouvir mas já
00:11:34
foi incorporada
00:11:36
mas enfim em três modelos de software
00:11:39
bastante tradicionais
00:11:41
agora com vocês o modelo cascata
00:11:44
incremental e orientada a seu uso
00:11:48
então o modelo em cascata em cascata
00:11:52
porque ele vai caindo ele vai descendo
00:11:55
como se fosse uma cascata
00:11:58
basicamente são aquelas etapas que eu
00:12:00
havia comentado com vocês
00:12:01
a definição de requisitos projeto
00:12:04
implementação e testes de integração e
00:12:07
outro tipo de teste e por fim na
00:12:09
operação e manutenção
00:12:11
então você vai executando cada uma das
00:12:15
etapas ea primeira vez que ele foi
00:12:17
apresentado ele foi apresentado dessa
00:12:20
forma essa parte é que ela nem existia e
00:12:25
então só existia essa ordem então
00:12:28
parecia uma cascata caindo
00:12:31
como não existia essa flechas voltando
00:12:36
estão voltando significava que você
00:12:39
fazia toda a definição de requisitos
00:12:41
depois fechava tudo depois você
00:12:44
participa do projeto
00:12:45
depois da implementação e assim por
00:12:47
diante mas logo percebeu que na prática
00:12:49
isso nunca aconteceu
00:12:51
na verdade você voltava a fazer um pouco
00:12:55
do projeto em algum momento você tinha
00:12:57
que voltar melhorar os requisitos sempre
00:13:00
você precisa voltar a fazer um pouco
00:13:01
então desde o primeiro dos primeiros
00:13:04
momentos da engenharia de softwares
00:13:06
percebeu-se que não dava pra fazer tudo
00:13:10
de uma etapa para de fechá la
00:13:12
completamente passar para a próxima
00:13:14
sexta la completamente passar para
00:13:16
próxima então em algum momento
00:13:20
sul já começou ficar mais claro ainda
00:13:23
conforme os próximos modelos de ciclo de
00:13:27
vida de do processo de software
00:13:28
começaram a aparecer até que então é
00:13:32
formalmente apareceram os que começaram
00:13:35
a ser chamado de desenvolvimento
00:13:36
incremental
00:13:38
aqui fica bastante claro essas
00:13:41
interações que revistem então começa
00:13:45
criando um esboço
00:13:46
a partir desses bolso é feito um
00:13:49
desenvolvimento especificação validação
00:13:52
então você desenvolve um pouco
00:13:54
específico um pouco volta desenvolver um
00:13:56
pouco valida um pouco é o que foi
00:13:59
desenvolvido então você fica nesse ciclo
00:14:02
aqui e nem voltando específica
00:14:04
desenvolve válida volta desenvolver mais
00:14:06
um pouco de envolve mais um pouco por
00:14:08
isso que ele é chamado e incremental
00:14:10
então você vai você tem uma versão
00:14:14
inicial
00:14:15
você tem algumas versões intermediárias
00:14:17
até que em algum momento você chega na
00:14:20
versão final
00:14:21
por isso chamado incremental diferentes
00:14:25
versões de um ciclo de vida implementar
00:14:31
um outro modelo de vida que é tocado na
00:14:37
parte de reuso o que significa aquela
00:14:40
idéia de que você tem partes prontas do
00:14:43
desenvolvimento de software que você vai
00:14:48
desenvolver um software pegando essas
00:14:50
partes linhas é como você construiu uma
00:14:53
casa de novo
00:14:58
você vai pegar uma casa com um mês você
00:15:01
colocou um tijolinho por tijolinho você
00:15:03
vai pegar partes pré montadas prontas e
00:15:05
você vai juntando essas partes prontas
00:15:08
pra construir a casa ou prédio de uma
00:15:11
forma mais rápida então você tem o que
00:15:13
nós chamamos de componentes de software
00:15:15
prontos os componentes que já existem
00:15:24
por conta desse componente talvez você
00:15:26
altere os requisitos para que de novo se
00:15:31
uma casa e aí você quer usar parte
00:15:33
pronta
00:15:34
pedaços prontos uma casa mas neles não
00:15:36
se adéqua exatamente aquela ideia
00:15:38
inicial da casa que você tinha mais
00:15:39
força vamos mudar um pouco a idéia da
00:15:41
casa para poder aproveitar aqueles
00:15:43
componentes que já estão prontos e devem
00:15:45
ficar mais barato no software você pode
00:15:47
fazer a mesma coisa e aí você projeta
00:15:50
aquele sistema com os reuso você
00:15:52
desenvolve e integra aqueles componentes
00:15:55
por sim você valida seu sistema bom
00:15:59
independentemente de novo na
00:16:01
independentemente de qual modelo você
00:16:03
vai seguir você pode querer sempre
00:16:07
especificar sempre desenvolver sem
00:16:09
finalidade e por sim você evoluir
00:16:12
software então percebam eu mostrei três
00:16:15
eventos básicos de modelo ciclo de vida
00:16:18
basicamente está na ordem de evolução
00:16:21
histórica é mas sempre vai ter de alguma
00:16:25
forma idéia de você vê o seu cliente que
00:16:28
é especificado alguma forma
00:16:31
baseado nisso projetar o software
00:16:34
implementar o software e validar que
00:16:36
está a forma a ordem que você vai fazer
00:16:40
isso que você vai tentar fazer de uma
00:16:42
forma é pecadinho não ficar dinho vai
00:16:47
envolver mais pessoas de um tipo mais
00:16:49
pessoas de outro
00:16:50
isso vai começar a mudar e você vai ter
00:16:52
visões um pouco mais um jeito um pouco
00:16:54
mais de outro e isso é o que ele chama
00:16:56
dos modelos ok mas a ideia é o tipo de
00:17:00
atividade vai ser muito parecido
00:17:02
então quando a gente está falando na
00:17:05
parte de requisitos propriamente dito
00:17:07
a gente começa depois poder quebrar e
00:17:10
então aquele modelo que apresenta antes
00:17:13
é um grande ciclo de vida depois cada
00:17:16
uma daquelas atividades por sua vez são
00:17:18
quebradas por exemplo a engenharia de a
00:17:21
partir de requisitos de certificação
00:17:23
nesse quesito a gente pode primeiro
00:17:25
fazer um estudo de viabilidade será que
00:17:28
aquilo que o cliente está pedindo
00:17:29
realmente pode ser desenvolvido
00:17:31
ok pode passou se não a gente à porta
00:17:35
aí eu faço a coleta de requisitos e
00:17:38
depois baseado na coleta que pode ser
00:17:41
uma lista simples não faço há
00:17:43
especificação é um documento mais formal
00:17:45
de requisitos
00:17:46
depois que eu tenho
00:17:48
esse documento eu válido com o cliente
00:17:51
olha isso que eu escrevi que é o que eu
00:17:53
entendi que você quer realmente o que
00:17:55
você quer
00:17:56
então veja eu criei aqui quatro
00:17:58
atividade pra desde pegarem a primeira
00:18:02
conversa com o cliente até chegar lá e
00:18:05
falar cliente é isso mesmo que você quer
00:18:08
bater o martelo para a gente seguir
00:18:10
adiante
00:18:11
ok seguimos adiante então nós vamos para
00:18:14
o projeto né
00:18:16
vamos projetar o que vai ser feito
00:18:18
baseado no que o cliente que é então
00:18:21
passando chega tendo como entrada a
00:18:24
especificação de requisitos
00:18:27
nós precisamos então chegar na
00:18:29
arquitetura do sistema de banco de dados
00:18:34
como será a interface como serão os
00:18:37
componentes que eu vou desenvolver ou
00:18:39
vou aproveitar que já estão
00:18:40
desenvolvidos
00:18:41
é como se desenvolver aqui de novo
00:18:43
pensando na engenharia civil é como se
00:18:46
eu tivesse aqui
00:18:47
o projeto arquitetônico o projeto
00:18:50
hidráulico o projeto elétrico e outros
00:18:55
projetos aqui também existem áreas de
00:18:57
civil
00:18:58
estou pegando que o evento mais simples
00:19:00
de como leigo que eu conheço
00:19:02
enfim baseado na especificação de
00:19:04
requisitos eu chego nos diferentes tipos
00:19:06
de projeto esse projeto é que vou passar
00:19:10
o implementador realmente implementar o
00:19:12
código o software e aí
00:19:15
aqui é como eu transformo isso mesmo é
00:19:18
que eu tenho um aterro uma ideia não
00:19:21
precisa ser feita dessa forma
00:19:23
mas eu desenvolvo primeiro esse projeto
00:19:25
baseado nesse projeto desenvolve dois
00:19:27
projetos nem aqui a arquitetura baseada
00:19:30
na arquitetura desenvolveu interface que
00:19:32
o banco de dados baseado na interface do
00:19:34
google os componentes e os componentes
00:19:36
também vão ser usados para o banco de
00:19:38
dados então para o banco de dados é
00:19:40
preciso da arquitetura e dos componentes
00:19:42
bom aqui daqui então eu faço
00:19:46
implementação e baseado na implementação
00:19:49
então tem os testes uma ideia também
00:19:52
para testes porque é um modelo
00:19:54
eu posso testar cada componente juntando
00:19:57
cá todos os componentes do sistema como
00:20:00
um todo
00:20:01
71 do sistema eu tenho que testar a
00:20:05
aceitação já junto do cliente clientes
00:20:09
esse é o sistema vamos testar para saber
00:20:11
se você aceita ou não
00:20:12
uma outra idéia de um outro modelo de
00:20:15
teste que é ter um plano baseado em cada
00:20:24
etapa os planos de testes só pra mostrar
00:20:33
pra vocês que existem modelos idéias de
00:20:35
como fazer as coisas e aí eu faço o
00:20:38
teste da integração o teste do sistema
00:20:40
um teste de aceitação que são as mesmas
00:20:44
idéias que estavam aqui de uma forma
00:20:46
mais detalhada para fazer cada um
00:20:48
daqueles prestes
00:20:49
eu tenho diferentes formas de ver e por
00:20:55
fim
00:20:56
entreguei para o cliente eu preciso
00:20:58
evoluir evoluir significa avaliar o
00:21:02
sistema que eu tenho e propor mudanças
00:21:06
essas mudanças podem inclusive serve
00:21:08
para corrigir erros modificar o sistema
00:21:10
e chegar em um novo sistema
00:21:14
então com isso a gente viu o geral da
00:21:18
engenharia de software como um todo
00:21:20
ficando claro que são vários modelos
00:21:23
várias idéias que foram apresentadas e
00:21:26
cada provocado organização definir
00:21:29
exatamente a sua forma de desenvolver
00:21:32
software então nas próximas aulas a
00:21:34
gente começa a definir um começar a
00:21:38
entrar um pouco em cada uma dessas cada
00:21:43
uma dessas etapas
00:21:44
ainda vamos falar um pouquinho mais
00:21:46
histórico é inclusive ainda abordar um
00:21:49
pouco da questão dos métodos marcha
00:21:52
obrigado
00:21:54
[Música]
00:22:14
[Música]
00:22:23
[Música]
00:22:31
[Música]
00:22:40
ah