Como posso testar um aplicativo que depende de hardware específico

8

Eu escrevi um aplicativo Android. O aplicativo requer uma conexão Bluetooth com uma peça de hardware muito específica, atualmente um protótipo. A única maneira de testar o aplicativo no momento é dirigir centenas de quilômetros para ver se ele funciona. Se eu acabar com um ANR, pode ser muito embaraçoso para o meu cliente. O tipo de conexão e a mecânica deste aplicativo são muito bem adaptados a este hardware. Não tenho permissão para trazer um laptop, fazer root no meu telefone ou conectar-me a qualquer outro dispositivo no local.

Existe alguma maneira de testar esse aplicativo em casa ou executar as atividades para garantir que eu não tenha outro ANR na segunda atividade enquanto o cliente me olha horrorizado?

Devo salientar que não sou um programador experiente e esta é uma nova idéia com a qual estou ajudando alguém, já que a contratação de pessoal não está disponível atualmente, por isso, sem dúvida, estou perdendo alguns dos conceitos básicos de desenvolvimento disso.

RossC
fonte
2
A interface é complexa demais para ridicularizá-la? Deve ser possível simular pelo menos a funcionalidade básica do dispositivo.
precisa saber é o seguinte
@ MrSmith42 Eu não havia considerado essa possibilidade, posso fingir enviar e receber dados por Bluetooth? No momento, não consigo superar minha primeira atividade, pois não há dispositivo emparelhado nem conexão serial Bluetooth aberta.
RossC
Para elaborar, preciso que o AVD (ou telefone físico) se conecte através de uma conexão Bluetooth falsa e envie os dados relevantes do meu telefone. Eu sei que a parte de recebimento de dados funciona bem, então nem preciso de nada em troca. Eu só preciso (apenas como exemplo) pressionar 'A' e meu telefone para enviar o fluxo de bytes 'A' para o hardware. O que acontece depois depende do hardware. Não posso testar isso como disse, pois não consigo fazer uma conexão. Eu dirigi ontem, conectado ao hardware, abri minha primeira atividade, apertei o primeiro botão e a tela preta, absolutamente enjoada.
RossC
1
O que é ANR? Suponho que você não esteja falando de Recursos Naturais Alfa ou Relacionamento de Enfermagem para Adultos (que é o que o Google criou)? Ou um AVD para esse assunto?
Marjan Venema
@MarjanVenema Desculpe, deveria ter esclarecido. ANR é o aplicativo não está respondendo ou é forçado a fechar com outro nome. É quando seu aplicativo falha completamente e retorna à tela inicial. Parece ruim na frente de um cliente. O AVD é um dispositivo virtual Android que você pode executar para testar seu aplicativo em alguns dispositivos virtuais diferentes. É uma parte fundamental do processo de teste do Android ... até que essa situação surja (não sendo possível zombar do hardware ao qual o dispositivo se conectará via BlueTooth). Espero que isso esclareça.
RossC 11/11

Respostas:

11

Como o @ MrSmith42 sugeriu, você deve fazer o melhor possível para zombar da interface. Você não precisa de uma conexão bluetooth real para zombar dela. Ligue para uma interface. Essa interface, na depuração, envia o que você esperaria para uma determinada entrada. Quando não está em depuração, ele executa o trabalho real de enviar e receber os dados. Certifique-se de que o que você envia para a interface e como você lida com sua saída funcione. Polvilhe um pouco generoso de tratamento de erros, gerenciando os erros que você pode gerenciar e registrando o restante, e você tem algo para testar diretamente no cliente.

A única possibilidade de erro nesse ponto está na diferença entre como você espera que o dispositivo manipule e como ele realmente se comporta e, na minha experiência, o hardware nunca é totalmente confiável. Portanto, certifique-se de ter um mecanismo geral de tratamento de erros para algo que você não espera que, pelo menos, despeje algum tipo de log.

Neil
fonte
1
Seu conselho é excelente, infelizmente a codificação atual está muito além do meu conjunto de habilidades. Vou ter que entregar isso para um desenvolvedor em tempo integral. Muito obrigado pela sua resposta, vou marcar como o aceito, pois é a melhor maneira de fazê-lo. Eu simplesmente não tenho idéia de onde alguém começaria a escrever uma interface simulada, e ficou claro para mim que estou passando por aqui. Graças a vocês dois. Apenas para sua informação, a interface é apenas uma conexão serial Bluetooth, enviarei apenas Strings (como bytes) pela conexão.
RossC
1
Eu só queria acrescentar uma última coisa, se alguém mais se deparar com essa pergunta e tiver mais conhecimento do que eu sobre essas coisas, existem ótimos links para interfaces falsas etc. aqui: stackoverflow.com/questions/3337505/…
RossC
@ RossC Bem, eu digo "interface", mas a interface é como você a define. Na produção, a própria interface transmite dados via bluetooth, mas isso não significa que sua interface deva funcionar exatamente da mesma maneira. Eu quis dizer mais sobre as linhas de quais comandos você deseja enviar para o dispositivo e que tipo de saída você pode esperar receber se falhar / obter êxito. Esse tipo de coisas.
8113 Neil
1
+1: "Interface" pode parecer que seu código deveria ter sido limpo e simples, mas, nesse caso, o que você quer é realmente uma "camada de abstração de hardware" na qual você coloca todos os tipos de hacks, soluções alternativas ou simplesmente desagradáveis ​​a dispositivos código necessário para que todos os dispositivos funcionem. Seu trabalho é manter o esgoto sanitário longe do banheiro limpo. Não espere código limpo nesta camada.
rwong 24/09
@rwong Absolutamente. Uma interface limpa que um programa pode usar para conversar com o hardware é a marca registrada de um driver bem escrito. O restante do programa não precisa conhecer os detalhes abstraídos.
Neil
6

Eu acho que esse é um problema de gerenciamento de projetos, não tanto um problema de desenvolvimento de software.

Você deve ter uma semana ou duas com acesso ao dispositivo (nas instalações do cliente ou no escritório) para avaliar o comportamento básico do dispositivo e ver como ele interage com o seu software. Depois, você pode zombar da interface e desenvolver a funcionalidade em casa e novamente uma semana de testes de integração.

Quando você interage com o hardware, a necessidade e o valor dos testes de integração não podem ser subestimados. Se os testes de integração não forem possíveis, seu projeto falhará. Programar às cegas para um hardware que você não pode testar não funciona.

Você precisa discutir esse problema com seu cliente.

Simon
fonte
1
Obrigado pelo seu feedback Simon. Eu acho que é uma conversa inevitável. Tem que haver algum compromisso ou o resultado final pode ser potencialmente pior do que inútil. Quero esgotar os caminhos disponíveis para mim e ser capaz de mostrar que fiz minha pesquisa. Também vou sugerir novamente que recebam um laptop que eles aprovarem e que eu possa executar o aplicativo com o ADK completo à minha disposição quando estiver testando a integração. Eu agradeço!
RossC