Fonte: www.youtube.com/watch?v=LYlhCGng5Mk
Bye see you next post
Fonte:http://pt-br.justin.tv/startuplessonslearned/b/262656520#r=7zygNLw~&s=li
Bye see you next post
Fonte: http://pt-br.justin.tv/startuplessonslearned/b/262658135#r=7zygNLw~&s=li
Bye see you next post
Desenvolvimento de Clientes 2.0
Fonte: http://pt-br.justin.tv/startuplessonslearned/b/262670582
Bye see you next post
A conferência apresentou uma ampla variedades de oradores com diferentes backgrounds, porém todos eles tinham algo mais ou menos em comum, abraçaram as metodologias que Eric Ries fala em seus artigos e conferências.
Startup Lessons Learned Conference Videos
Fonte: www.arcticstartup.com/2010/04/30/startup-lessons-learned-conference-videos
Bye see you next post
Lyssa Adkins sugeriu uma lista de sete tipos de personalidades de treinadores que poderão dar problemas no processo de transformação para ágil numa organização:
Fonte: http://www.infoq.com/news/2010/04/caution-agile-transformation
Bye see you next post
O dinheiro embora ainda seja um fator, não é mais importante na motivação. Um sistema empresarial lean que é implementado corretamente, realmente cuida de todos os fatores.
Capacitação para tomar decisões: No sistema de negócios lean as pessoas não apenas são capacitadas para tomar decisões, mas as pessoas esperam para decidir e avançar na solução.
Oportunidades para o Crescimento e Desenvolvimento & Variedade: Cross-Training é um inquilino de um sistema de negócios lean. Proporcionando uma força de trabalho flexível e dando oportunidade de crescimento para os funcionários.
Apoio mútuo e respeito: Respeito às pessoas é o fundamental de qualquer sistema de negócios lean. Manter um fórum com participação de todos os funcionários como listas de questões e soluções para resolver problemas. E motivar o trabalho em equipe. O maior impacto é quando é transferida a culpa do funcionário para o sistema. É necessário manter os funcionários responsáveis, mas é preciso saber se a falha no sistema ou é uma questão de responsabilização. O artigo sugere assumir o erro de sistema pela primeira vez e se o erro persistir depois que o sistema foi corrigido, então é uma questão de julgamento.
Senso de Objetivo: Os objetivos são alinhados e há uma meta definida para ser alcançada. Dando um objetivo claro aos funcionários, gerenciamento do senso de direção e propósito para um objetivo. Fornecendo um ambiente de trabalho seguro e motivador, algumas vezes beneficiando a família. Senso de objetivo vem sem dinheiro para descobrir o que é importante para os funcionários conversando com eles.
Futuro desejável: o sistema de negócios lean posiciona empresa para o crescimento. Uma empresa próspera com muitas oportunidades e uma grande cultura que respeite as pessoas é onde as mesmas querem trabalhar. Isto amarrado em senso de objetivo, bem como no fator de motivar os funcionários sem dinheiro. Conforme a empresa cresce, poderá recompensar os funcionários.
Motivar os funcionários sem dinheiro se torna mais fácil com um sistema de negócios lean. Há muitos outros benefícios adicionais no sistema de negócios lean, incluindo os custos operacionais reduzidos e mais vendas.
Fonte: http://biznik.com/members/ankit-patel/articles/motivating-employees-without-money by Ankit Patel
Bye see you next post
HDD é o processo de desenvolvimento de software onde as decisões e códigos são feitas com base em suposições.
HDD não se aplica apenas na codificação, todas as fases de processo de desenvolvimento de software podem sofrer o HDD.
Todo mundo percebe que HDD é ruim, mas ainda continuam fazendo. Uma das explicações para continuar fazendo HDD é excesso de otimismo dos desenvolvedores de software.
Os sintomas para saber se você está usando HDD:
Dicas para evitar HDD
Fonte: http://www.makinggoodsoftware.com/2009/05/12/hdd/
by Alberto Gutierrez
Bye see you next post
Clifford Stoll poderia falar sobre a atmosfera de Júpiter. Ou caça hackers KGB. Ou garrafas de Klein, os computadores nas salas de aula, o futuro. Mas ele não vai. Em vez disso, ele simplesmente cativa seu público com uma pitada descontroladamente energética de anedotas, observações, para além - e até mesmo experimentar uma ciência.
Afinal de contas, por sua própria definição, ele é um cientista: "Quando eu faço algo, eu quero fazer outra coisa." (Duração fevereiro 2006 Gravado em Monterey, na Califórnia.: 17:50).
Este é um vídeo muito perspicaz. E uma grande lição sobre como fazer uma apresentação.
fonte: http://ow.ly/1Cz6M
Bye see you next post
Mostrarei um simples exemplo usando testes unitários na linguagem Java. O nome da minha classe é Bairro e vai usar hibernate como framework de persistência.
Para fazer a injeção de dependência usarei neste exemplo o framework Spring. Mas fique a vontade para escolher outro framework conforme linguagem e gosto.
O pojo de Bairro
@Entity
@Table(name = "bairro")
public class Bairro {
@Id
@GeneratedValue
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "nome")
private String nome;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Aqui tenho a interface BairroDAO com operações simples do CRUD
public interface BairroDAO {
public boolean criar(Bairro b);
public boolean deletar(Long id);
public boolean atualizar(String nome, Long id);
public Bairro load(Long id);
}
Implementação da interface usando Hibernate
public class BairroDAOImpl implements BairroDAO {
public boolean criar(Bairro b) {
boolean retorno = false;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
try {
session.save(b);
transaction.commit();
retorno = true;
} catch (HibernateException e) {
retorno = false;
transaction.rollback();
} finally {
session.close();
}
return retorno;
}
public boolean deletar(Long id) {
boolean retorno = false;
Session session = HibernateUtil.getSessionFactory().openSession();
Bairro b = (Bairro) session.load(Bairro.class, id);
Transaction transaction = session.beginTransaction();
try {
session.delete(b);
transaction.commit();
retorno = true;
} catch (HibernateException e) {
retorno = false;
transaction.rollback();
} finally {
session.close();
}
return retorno;
}
public boolean atualizar(String nome,Long id) {
boolean retorno = false;
Session session = HibernateUtil.getSessionFactory().openSession();
Bairro b = (Bairro) session.load(Bairro.class, id);
b.setNome(nome);
Transaction transaction = session.beginTransaction();
try {
session.update(b);
transaction.commit();
retorno = true;
} catch (HibernateException e) {
retorno = false;
transaction.rollback();
} finally {
session.close();
}
return retorno;
}
public Bairro load(Long id) {
Bairro bairro = null;
Session session = HibernateUtil.getSessionFactory().openSession();
bairro = (Bairro) session.load(Bairro.class, id);
session.close();
return bairro;
}
}
O hibernate.cfg.xml do hibernate para mostrar o devido mapeamento do pojo Bairro
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings –>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost/java
</property>
<property name="hibernate.connection.username">root</property>
<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- Enable Hibernate's current session context -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout –->
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">none</property>
<mapping class="…Bairro"/>
</session-factory>
</hibernate-configuration>
Classe de negócios que vai realizar as operações em bairro e vai ser usado na classe de teste
A classe de negócios depende da classe BairroDAOImpl. Mas estou usando a interface BairroDAO. Como realizarei a ligação com classe BairroDAOImpl? Precisarei da injeção de dependência que será feita no serviço setBairroDAO e com ajuda do framework Spring.
public class BairroBusinessRules {
private BairroDAO bairroDAO;
public BairroBusinessRules() {
super();
// TODO Auto-generated constructor stub
}
public void setBairroDAO(BairroDAO bairroDAO) {
this.bairroDAO = bairroDAO;
}
public boolean criar(Bairro b){
return this.bairroDAO.criar(b);
}
public boolean deletar(Long id){
return this.bairroDAO.deletar(id);
}
public boolean atualizar(String nome, Long id){
return this.bairroDAO.atualizar(nome, id);
}
public Bairro load(Long id){
return this.bairroDAO.load(id);
}
}
Mapeamento no Spring da injeção de dependência
Classe BairroBusinessRules depende de BairroDAOImpl. Faço a injeção de dependência através da atribuição do myBairro (instância de BairroDAOImpl) para atributo bairroDAO da classe BairroBusinessRules.
<bean id="myBairro" class="....BairroDAOImpl"/>
<bean id="bairroBusinessRules" class="….BairroBusinessRules">
<property name="bairroDAO" ref="myBairro"/>
</bean>
Classe de testes
Note que estou pegando BairroBusinessRules através do Spring, fazendo isto estou desencadeando a injeção de dependência descrita no XML do mapeamento do Spring:
public class TestBairro2 extends TestCase {
private BairroBusinessRules testBairro;
public void setUp() throws Exception {
ApplicationContext factory = new ClassPathXmlApplicationContext("contextApplication.xml");
this.testBairro = (BairroBusinessRules) factory.getBean ("bairroBusinessRules");
}
@Test
public void testCriar() throws Exception {
Bairro b = new Bairro();
b.setNome("Anchieta");
Bairro b1 = new Bairro();
b1.setNome("Boa Vista");
Assert.assertTrue(testBairro.criar(b));
Assert.assertTrue(testBairro.criar(b1));
b1.setNome("cristo redentor");
Assert.assertTrue(testBairro.criar(b1));
}
@Test
public void testDeletar() throws Exception {
Assert.assertTrue(testBairro.deletar(new Long(20)));
}
@Test
public void testAtualizar() throws Exception {
Assert.assertTrue(testBairro.atualizar("Humaita",new Long(14)));
}
@Test
public void testLoadNotNull() throws Exception {
Assert.assertNotNull(testBairro.load(new Long(16)));
}
}
Bye see you next post
Resolvi fazer um pequeno exemplo do uso do stub para testes unitários.
Stub provê alguns dados que serão usados no teste.
No exemplo, a classe Pedido esta sendo testada no preenchimento do telefone, usei a classe Cliente somente para passar o telefone que é forma de passar parâmetro. Não estou usando acesso a banco de dados, somente simulando com objetos:
import junit.framework.Assert;
import junit.framework.TestCase;
import org.junit.Test;
public class TestPedido2 extends TestCase {
@Test
public void testPreencheTelefone() throws Exception {
Pedido pedido = new Pedido(new Long(3), new Long(45));
pedido.preencheTelefone(new Cliente("51320066666"));
Assert.assertEquals("51320066666", pedido.getTelefone());
}
}
Estou usando JUnit:
O serviço testePreencheTelefone passou com sucesso.
Fonte: http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html
e
Apresentação sobre Injeção de Dependência e Testes com Dublês (Dummy Object, Stub, Mocks, Fake Objects, Spy) feita no 2o. Locaweb TechDay por Daniel Cukier http://vimeo.com/3596692
Bye see you next post
Locaweb Techday - Integração Contínua from Locaweb on Vimeo.
Apresentação de Maurício Dediana das práticas defendidas por Kent Beck na metodologia XP: Integração Contínua.
Bye see you next post
Locaweb Techday - Injeção de Dependência e Testes com Dublês from Locaweb on Vimeo.
Palestra sobre Injeção de Dependência e Testes com Dublês (Dummy Object, Stub, Mocks, Fake Objects, Spy) por Daniel Cukier
Bye see you next post
Locaweb Techday - Software de Qualidade através de Testes Automatizados from Locaweb on Vimeo.
Palestra de Desenvolvimento de Software de Qualidade através de Testes Automatizados apresentada por Fabio Kon e Paulo Cheque-Agilcoop.
Bye see you next post
Agilidade e Qualidade de Projetos - Fabio Akita - Parte 1/4 from Igor Musardo on Vimeo.
Agilidade e Qualidade de Projetos - Fabio Akita - Parte 2/4 from Igor Musardo on Vimeo.
Agilidade e Qualidade de Projetos - Fabio Akita - Parte 3/4 from Igor Musardo on Vimeo.
Agilidade e Qualidade de Projetos - Fabio Akita - Parte 4/4 from Igor Musardo on Vimeo.
11º Encontro Locaweb em Curitiba - 14/05/2009.
Fonte: http://vimeo.com/4798925
Bye see you next post
Palestra de Dairton Bassi falando sobre Extreme Programming:
Extreme Programming na Prática from LinguÁgil on Vimeo.
Slides: sites.google.com/site/linguagil2009/programacao/palestras
Grande palestra do evento LinguÁgil 2009 - Misturando Linguagens e Agilidade de 14 de Novembro de 2009.
Bye see you next post
Antes de implantar qualquer pojo convém testá-lo exaustivamente. Estou usando testes unitário junit para avaliar o pojo.
Tenho serviço reset para limpar a base de dados que é mysql quando precisar.
Além do serviço reset, tem outros serviços de testes: adicionar, deletar e atualizar.
Uso apenas uma tabela que é bairro, mas devemos testar todo o pojo para verificar problemas antes de implantar.
Classe de Testes Unitário do Pojo:
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
public class TestPojo extends TestCase {
public void setUp() throws Exception {
//TestPojo.reset();
}
@Test
public void testCriar() throws Exception {
Bairro b = new Bairro();
b.setNome("Anchieta");
Bairro b1 = new Bairro();
b1.setNome("Boa Vista");
Assert.assertTrue(TestPojo.criar(b));
Assert.assertTrue(TestPojo.criar(b1));
}
@Test
public void testDeletar() throws Exception {
Assert.assertTrue(TestPojo.deletar());
}
@Test
public void testAtualizar() throws Exception {
Assert.assertTrue(TestPojo.atualizar());
}
@SuppressWarnings("finally")
public static boolean criar(Bairro b) {
boolean retorno = false;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
try {
session.save(b);
transaction.commit();
retorno = true;
} catch(HibernateException e){
retorno=false;
transaction.rollback();
} finally {
session.close();
}
public static boolean deletar() {
boolean retorno = false;
Session session = HibernateUtil.getSessionFactory().openSession();
Bairro b= (Bairro) session.load(Bairro.class, new Long(13));
Transaction transaction = session.beginTransaction();
try {
session.delete(b);
transaction.commit();
retorno = true;
} catch(HibernateException e){
retorno=false;
transaction.rollback();
} finally {
session.close();
}
return retorno;
}
public static boolean atualizar() {
boolean retorno = false;
Session session = HibernateUtil.getSessionFactory().openSession();
Bairro b= (Bairro) session.load(Bairro.class, new Long(14));
b.setNome("Vila Mario Quintana");
Transaction transaction = session.beginTransaction();
try {
session.update(b);
transaction.commit();
retorno = true;
} catch(HibernateException e){
retorno=false;
transaction.rollback();
} finally {
session.close();
}
return retorno;
}
@SuppressWarnings("deprecation")
public static void reset() throws Exception {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
Connection connection = session.connection();
try {
Statement statement = connection.createStatement();
try {
statement.executeUpdate("delete from bairro");
connection.commit();
} finally {
statement.close();
}
} catch (HibernateException e) {
connection.rollback();
throw new Exception(e);
} catch (SQLException e) {
connection.rollback();
throw new Exception(e);
}
} catch (SQLException e) {
throw new Exception(e);
} finally {
session.close();
}
}
}
Pojo:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "bairro")
public class Bairro {
@Id
@GeneratedValue
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "nome")
private String nome;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost/java
</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.username">root</property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">none</property>
<mapping class="...Bairro"/>
</session-factory>
</hibernate-configuration>
Fonte: www.theserverside.com/news/1365222/Unit-Testing-Hibernate-With-HSQLDB
Bye see you next you
Bye see you next post
Bye see you next post
Através deste tutorial pretendo mostrar um exemplo de aplicação de acesso ao banco de dados (CRUD) com testes de unidade.
Estou usando Eclipse Galileu e JUnit 4.7, porém fique a vontade para escolher o Eclipse IDE e JUnit.
Os testes de unidade são implementados antes do código da funcionalidade.
Fluxo do TDD:
O que é um teste automatizado?
Set Up e Tear Down(organização do teste)
Configuração do Java Build Path com JUnit 4.7
Download do Junit e documentação: http://www.junit.org/
Código do CRUD Fone Pessoa Física
Interface do DAO Fone Pessoa Física
public interface FoneFisicaDAO {
public List<FoneFisica> buscarFones(int id);
public FoneFisica buscarFone(int id);
public boolean criar(int idpessoafisica, String fone);
public boolean alterar(int id, String fone);
public boolean excluir(int id);
}
Implementação da Interface Dao Fone Pessoa Física
Não coloquei implementação, porque isto fica a critério de cada projeto. Fique a vontade para hibernate, outro framework de persistência ou jdbc.
public class FoneFisicaDAOImpl implements FoneFisicaDAO{
public List buscarFones(int id) {
....
}
public FoneFisica buscarFone(int id) {
....
}
public boolean criar( int idpessoafisica, String fone) {
....
}
public boolean alterar(int id, String fone) {
....
}
public boolean excluir(int id) {
....
}
}
Implementação da parte de negócios do Fone Fisica é chamada FoneFisicaBusinessRules que utiliza a interface para chamar os serviços do DAO, não estou utilizando nenhum framework para IoC. Se houver a necessidade de ligação das classe FoneFisicaBusinessRules e FoneFisicaDAOImpl, terá que ser feito através de IoC.
public class FoneFisicaBusinessRules {
private FoneFisicaDAO foneFisicaDAO;
private FoneFisicaDAOImpl foneFisicaDAOimpl;
public FoneFisicaBusinessRules(FoneFisicaDAO dao) {
this.foneFisicaDAO = new FoneFisicaDAOImpl() ;
}
public List<FoneFisica> buscarFones(int id){
return this.foneFisicaDAO.buscarFones(id);
}
public FoneFisica buscarFone(int id){
return this.foneFisicaDAO.buscarFone(id);
}
public boolean criar(int idpessoafisica, String fone){
return this.foneFisicaDAO.criar(idpessoafisica, fone);
}
public boolean alterar(int id, String fone){
return this.foneFisicaDAO.alterar(id, fone);
}
public boolean excluir(int id){
return this.foneFisicaDAO.excluir(id);
}
}
Testes de unidade
import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
import br.com.madeira.pessoa.businessrules.FoneFisicaBusinessRules;
import br.com.madeira.pessoa.daoimpl.FoneFisicaDAOImpl;
import br.com.madeira.pessoa.domain.FoneFisica;
public class FoneFisicaTest extends TestCase {
private FoneFisicaBusinessRules testFoneFisica;
public void setUp() {
testFoneFisica = new FoneFisicaBusinessRules(new FoneFisicaDAOImpl()); Fazendo uma injeção de dependência através do construtor.
}
@Test
public void testBuscaFone() {
FoneFisica f = testFoneFisica.buscarFone(3);
Assert.assertNotNull(f);
}
@Test
public void testCriarFone() {
boolean b = testFoneFisica.criar(3, "6666665");
Assert.assertTrue(b);
}
}
Como rodar JUnit?
Clique no botão direito no projeto e escolha a opção Run as -> JUnit test.
Nesta janela temos o retorno em verde de tudo que esta ok no teste com o nome do teste, o que esta em azul com x falhou no teste.
Fonte: http://ccsl.ime.usp.br/agilcoop/
e
"Nós somos o que fazemos repetidamente. Excelência, não é uma ação isolada, mas um hábito" - Aristóteles
Bye see you next post