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