Buscar

PlanoDeAula_371291

Prévia do material em texto

Plano	de	Aula:	Fundamentos	da	Engenharia	de	Software
FUNDAMENTOS	DE	ENGENHARIA	DE
SOFTWARE	-	CCT0643
Título
Fundamentos	da	Engenharia	de	Software
Número	de	Aulas	por	Semana
Número	de	Semana	de	Aula
1
Tema
Fundamentos	da	Engenharia	de	Software
Objetivos
Identificar	os	problemas	que	culminaram	com	a	"crise	do	software",	bem	como
os	mitos	do	processo	de	desenvolvimento	de	software
Reconhecer	a	necessidade	do	desenvolvimento	de	software	ser	com	base	em
princípios	da	engenharia	(de	software).	
Discutir	os	princípios,	camadas,	procedimentos,	métodos	e	técnicas	inerentes
a	engenharia	de	software
Estrutura	do	Conteúdo
Unidade	I-Fundamentos:	Software	e	Engenharia	de	Software
1.1.	O	software
				-	O	sistema	computacional	é	composto	de	2	subsistemas	fundamentais:	O
software	e	o	hardware.
				-	O	software	é	o	subsistema	computacional	que	instrui	ao	hardware	o	que
deve	ser	feito.	Contém	as	instruções,	na	ordem,	que	devem	ser	executadas
pelos	componentes	do	subsistema	hardware.
				-	O	software	é	um	elemento	lógico	do	sistema	computacional	e	o	hardware
um	elemento	físico.
				-	Um	sistema	de	informação	é	um	software.	Um	jogo	é	um	software.	Um
aplicativo	de	celular	é	um	software.	Um	sistema	de	informações	estratégicas	é
um	software.	As	redes	sociais	são	softwares.	Aplicativos	de	celular	são
software.	Aplicativos	que	rodam	na	nuvem	são	software.
				-	Os	softwares	hoje	estão	presentes	em	todos	os	lugares,	seja	no	lazer,	seja
nas	atividades	laborais.	Os	eletrodomésticos	como	maquina	de	lavar	roupa,
geladeiras	e	televisões	são	dotadas	de	software	que	lhes	conferem
determinadas	possibilidades	de	automação.
				-		O	papel	desempenhado	pelo	software	vem	sofrendo	profundas	alterações
ao	longo	dos	últimos	40	anos,	resultando	em	softwares	modernos,	grandes,
complexos	e	integrados,	na	medida	em	que	abrangem	a	empresa	como	um
todo	e	precisam	se	comunicar,	de	forma	a	evitar	redundâncias	e	informações
incoerentes.
	
1.1.1.	A	natureza	do	Software
Destacar	os	aspectos	abaixo,	dentre	outros,
		-	O	papel	do	software	passou	por	mudanças	significativas,	nos	últimos	50
anos,	impulsionado	por	consistentes	evoluções	na	capacidade	de
processamento	e	armazenamento,	internet,	dispositivos	móveis	e	outras
tecnologias.
		-	O	software	ganha	relevância	na	empresa,	na	medida	em	que	distribui
informação	
		-	O	software	ganhar	contorno	de	destaque	e	atenção,	na	medida	em	que
integra	os	diversos	setores	e	softwares	da	empresa	
		-	O	software	torna-se	complexo	na	medida	em	que	agrega	muitas
funcionalidades	e	usuários,	espalhados	geograficamente.
		-	Destacar	a	existência	de	softwares	legados	(desenvolvido	há	bastante
tempo	e	que	vem	sendo	mantido	para	adequar-se	a	realidade	do	negócio	e	a
evolução	das	plataformas	computacionais.		Softwares	legados	podem	sofrer
problemas	derivados	de	sua	baixa	qualidade,	como:	dificuldade	de	estender	o
software,		entender	o	código	(linguagens	com	baixa	legibilidade	e/ou	código
mal	escrito),	alterações	mal	gerenciadas.	Mas	que	apesar	disse,	muitas	vezes
são	vitais	ao	negócio.
		-	O	software	legado	sofre	alterações	quando:	precisam	de	adaptações	para
atender	a	novos	ambientes,	novas	tecnologias	e	plataformas	computacionais,
novos	requisitos	de	negócio,	ser	integrado	com	ferramentas	mais	modernas
(softwares,	bancos	de	dados	e	etc),	
		-	Destacar	que	a	engenharia	de	software	visa	propiciar	o	desenvolvimento	de
software	com	maior	capacidade	evolutiva	(maior	e	mais	eficiente	ciclo	de
manutenção)
1.1.2.	A	natureza	mutante	do	Software
Destacar	os	aspectos	que	fazem	do	software	um	elemento	complexo	de	ser
desenvolvido	e	gerenciado,	na	medida	em	que	faz	uso	de	recursos	caros
(humanos	e	materiais).	
		-	O	software	é	criado	e	projeto	com	base	em	expressão	das	necessidades	de
seus	usuários,	os	requisitos	do	sistema.
		-	Por	essência,	os	requisitos	mudam,	na	medida	em	que	as	empresas
evoluem,	mudam	seus	processos,	reorganizam	suas	estratégicas,	reagem	a
ações	de	seus	concorrentes	e	ainda	sofrem	influência	do	meio	em	que	estão
inseridos.
		-	Não	bastassem	as	mudanças	de	requisitos,	as	softwares	evoluem	conforme
as	tendências	tecnológicas	em	função	de	plataformas	computacionais	mais
adequadas,	especialmente	aqueles	que	são	promissoras	na	redução	de	custo
ou	maximização	da	receita.	Pode-se	destacar	:	evolução	de	hiperlinks	para
webapps;	aplicações	da	inteligência	artificial;	aplicativos	móveis;	Computação
em	nuvem
1.2	O	desenvolvimento	do	software
				-	Da	mesma	forma	que	o	papel	do	software	vem	se	transformando	e	se
destacando	na	sociedade,	o	seu		processo	de	desenvolvimento	precisa
acompanhar	essa	evolução.	De	programadores	solitários	que	interagia	no
máximo	com	analistas	de	sistemas	e	projetistas	de	softwares,	passamos	a	ter
uma	equipe	multidisciplinar,	onde	cada	um	concentra-se	numa	parte	da
tecnologia.
					-	Apesar	da	mudança	as	questões	que	permeiam	o	desenvolvimento	de
software,	as	questões,	as	problemáticas	são	as	mesmas:	1.	Por	que	leva-se
tanto	tempo	desenvolvendo	software	?	Por	que	os	custos	são	tão	elevados?
Por	que	nem	todos	os	erros	são	detectados	antes	da	entrega	do	produto	de
software?	Por	que	ainda	temos	dificuldades	em	estimar	e	medir	o	progresso	do
desenvolvimento	do	software	?
1.2.1.	A	crise	do	software
				-	O	termo	foi	cunhado	nos	anos	70,	quando	os	conceitos	de	engenharia	de
software	ainda	não	existiam.	
				-	Crise	do	software	caracterizou	um	momento,	dessa	época,	em	que	as
necessidades	de	desenvolvimento	eram	superiores	a	capacidade	de	produção
de	softwares,	pela	complexidade	dos	problemas	e	da	ausência	de	técnicas	e
diretrizes	para	o	desenvolvimento	de	software	com	qualidade.
				-	As	evidências	da	crise	do	software	eram:	Projetos	mal	sucedidos,	que	não
chegavam	ao	fim,	ou	quando	chegavam,	o	software	gerado	não	atendia
(plenamente)	a	seus	usuários,	ou	os	prazos	eram	extrapolados,	assim	como	os
custos.	Não	havia	uma	gestão	efetiva	da	qualidade	no	processo	de
desenvolvimento,	que	a	essa	altura	não	era	visto	como	um	projeto.
1.2.2.	Os	mitos	do	software
Apresentar	os	mitos,	compreendendo,	dentre	outros:
				-	Mito:	se	o	cronograma	atrasar,	podemos	acrescentar	programadores	->	a
inserção	de	programadores	ou	outros	profissionais		pode	atrasar	mais	ainda,
pois	aumenta	a	complexidade	de	controle,	além	do	tempo	necessário	a	essa
pessoa	para	entender	o	software.
				-	Mito:	se	terceirizarmos	o	desenvolvimento	poderemos	relaxar	e	deixar	o
terceiro	desenvolver	->	Se	a	empresa	não	gerenciar	e	controlar	o
desenvolvimento	terá	dificuldades	em	terceirizar	a	tarefa.	O	software	em
desenvolvimento	pode	demandar	integração	com	sistemas	existentes	e	que	o
terceiro	desconheça,	por	exemplo.
				-	Mito:	uma	definição	geral	dos	objetivos	é	suficiente	para	iniciar	a	escrita
dos	programas	-->	dificilmente	temos	condições	de	reunir	todos	os	requisitos
no	início,	além	dos	mesmos	serem	ambíguos,	o	que	pode	ser	resolvido	com
efetiva	interação	entre	equipe	de	desenvolvimento	e	usuários.
					-	Mito:	uma	vez	desenvolvidos	e	postos	em	uso	os	programas,	finda	o
trabalho	da	equipe	de	desenvolvimento.	->	nesse	momento,	da	implantação
surgem	os	erros,	derivados	de	um	processo	mal	concebido.	Levantamentos
indicam	que	de	60%	a	80%	de	todo	o	esforço	será	despendido	após	a	entrega
aos	usuários	pela	primeira	vez.
					-	Mito:	Até	que	o	programa	entre	em	funcionamento	não	temos	como	avaliar
->	mecanismos	de	aferição	de	qualidade	podem	e	devem	ser	inseridos	no
processo	desde	a	concepção	do	software	ate	seu	completo	desenvolvimento.
Processo	e	produtos	precisam	ser	avaliados,	quanto	a	qualidade.	
				-	Mito:	a	engenharia	de	software	nos	fará	produzir	documentação	volumosa
e	desnecessária	e,	invariavelmente	vai	retardar	o	desenvolvimento	-->
engenharia	de	software	não	foca	em	documentação	e	sim	no	desenvolvimento
de	qualidade,	o	que	tende	a	reduzir	o	trabalho.
1.2.3.	Processo	de	Software
				-	Embora	sejam	duas	tecnologias	integradas,	em	que	ambas
demanda	qualidade,	a	forma	e	o	processo	do	desenvolvimento	é	diferenciado,
em	função	das	diferentes	característica	de	ambos.	É	notório	o	maior
sucesso	e	possibilidade	de	padronizaçãono	processo	de	desenvolvimento
de	hardware.
				-	Os	custos	do	software	estão	concentrados	no	processo	de
desenvolvimento.
				-	O	software	não	se	desgasta,	como	os	componentes	físicos	do	hardware.
No	processo	de	desenvolvimento	do	hardware	os	problemas	tendem	a
acontecer	em	2	momentos:	no	inicio	do	processo	de	fabricação	por	erro	ou
defeito	no	componente	(que	uma	vez	substituído	resolve	o	problema)	ou	no
final,	por	desgaste	físico	dos	componentes.	No	processo	de	desenvolvimento
do	software	os	erros	não	descobertos	inicialmente	resultarão	em	taxas	de
erro	no	inicio	de	sua	vida.	Como	não	há	desgaste,	se	resolvido,	tende	a	se
estabilizar.	Mas	isso	não	tem	sido	fato	!!!.	Porém	software	requer	alterações,
que	podem	demandar	novos	erros,	ao	longo	de	sua	vida.	Antes	que	o	software
se	estabilize	novas	demandas	de	alterações	podem	ser	solicitadas.	Ou	seja	o
software	se	deteriora	pelas	alterações	necessárias	a	sua	atualização.	Outro
aspecto:	defeito	de	hardware	podem	ser	resolvidos	com	a	substituição	do
componente	problemático.	Com	software	isso	não	acontece,	pois	o	erro	indica
falha	no	projeto	ou	no	processo.
				-	embora	o	desenvolvimento	de	software	almeje	aproximar-se	do
desenvolvimento	do	hardware,	a	construção	com	base	em	componentes	ainda
não	é	efetiva.	No	mundo	do	hardware	a	reutilização	de	componentes	é	natural.
Já	no	software	esse	componente	esse	componente	deve	ser	projetado	e
construído	de	forma	a	ser	usados	em	diferentes	softwares,	o	que	nem	sempre
é	bem	feito.
		
1.2.4	Engenharia	de	Software
1.2.4.1.	Conceitos
				-	A	Engenharia	de	software	compreende	a	escolha	de	um	processo,	de	um
conjunto	de	métodos,	com	auxilio	de	ferramentas	que	permitam	o
desenvolvimento	de	um	software	que	atendam	as	necessidades	de
seus	usuários,	com	alto	padrão	de	qualidade.
				-	O	foco	da	engenharia	de	software	ocorre	na	medida	em	que	possibilita	o
desenvolvimento	de	softwares	grandes	e	complexos,	dentro	do	prazo,	usando
os	recursos	destinados	e	com	qualidade.
				-	Na	prática,	a	engenharia	de	software	abrange:	compreensão	do	problema
(levantamento	e	entendimento	dos	requisitos),	Planejamento	de	uma	solução
(analise	e	projeto	do	software),	execução	do	plano	(codificação	da	solução
analisada	e	projetada)	e	examine	o	resultado	(testes	e	garantias	de
qualidade).
				-	A	engenharia	de	software	preconiza	a	aferição	da	qualidade	durante	o
processo	do	desenvolvimento	e	no	produto	de	software	resultante.
1.2.4.2.	Camadas
				-	A	engenharia	de	software	é	uma	tecnologia	em	camadas.
				-	As	camadas	da	engenharia	de	software	são:	Foco	na	qualidade,	Processo,
Métodos	e	Ferramentas.
				-	A	camada	de	processos	é	a	base,	onde	se	define	a	metodologia
de	trabalho,	para	o	desenvolvimento	do	software.
				-	A	camada	de	métodos	é	que	a	da	sustentação	técnica	para	o
desenvolvimento	do	software.	Os	métodos	envolvem	as	tarefas	do
processo:	requisitos,	análise,	projeto,	codificação,	testes	e	manutenção.	Os
métodos	definem	ainda	as	atividades	de	modelagem,	por	exemplo.
				-	A	camada	de	Ferramentas	fornece	apoio	para	automação	do	processo	e
de	determinados	métodos.
				-	A	camada	de	apoio	a	qualidade	define	um	conjunto	de	métricas,	aspectos
de	qualidade,	gestão	e	monitoramento	da	qualidade	não	apenas	do	processo,
mas	também	do	produto	de	software.	
1.2.4.3.	O	processo	de	desenvolvimento	de	software
				-	Segundo	Pressman,	uma	metodologia	genérica	de	processos	para
engenharia	de	software	compreende	5	atividades	metodológicas.
				-	1.	Comunicação	-	A	interlocução	com	os	interessados	no	sistema	é
fundamental.
				-	2.	Planejamento	-	o	desenvolvimento	de	software	envolve	a	gestão	de
recursos	(financeiro,	tempo	e	materiais),	diante	da	possibilidade	de	riscos	,
para	que	os	produtos	resultantes	possam	ser	desenvolvidos	com	qualidade.
				-	3.	Modelagem	-	para	que	se	possam	compreende	as	necessidades	dos
usuários,	as	ideias	de	solução	são	esboçadas	em	diagramas,	desde	modelos
iniciais	até	modelos	mais	detalhados	e	complexos.	Os	modelos	ajuda	na
comunicação	e	no	planejamento.
				-	4.	Construção	-	construção	de	código	e	testes	para	identificar	erros.
				-	5.	Emprego	-	feedback	dado	pelo	usuário,	ao	emprego	do	software,	após
sua	entrega.
				-	Com	essas	5	atividades	é	possível	desenvolver	software	grandes	e
pequenos,	simples	e	complexos.
				-	Além	dessas	5	atividades	metodológicas	temos	as	atividades	de	apoio	que
são:	Controle	e	acompanhamento	do	projeto,	administração	de	riscos,
garantia	da	qualidade,	revisões	técnicas,	medição,	gerenciamento	de
configurações	de	software,	gerenciamento	de	usabilidade,	preparo	e	produção
de	artefatos	de	software
Aplicação	Prática	Teórica
Apontar	aos	alunos	exemplos	de	projetos	de	software	que	fracassaram,
identificando	os	problemas	e	possíveis	causas.
Apontar	aos	alunos	exemplos	de	projeto	de	software	que	tiveram	sucesso,
identificando	particularidades	do	processo	de	desenvolvimento	e	do
gerenciamento	do	projeto.

Continue navegando