Uncategorized

Resumo do Livro Engenharia de Software de Ian Sommerville 8ª Ed.

Segue um resumo que preparei do livro de Ian Sommerville  – Engenharia de Software 8ª Ed. Esse resumo aborda os principais tópicos dos capítulos 1 ao 7. Aproveitem! Imagem

Introdução a Eng. De Software

É um ramo da engenharia com foco no desenvolvimento de softwares dentro de custos, prazos adequados e alta qualidade. Software é abstrato, não há limitações físicas. Essa falta de limitações pode torna-lo extremamente complexo e de difícil compreensão.

O conceito de ES foi proposto em 1968 em uma conferência para discutir o que foi chamado de “crise do software”, que resultava do surgimento de novos hardwares de computadores baseados em CI’s e tornava sistemas impensáveis até então em projetos realizáveis e mais complexos que os anteriores. O desenvolvimento informal não era suficiente, atraso, não confiável, difícil de manter, baixo desempenho. Novas técnicas surgiram pois o custo do hardware caía enquanto do software aumentava. Até hoje em dia essas técnicas não são aplicadas efetivamente por muitas empresas.

O QUE É SOFTWARE?

                Além do programa executável, são todos os dados de documentação(sistema e usuário), arquivos de conf. necessários a operação do software.

Existem 2 tipos de produtos de software:

  1. Produtos genéricos: Sistemas do tipo Stand-alone e vendido no mercado para qualquer cliente;
  2. Produtos sob encomenda (ou personalizados):  Encomendado por um determinado cliente/ ou modificado para ele;

DIFERENÇAS:

Nos produtos genéricos quem controla a especificação é a empresa que desenvolve. Já nos produtos sob encomenda, essa especificação é controlada pela empresa que compra o produto.  Existe também o caso em que um produto genérico é modificado para atender um cliente específico (ERP’s como SAP).

O QUE É ENG. DE SOFT.?

É uma disciplina de engenharia relacionada com todos os aspectos da produção de software, desde a especificação até a manutenção.

Por que Disciplina? – Os engenheiros aplicam teorias métodos e ferramentas onde for apropriado e de forma seletiva mesmo quando não existem teorias e métodos aplicáveis, e fazem as coisas funcionarem.  Trabalham também sob restrições organizacionais e financeiras.

Todos os aspectos? – Porque também se relaciona com atividades do gerenciamento do projeto, desenvolvimento de ferramentas, métodos e teorias que apoiem a produção.

Em geral utiliza-se uma abordagem sistemática e organizada, mas pode ser extremamente eficaz selecionar uma abordagem alternativa e menos formal para uma determinada circunstância.

DIFERENÇA ENTRE E.S. E C.C.

A C.C. diz respeito as teorias e os métodos que formam a base para computadores e softwares. A E.S. se dedica aos problemas práticos da produção de software. Teorias mais elaboradas da C.C. nem sempre podem ser aplicadas a E.S. nos seus problemas reais e complexos.

DIFERENÇA ENTRE ENG. DE SOFTWARE E DE SISTEMAS

A Eng. Sistemas trata de todos os aspectos do desenvolvimento e da evolução de sistemas complexos. Relacionada ao desenvolvimento de hardware, políticas e processos de implantação e a própria Eng. De Soft. Mais envolvida com definição de arquitetura, integração de partes e menos envolvidos com eng. Dos componentes, hardware, software etc.   Enquanto a Eng. De Soft. se dedica aos problemas práticos da produção do software e faz parte da engenharia de sistemas.

O QUE É PROCESSO DE SOFTWARE?

É um conjunto de atividades e resultados associados que produz um produto de software(software, documentação, etc).

Atividades de processos comuns a todos os processos:

1 – Especificação: Definição do que será produzido;

2 – Desenvolvimento: Projetado e programado;

3 – Validação: Verificação se o que foi feito é o que o cliente deseja.

4 – Evolução: Adaptação as mudanças futuras e/ou melhorias;

Diferentes tipos de sistemas necessitam de diferentes tipos de desenvolvimento. Ex.: Alguns podem requerer que sejam especificados totalmente antes do desenvolvimento, para outros, essas atividades podem ocorrem em paralelo. O uso de um processo inadequado pode reduzir a qualidade ou a utilidade do produto de software a ser desenvolvido e/ou aumentando os custos de desenvolvimento.

O QUE É UM MODELO DE PROCESSO DE SOFTWARE?

É uma descrição simplificada do processo sob uma determinada visão. Os modelos incluem atividades do processo, produtos de software e os papéis das pessoas envolvidas.

A maioria dos modelos é baseada em um dos 3 modelos gerais ou paradigmas de desenvolvimento:

  • CASCATA – Fases separadas de processos. Uma fase não inicia sem que outra termine e seja aprovada.
  • DESENVOLVIMENTO ITERATIVO – Intercala as atividades. Desenvolvido rapidamente com base em especificações abstratas e depois é refinado com informações dos clientes para que possa satisfazer a necessidade desse.
  • E.S. BASEADA EM COMPONENTES – Supões que partes do sistema da já existem. Concentra-se mais na integração dessas partes do que no seu desenvolvimento a partir do início.

QUAIS SÃO OS CUSTOS DA ENG. DE SOFT.?

Não existe uma resposta simples. No modelo cascata, os custos de especificação, projeto, implementação e integração são medidos separadamente. Nesse caso, integração e testes são as atividades mais caras, entre 40 e 50% do custo total de desenvolvimento.

Na abordagem iterativa, não existe uma linha precisa entre especificação, projeto e desenvolvimento. Custos de especificação reduzidos, pois apenas uma especificação de alto nível é produzida antes do desenvolvimento, e também precisa de uma atividade de teste independente uma vez que a implementação inicial esteja completa.

A CBSE  tem sido aplicada  apenas nos últimos tempos, e sabemos que os custos de desenvolvimento são menores que os custos de integração e testes, porque é necessário assegurar que os componentes utilizados, realmente satisfazem as especificações e funcionam conforme o esperado, mas além disso não há dados precisos para os custos.

Custos também incorrem em alterações após a sua liberação para o uso. Os custos de evolução variam muito de acordo com o tipo de sistema.

Essa abordagem de custos é válida para softwares sob encomenda.  Nos produtos genéricos, há uma abordagem evolucionária, e os custos de especificação são relativamente baixos. Já os custos de testes são mais altos justamente por serem previstos para rodar em diferentes ambientes de configuração.

Os custos de evolução de produtos genéricos são relativamente difíceis de serem estimados, pois não são avaliados separadamente como nos softwares sob encomenda, mas são simplesmente custos de desenvolvimento.

O QUE SÃO MÉTODOS DE ENG. DE SOFTWARE?

                Um método é uma abordagem estruturada para o desenvolvimento de software, cujo objetivo é facilitar a produção de software de alta qualidade dentro de custos adequados. Não há um método ideal, e diferentes métodos possuem diferentes áreas onde são mais aplicáveis. Todos os métodos são baseados na ideia de modelos de desenvolvimento.

O QUE É CASE?

São ferramentas utilizadas para dar apoio as atividades do processo de software, tais como análise, modelagem, depuração e testes. Todos os métodos vêm atualmente com uma tecnologia case associada.

OQUE SÃO ATRIBUTOS DE UM BOM SOFTWARE?

Os atributos de um software refletem o comportamento do software, enquanto esse está em execução, sua estrutura e organização dos fontes bem como a documentação associada.

Alguns atributos: Facilidade de entendimento dos fontes, tempo de resposta a uma consulta. O conjunto de atributos varia de acordo com a sua aplicação. Pode-se resumir em: Facilidade de manutenção, confiança, eficiência e aceitação.

QUAIS SÃO OS DESAFIOS CHAVES DA E.S.?

Hoje a E.S. se depara com 3 desafios:

Desafio da heterogeneidade: É necessário que os sistemas de software operem com sistemas distribuídos e também com sistemas mais antigos (legados). Necessário técnicas para desenvolver sistemas flexíveis e confiáveis para adaptar-se a essa heterogeneidade.

Desafio de entrega: Muitas técnicas tradicionais demandam tempo para obter a qualidade. O desafio da entrega consiste em reduzir os tempos de entrega dos sistemas grandes e complexos sem comprometer a qualidade.

Desafio da confiança:  Os softwares estão presentes em todos os aspectos da nossa vida e precisamos confiar nele. O desafio da confiança consiste em desenvolver técnicas que demonstrem aos usuários que é possível confiar nele.

RESPONSABILIDADE PROFISSIONAL E ÉTICA

Confidencialidade: respeitar a confidencialidade de seus funcionários ou clientes independente ou não de acordo formal.

Competência: Não deve conscientemente aceitar um trabalho que esteja fora da sua competência.

Direitos sobre propriedade intelectual: Estar ciente das leis locais, patentes e assegurar que a propriedade intelectual de funcionários e clientes esteja protegida.

Mau uso de computadores: Evitar mau uso desde o trivial (como jogos por exemplo) até o mais sério (disseminação de vírus).

Baixar o Resumo no formato PDF.

Abraços!

Padrão
Eventos, Mova-se, Uncategorized

Meu primeiro TDC – (2010 São Paulo) – A Luz no fim do túnel

Imagem

Quem já participou de alguma edição do T.D.C., sabe do que estou falando.  Através de um amigo meu (Marcos Dallagnelo) fiquei sabendo de um evento para desenvolvedores que aconteceria em São Paulo. Ao dar uma olhada na grade de palestras fiquei impressionado com a variedade de tecnologias abordadas além de nomes bem conhecidos da comunidade de desenvolvimento. Decidimos ir e participar de todos os dias (na época eram 3 dias). Saímos de Joinville-SC às 21:30 com destino a São Paulo. A viagem levou em torno de 8 horas, e próximo às 05:30 da manhã já estávamos na rodoviária do Tietê. Tomamos um banho e pegamos o metrô até a paulista.

Chegando lá, tomamos um café com aquelas moças que vendem bolinhos e copos de café na beira da avenida (achei bem barato até rsrs) e em seguida partimos para a universidade Anhembi Morumbi. Às 07:00 horas já estávamos em frente a universidade aguardando o início do evento, enquanto isso ficamos ali trocando uma ideia e fazendo um networking, foi bem legal! Eu estava com medo que o sono batesse forte durante o evento, pois oito horas de estrada deixam você desgastado.  Esse era nosso primeiro dia no TDC, sexta feira 21/08. Nesse dia participamos da trilha de testes. Fomos para o auditório principal da universidade onde ocorreu a abertura daquele primeiro dia de evento. Já de início pudemos perceber que o dia seria promissor, além do nível dos palestrantes, organização, e a variedade de tópicos abordados atenderia a todas as expectativas do público ali presente. O sono bateu? Lógico que não, era impossível estar no TDC e cochilar. Uma grande maioria dos colegas participantes comigo (presentes na sala) eram da área de testes (claro, eu estava na trilha de testes). Como sei da importância de testar bem uma aplicação, participei dessa trilha, e vi coisas fantásticas, imagina para quem é tester!

O Sábado foi a vez do .Net, aí sim já estava em casa. Foi a partir desse dia que comecei a ver a luz no fim do túnel, comecei a ver tecnologias e abordagens totalmente novas e isso empolga muito! Digo que comecei a ver luz no fim do túnel porque foi a partir daí que comecei a me dedicar em aprender ainda mais sobre a tecnologia e explorar ao máximo as ferramentas que utilizo. Vi que o que eu vinha fazendo era algo como “Martelada Designer”, fazendo tudo apenas com if, while e for. Posso afirmar que esse evento foi um marco na minha vida profissional, a partir daí passei a estar ligado em comunidades, eventos e tudo o que diz respeito a isso. Cheguei a dar palestras em universidades aqui da região e escrever alguns artigos para a revista .Net magazine (a qual devido a outros projetos me afastei temporariamente, logo volto).

Faltou o terceiro dia né, bom o terceiro dia foi o dia do Agile, para fechar com chave de ouro a mudança que vivi. Palestras que abordavam diversas perspectivas em torno da agilidade e uma demostração de coach ao final do dia foi sem dúvida espetacular. Já estamos no domingo e é hora de retornar para Joinville. Saímos as 22:30 de São Paulo e perto das 06:00 já estávamos em casa. Então um banho e voltar a realidade.

Participei do TDC 2011 em Floripa e sempre que posso estou presente nesse evento. Vale muito a pena participar de um evento como esse, você volta com outra visão do que faz no dia a dia. Recomendo.

Agora estamos com o TDC 2013 saindo do forno, eu quero estar presente nesse também, e quem puder participe, vale a pena!

Abraços!

Padrão
Uncategorized

Uma linguagem necessária

Esse texto é na verdade um resumo de uma conversa que tive com um professor um dia desses pelo corredor da universidade onde estudo aqui em Joinville (Udesc).

Como profissional de tecnologia tenho visto que muitos dos colegas de profissão não dão a devida importância para uma linguagem extremamente necessária, a língua portuguesa.  Há certo preconceito por parte dos profissionais de tecnologia, principalmente desenvolvedores em relação a língua portuguesa. Certa vez ouvi que quem trabalha com desenvolvimento não precisa dominar o básico da língua portuguesa. Lembrando que não saber é uma coisa e não precisar é outra.

                Em primeiro lugar, devemos saber nos comunicar de forma clara e objetiva, seja na escrita ou na fala, em segundo lugar quem não tem o hábito da leitura e não tem algum domínio da língua portuguesa, terá sérias dificuldades de interpretação, e como fará ao receber um documento de requisitos em suas mãos? Ficará perguntando o tempo todo para o colega ao lado? Em terceiro lugar, o mercado está cada vez mais competitivo, é necessário que saibamos vender o nosso “peixe”, ou seja, precisamos ter um domínio ao apresentar  um projeto, uma ideia, um produto, seja para um cliente, seja na própria empresa, e se você não o fizer de forma clara, pode perder uma oportunidade.

                Sabemos que a língua inglesa é indispensável para quem é da área de T.I., porém vejo pessoas que gostam de exibir seu domínio nesse idioma e sequer sabem escrever um texto coerente, com ideias bem encadeadas, bem elaboradas e objetivas,  escrevem textos que só eles entendem. Não estou dizendo que todos os profissionais de T.I. devem dominar profundamente a língua portuguesa, o que quero dizer é que devem dominar o suficiente ao ponto que essa falta de domínio não seja um empecilho na sua vida. Se uma pessoa busca uma ascensão profissional, com certeza essa é uma das competências que ela deve dominar.

Para finalizar aí vai uma dica, a leitura é uma excelente forma de melhorar nosso vocabulário, nossa forma de se expressar, e hoje em dia onde a criatividade é indispensável, a leitura se torna ainda mais importante. Porém devemos ler qualquer coisa, seja uma ficção, um romance, um poema, qualquer coisa, sabe por quê? Porque a criatividade vem desse tipo de conteúdo, não vem de livros técnicos, lendo livros técnicos, ficaremos melhor na área que atuamos, mas isso não estimula a criatividade. Outra vez, não estou dizendo para substituir a leitura técnica por outra de um tipo diferente, estou dizendo para agregar outros tipos de leitura na sua vida!

 

Abraços!

Fernando.

Padrão
Uncategorized

TDC 2011 Floripa 1º dia

 

Olá pessoal, hoje foi comentar aqui como foi o TDC Floripa 2011. A ideia é fazer um panorama geral do evento, e comentar com mais detalhes as trilha que participei. O que falarei aqui são os pontos principais de alguma anotações minhas. Algumas palestras eu consegui colocar os slides para vocês, outras eu não encontrei. As trilhas que vou falar aqui, serão testes e arquitetura, pois foram as que participei, mas também farei uma visão geral do evento!

Minha primeira vez no TDC foi em 2010 na edição de São Paulo. Eu e um amigo (Marcos Dallanelo) saímos daqui de Joinville-SC e passamos a noite na estrada para no dia seguinte estarmos no evento, em resumo, valeu cada centavo e segundo que dedicamos. Posso dizer que muita coisa mudou depois daquele evento, conheci uma perspectiva que não imaginava. No ano de 2011 não pude ir para SP, então esperei o de Floripa e parti. De início ia sozinho, mas na última hora, duas amigas (Milena e Chirle) também resolveram ir, e uma delas tem casa próximo do evento, logo cancelei o hotel..:)

Agenda e recomendações do dia.

O primeiro dia do evento, sábado 20/08/2011 ao chegarmos no local (Universidades Estácio de Sá), passamos pelos guichês de identificação para pegarmos nossos crachás, um cafezinho pra começar o dia bem “antenado” e fomos direto para o auditório principal da universidade,  pois lá aconteceria a abertura do evento.  Chegamos por volta de 08:30 e pouco antes das 09:00 o auditório já estava lotado, e algumas pessoas tiveram que permanecer de pé.

A abertura do evento é um momento muito interessante, pois são apresentados os patrocinadores os apoiadores, as trilhas que acontecerão durante todo o dia do evento, enfim, todos conhecem o que realmente é o TDC e o porquê ele vem crescendo a cada edição. Um ponto forte também desse evento é o networking, isso os organizadores reforçam constantemente, na abertura, nas palestras e em todo o evento. Trocar contatos, ideias, ou uma simples conversa, isso sempre agrega alguma coisa. No último dia do evento, conversando com algumas pessoas acabei por conseguir uma carona até a rodoviária de Florianópolis, onde depois iria voltar para Joinville. Não foi minha intenção, mas me ofereceram. 😉

Para cada dia do evento, existe uma abertura  conforme citada acima. Cada um desses dias tinha algo novo pra galera brincar ou conhecer. No sábado essa surpresa foi um robô, isso mesmo um robô construído com Arduíno. Mas o que tinha demais nesse robô? Esse robô podia ser comandado por qualquer participante via twitter!  Foi muito legal isso! Através de uma hashtag seguida do comando que poderia ser frente, trás ou girar (se não me falha a memória) qualquer pessoa podia comandá-lo.  Foi divertido! Nos corredores da universidade, tinham estandes de algumas empresas, com brindes, novidades e havia também disponível para o pessoal brincar o kinect, era cena comum passar pelos corredores e ver pessoas pulando, fazendo movimentos de comandos, se abaixando, girando enfim, descontração também não faltou.

Bom, a hora do almoço ia chegar, só que ninguém precisaria sair das dependências da universidade para almoçar ou ir até a cantina da mesma. No momento da identificação, todos os participantes ganharam um ticket que dava direito a um Subway, isso mesmo tinha Subway para todo mundo e refrigerante a vontade, sem falar os intervalos para o coffee break, com biscoitos, barras de cereais, docinhos e café (é claro).

Começando as palestras, a primeira delas teve como título Automação Rápida de Testes para Web com José Correia (Iterasys)  -nessa palestra ele fez um panorama sobre como funcionam os processos de testes na empresa (que nesse caso é especializada em testes) e citou alguns casos. Alguns pontos chaves sobre a dificuldade de testar as aplicações de um modo profissional:

  • Faltam objetivos claros;
  • Faltam casos de testes ou nem existem;
  • Equipes em constantes mudanças;
  • Descobrir o que é mais importante;
  • Testar os principais requisitos;

Outro ponto chave, é como obter as informações para o teste:

  • Arquivos mais alterados;
  • Páginas mais acessadas;
  • Defeitos mais comuns;
  • Reclamações;

Fatores que possam influenciar os testes, é por exemplo quando o ambiente do desenvolvedor, possui bons recursos e o do tester, apenas micros já ultrapassados, que vieram de outros setores. Isso faz com que não se possa obter muitas vezes o resultado esperado.

Algumas ferramentas free: BadBoy e Jmeter, que até 5 usuários são gratuitas.

Alguns passos para automatizar:

  1. Transformar valores fixos em variáveis;
  2. Fazer com que o teste entre em loop para que a massa dedos possa ser testada até o fim;
  3. Gerar os scripts de automação;

Slides da apresentação

A segunda palestra, tratou de um servidor de integração contínua chamado Jenkis. Eu não conhecia essa ferramenta até então, durante a apresentação, o Bruno fez um exemplo prático de como ela funciona, criando os casos de testes, os cenários de testes, e automatizando isso tudo ao final. Além de elaborar os testes, o Jenkis também exibre estatísticas, gráficos e pode ser integrado com outras ferramenta do mercado.

A terceira palestra foi com o Cristiano Caetano, onde ele apresentou de forma simples e objetiva a importância de uma linguagem comum chamada DSTL (Domain Specification Test Language). Mostrou como é feito os testes com TDD e ATDD. O fator importante aí é o comportamento descrito com BDD e através dessa DSTL gerar os testes de aceitação ou ATDD.  Mostrou também algumas ferramentas disponíveis que podem ser utilizadas para tal. Foi apresentado também um case real desse cenário.

Slides da apresentação.

A quarta palestra tinha com título:  O que CrowdTesting de jogos tem a ver com software corporativo? E foi apresentada por Guilherme Motta (ThoughtWorks) . Essa palestra mostrou de uma ótica diferente esse tipo de teste. O palestrante comentou sobre o porquê de  muitas pessoas realizarem esse tipo de teste e quais são os seus perfis. Para quem não sabe esse tipo de teste é aquele que muitas empresas realizam quando lançam versões ainda beta, por exemplo o google+ foi lançado para ser testado por todos, com isso ele receberá feedbacks que serão incorporados na versão final do sistema. A Microsoft utiliza isso nas versões chamadas CTP (Community Tecnology Preview) ou seja, ela lança as versões beta para a comunidade testar. Talvez nos games isso seja mais evidente, sei lá por qual motivo, mas há uma tendência que se torne cada vez mais presente nos demais softwares.

Vamos agora para a próxima palestra, essa foi com Luana Lobão, do Instituto Nokia.  Essa apresentação nos deu uma ideia de como são feitos os testes para dispositivos móveis. Muitas vezes temos um interesse num determinado assunto, mas não sabemos por onde começar. Ela fez  uma abordagem bem legal em relação aos equipamentos, os simuladores de aparelhos, as técnicas empregadas como testes de sinal do aparelho, testes de bateria, testes dos níveis de memória. Existem testes que podem ser feitos com simuladores, mas outros como o da TV digital, não é possível que se faça assim. O que acontece quando algumas atividades ocorrem em paralelo? Como podemos testar isso? Através das interrupções, as mesmas usadas pelos sistemas operacionais para a troca de processos e que vimos na faculdade. No final foi feito uma demonstração usando testes automatizados no equipamento.

Slides da apresentação

O final desse dia foi muito legal! Voltamos para o auditório principal onde rolou uma mesa redonda com todas os palestrantes do dia (trilha testes) e o público pode fazer perguntas e discutir as questões levantadas. Tivemos perguntas das mais variadas. O encerramento se deu com sorteio de brindes para os participantes.

Abaixo uma relação de links das ferramentas apreentadas no dia. Fonte: http://sembugs.blogspot.com.

Abraço e até o segundo dia! 😉

Padrão
Uncategorized

É hora de mudar

O mercado de desenvolvimento de softwares anda bastante aquecido, logo temos uma grande demanda de sistemas em desenvolvimento e a serem desenvolvidos. O que ocorre é que temos muitas tecnologias novas no mercado, e muitas outras ainda virão, porém temos um sério problema relacionado ao sucesso do projeto. Quando eu falo sucesso, me refiro a entregar no prazo previsto (ou muito próximo disso, visto que é uma previsão), dentro dos custos previamente definidos e o mais importante, entregar algo que realmente será usado.

O último item parece um pouco sem sentido, porque “como vou entregar algo que não será usado?”. A realidade é que isso ocorre com muita frequência, muita mesmo. Esse problema tem várias causas, como disse no início deste texto, as tecnologias mudaram e mudarão muito, mas a forma com que são utilizadas, permaneceu praticamente imutável.  Muitas empresas adquirem novas ferramentas apenas para transmitir a ideia de que trabalham com a última versão do “martelo”. Um amigo meu costuma usar a expressão “Martelada Design”, que não deixa de ser o mesmo que XGH (Extreme Go Horse). Claro que não podemos generalizar todo esse contexto, pois existem muitas empresas preocupadas em entregar valor para seus clientes, porém uma grande fatia do mercado ainda é assim.

Obter sucesso em um projeto de software significa atender a três critérios principais como mostra o triângulo abaixo:

Valor para o cliente – significa entregar algo que realmente será útil para ele, algo que fará diferença no seu negócio, que traga resultados para o cliente, e não algo que seja usado parcialmente, ou quase nunca;

Prazo: é necessário estabelecer datas que possam ser cumpridas para o início e fim do projeto. Hoje podemos acompanhar muitos projetos nascerem com atraso já, se começam com atraso, imagina a entrega, e isso não é exceção;

Orçamento Previsto: um projeto demanda recursos, que podem ser instalações, equipamentos, treinamentos, viagens, consultoria externa etc. É comum os projetos ultrapassarem os valores iniciais previstos, inclusive, às vezes gerando prejuízo para a empresa desenvolvedora.

Claramente podemos ver que as três pontas do triângulo estão fortemente relacionadas. Qualquer alteração em uma delas implicará claramente nas outras duas, o triângulo tem que ser flexível, ele não pode ser rígido (ou seja, adaptar o andamento do projeto e seus custos, de acordo com o contexto atual, e não em algo definido no passado). Muitas empresas não avaliam essa relação, por isso é grande o número de projetos com inúmeras falhas.

De acordo com um estudo do Standish Group, de 1994 até 2006 obtivemos uma melhora na entrega com sucesso dos nossos projetos, porém depois houve uma queda até 2009. A tabela abaixo mostra essa situação.

Acontece que o principal fator de sucesso de um projeto não é a tecnologia utilizada e sim os 2 P´s do sucesso. O quesito tecnologia, interfere em fatores como custos do projeto e facilidades extras. Umas são mais produtivas, outras nem tanto, umas exigem um esforço maior para uma atividade e outra pode fazer a mesma coisa com o mínimo de esforço, porém se você já conhece a tecnologia que você utiliza, saberá estimar corretamente (ou pelo menos deveria). Com certeza você conhece grandes projetos utilizados por grandes empresas e que foram desenvolvidos na tecnologia X ou na tecnologia Y.

 

Os 2 P´s que me refiro são: Pessoas e Processos. Esses sim são fatores que determinarão o sucesso ou o fracasso de um projeto. Mais crítico que alterar a tecnologia que uma empresa utiliza, é a mudança de cultura, essa sim, leva tempo, enfrenta resistências, gera muitos descontentamentos, pois fere algumas pessoas. A cultura de uma empresa compreende os processos empregados e o “engajamento” dessas pessoas nos processos, afinal os processos são concebidos pelas pessoas, são elas que detém essa capacidade de gerar, manter e melhorar os processos empregados na empresa.

 

Processos ultrapassados, enrijecidos, ou porque o “gerente bacana” observou que em algum momento obteve sucesso e é assim que deve ser, devem ser revistos sim, o mundo está em constante mudança, quem não se adapta acaba por ficar para trás, isso vale para empresas e colaboradores.

Hoje vimos empresas apenas querendo resultados em cima de resultados, nesse momento que elas querem é uma “aceleração” nos processos, e acreditam que se tudo for mais rápido, obterão melhores resultados. Primeiro, temos que mudar a “fonte” dos resultados, porque se querem resultados diferentes, devem ter ações diferentes, a definição de insanidade de Einsten é: “fazer sempre as mesmas coisas esperando resultados diferentes”.

 

Não chegaremos a um nível ideal de sucesso em nossos projetos se não focarmos nossas mudanças no ponto chave do negócio. As mesmas raízes geram sempre os mesmos frutos.

Referências: Standish Group

Abraços!

 

Padrão
Fundamentos, Uncategorized

Algoritmos de Ordenação

Irei mostrar alguns dos principais algoritmos de ordenação, veremos como funciona o Bubble Sort, Selection Sort, Quick Sort, Merge Sort e Heap Sort.

Não colocarei códigos aqui, até porque é muito fácil de encontrar, apenas o funcionamento com explicações e demonstrações em vídeos.

P.S.: Alguns vídeos têm sons!

BUBBLE SORT

O bubble sort, ou ordenação por flutuação (literalmente “por bolha”), é um algoritmo de ordenação dos mais simples. A ideia é percorrer o vetor diversas vezes, a cada passagem fazendo flutuar para o topo o maior elemento da sequência. Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo.

Características :
Algoritmo muito simples;
Lento para ordenar grande número de elementos, mas eficiente com poucos elementos;
O(n2) comparações e trocas;
Adaptativo: O(n) comparações e trocas se o algoritmo estiver parcialmente ordenado.
Pior Caso: O(n2), Caso Médio O(n2) melhor caso O(n).

Animação:

SELECTION SORT

O selection sort (ordenação por seleção) é um algoritmo de ordenação baseado em se passar sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posição, e assim é feito sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos.

Pior Caso: O(n2), Caso Médio O(n2) Melhor caso O(n2).

Animação:

QUICK SORT

O Quick Sort é um algoritmo baseado em Divisão e Conquista. Isso significa que ele divide sucessivamente um problema e partes menores . O próximo passo é solucionar recursivamente os sub-problemas, ou seja ordenar os elementos, e só então combinar as soluções menores de forma a obter a solução final.

Complexidade:

Pior Caso:  O(n2), Caso Médio: O(nlogn) e  Melhor caso:O(nlogn).

Animação:

MERGE SORT

Sua idéia básica é muito fácil: criar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, ele divide a sequência original em pares de dados, ordena-as; depois as agrupa em sequências de quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duas partes.

Os três passos úteis dos algoritmos dividir-para-conquistar, ou divide and conquer, que se aplicam ao merge sort são:

Dividir: Dividir os dados em subsequências pequenas;

Conquistar: Classificar as duas metades recursivamente aplicando o merge sort;

Combinar: Juntar as duas metades em um único conjunto já classificado.

Complexidade:

Pior Caso:      O(nlogn), Caso Médio: O(nlogn), Melhor caso:O(nlogn).

Animação:

HEAP SORT

• HeapSort também é um método de seleção – ordena através de sucessivas seleções doelemento correto a ser posicionado em um segmento ordenado

• O HeapSort utiliza um heap binário paramanter o próximo elemento a serselecionado – heap binário: árvore binária mantida na forma de vetor – o heap é gerado e mantido no próprio vetor a ser ordenado (no segmento não-ordenado)

Complexidade:

Pior Caso:      O(nlogn), Caso Médio: O(nlogn), Melhor caso:O(nlogn).

Você sabe o que é um Heap? Primeiro vamos entender o que é um Heap.

Heap Binário – Exemplo

• raiz da árvore: primeira posição do vetor

• filhos de um nodo na posição i: posições 2i e 2i + 1

• pai de um nodo na posição i: posição ëi / 2û

Heap Binário Máximo

• Heap Binário tal que um nodo pai tem valor maior ou igual ao valor dos nodos filhos

Funcionamento

1. Transformação do vetor em um heap binário máximo (Construção do Heap)

2. Ordenação – a cada iteração seleciona-se o maior elemento (na raiz do heap) e o adiciona no início de um segmento ordenado – após cada seleção de elemento, o heap deve ser reorganizado para continuar sendo um heap binário máximo.

• Método auxiliar responsável pelo ajuste de um elemento no heap – método ajustaElemento(posição, vetor.lenght)

– realiza trocas no heap para posicionar

corretamente um elemento

• Exemplo: ajustaElemento(1, 7)

Ajuste de Elementos

• Executa até que o elemento seja transferido para uma posição i > ën/2û – após a posição ën/2û , o elemento já é um nodo folha

Etapa de Ordenação

• A cada iteração seleciona o maior elemento do heap (sempre está na primeira posição) e o troca com o elemento no final do segmento não- ordenado

• Após a troca, o novo elemento raiz do heap deve ser ajustado (deve-se chamar ajustaElemento para o nodo raiz)

• O processo termina quando o heap tiver somente 1 elemento (vetor ordenado) Nesse caso, um Heap Máximo.

Referências:

Wikipédia

Vimeo.com

Ordenação de Dados(III)

UFSC-CTC-INE

INE5384 – Estruturas de Dados

Prof. Ronaldo S. Mello

UNICAMP

Abraços!

Padrão
Uncategorized

Evento “Dev” em Curitiba 25/09

DevDay Curitiba

DevDay Curitiba é o Dia dos  Desenvolvedores de Software de Curitiba voltado para toda a comunidade “DEV”.

Um evento que reúne os melhores profissionais desenvolvedores de software em um dia repleto de palestras.

Com objetivo de enriquecer os conhecimentostrocar experiênciascompartilhar as informaçõespromovendo importantes discussões sobre as melhores práticas, técnicas e resultados.

Além de tornar Curitiba rota para os melhores e mais importantes eventos de tecnologia do país.

DevDay Curitiba é um evento técnico voltado para:

  • Desenvolvedores de software;
  • Alunos das áreas de desenvolvimento de sistemas;
  • Professores;
  • E amantes da tecnologia.

Mais informações.

Padrão