Вопрос к тестировщикам
Зачем мне в единственном экземпляре тестировщик, который кроме регресионного тестирования ничего больше не умеет?
А что за тестировщик тебе нужен? И, самое главное, зачем тебе нужен именно такой тестировщик? Как измерять эффективность работы такого тестировщика и какой она (эффективность) должна быть?
Я вот помню нас начальник отдела поддержки хорошо проучил. Писали мы ему письма, расскажите, что плохо, как сделать лучше? А он один раз говорит приходите ко мне с новой версией, я вам все покажу.Он нам в руки лэптоп, вон говорит стоит устройство делайте, что нужно. Мы ему, а там же стол закрывает половину, может отодвинуть - а он, не так наши клиенты и работают. Каждый попробовал и сразу стало понятно где проблемы.
Ну ОК, нету грамотных ПМов, которые знают что нужно клиенту и умеют поставить задачу. И что? В чем тут учение?
Да, интересно, хотел бы глянуть как он воспроизведет туже самую ошибку от винды и это не эксепшион внутри проги.
Делаешь враппер и генерируешь через него любую ошибку. В чем проблема? У нас, была проблема, что при перечислении всех имеющихся в системе дисков мы выбирали один и пытались на него писать. Все было хорошо до тех пор, пока у одного клиента не было установлено ограничение в правах. При этом выглядело все так - диск в списке появлялся, но при получении информации о нем вылетало исключение. Я просто сделал враппер над DriveInfo и никаких гвоздей :)
Делаешь враппер и генерируешь через него любую ошибку. В чем проблема?
-----
Проблема в том, что ты требуешь делать очередной костыль вместо выяснения реальной причины вызывающей проблему.
И, кстати, костыль совершенно лишний - условия возникновения ошибки соответствуют неработоспособности сети как таковой и в прикладе это не лечаt...
Проблема в том, что ты требуешь делать очередной костыль вместо выяснения реальной причины вызывающей проблему.
:) Как можно выяснить то, что лежит за пределами доступности? :)
И, кстати, костыль совершенно лишний - условия возникновения ошибки соответствуют неработоспособности сети как таковой и в прикладе это не лечаt...
Так проблему и не надо лечить, надо чтобы мой софт корректно обработал возникшую проблему. Для того, чтобы корректно обработать, нужно поместить систему и условия, когда эта проблема возникла. Враппером можно симулировать любую ситуацию и таким образом можно проверить корректную работу системы.
А причины возникновения ошибки интересны только для того, чтобы не говорить "никогда такого не было и вот опять" :) Ну что тебе даст знание, того, что "какой-то техник поменял IP" или "полиси концерна требуют, чтобы диск D был защищен от чтения и записи" или "уборщица Клава махнула шваброй и выдернула сетевой кабель"? Толку от знания этих причин никакого. Более того, софт не может эти причины "пофиксить", а вот реагировать на них он должен правильно.
Так что это не костыль,
это методология, которая позволяет абстрагироваться от окружения и тестировать то, что нужно тестировать (а метаться между тестовой и живой БД).
Как можно выяснить то, что лежит за пределами доступности?
-----
Ну вопрос об том кого мудрый менеджер поставит определять причину Я уже задал. А вот ответа пока не слышал...
Враппером можно симулировать любую ситуацию и таким образом можно проверить корректную работу системы.
-----
Нет проблем - пиши враппер второго ИПшника в сети.
Проверять будешь совершенно стандартное дело:
OracleConnection oraCN = new OracleConnection();
try
{
oraCN.ConnectionString = ConnectionString;
oraCN.Open();
}
catch(OracleException oex)
{
тут будет все что тебе надо - раз - правильно, другой - ошибка...
}
софт не может
-----
Ошибаешься.
У меня - софт продолжает работать, включая ситуацию когда сеть не может нормально работать из-за второго ИПа. Медленно только...
Просто когда причина установлена - есть возможность обрабатывать именно причину, а не бороться со следствиями...
Ну вопрос об том кого мудрый менеджер поставит определять причину Я уже задал. А вот ответа пока не слышал...
Ответ в том, что причина никого не интересует. Тестировщик ли Петя вбил статический ИП или админ Коля перепутал маску подсети - разработчика софта это не интересует. Разработчика интересует может быть такая ситуация или нет.
Нет проблем - пиши враппер второго ИПшника в сети.
Ты сам понял, что спросил?
Ну а враппер будет прост как мычание:
public interface IOracleConnection, IDispocable { string ConnectionString { get; set; } void Open (); } public class OracleConnectionWrapper : IOracleConnection { private OracleConnection oracleConn = new OracleConnection(); public string ConnectionString { get { return oracleConn.ConnectionString; } set { oracleConn.ConnectionString = value; } } public void Open () { oracleConn.Open (); } public void Dispose () { oracleConn.Dispose (); } } public class SomeCoolClass () { // Инекцию можно сделать так, либо через конструктор, либо можно через конструктор передать фабрику... protected virtual IOracleConnection OracleConnection { get { return new OracleConnectionWrapper (); } } public void DoSomething () { using (IOracleConnection oraCN = OracleConnection) { try { oraCN.ConnectionString = ConnectionString; oraCN.Open(); } catch(OracleException oex) { тут будет все что тебе надо - раз - правильно, другой - ошибка... } } } }
Таким образом при вызове Open () или сеттера ConnectionString я в тесте смогу сгенерировать любое исключение и таким образом проверить стабильность кода.
А что за тестировщик тебе нужен?
Ну если рассматривать ту ситуацию что была, то можно сказать хороший.
Который сам читает все что есть из доков, делает сводные таблицы в экзеле, и даже на этом этапе уже находит нестыковки.
Да многое еще было чего, не делала она ничего не шару и привносила много нового от себя
Ну ОК, нету грамотных ПМов, которые знают что нужно клиенту и умеют поставить задачу.
Какой бы грамотный не был ПМ, он никогда не сможет знать всех ньюансов.
И что? В чем тут учение?
В том, что когда сам на своей шкуре почувствуешь как это в одной руке держать лэптоп и сенсор, а другой еще что то набирать, то сразу забудешь какой замечательный и удобный контрол мы сделали.
Тут кстати и шнур выдергивается на раз.
Делаешь враппер и генерируешь через него любую ошибку.
Что то я не понимаю как изнутри программы сделать ошибку которая в обычном случае до программы просто не доходит. Можешь мне враппер сделать на выключение питания компа?
Жалко я уже всех подробностей не помню. Помню только что довольно долго с этим разбирались.
смогу сгенерировать любое исключение
------
А толку то c этого?
Ты хоть примерно представляешь как будет вести себя оракловский коннектион при указанных условиях ?
Подскажу - исключения вида "обнаружен дубликатный ИП в сети" у него нету. Просто нету.
А про то, что есть Я немного раньше, когда проблема была, спрашивал.
Ты сам понял, что спросил?
------
Разумеется. Я так думал, что сейчас нам продемонстрируют именно решение... ну хотя бы на уровне подмены сокета и реальной эмуляции сети с парой одинаковых ИПов...
Задача то именно так определена.
причина никого не интересует
------
Недавно отвечал на вопрос - Вот мы тут написали и у нас все работает. А у клиента - не работает. Как сделать чтобы у клиента работало?
Код - простой как три рубля - открывается сокет в него пишется и из него читается.
Все пашет идеально. Кинули - получили, ответили - получили. Любые тайминги для обработки. Все тесты - зеленые.
Но у клиента - упадет непременно - причину Я знаю и обойти ее нельзя. Т.е. упадет гарантированно.
И что бы ты посоветовал в этой ситуации с учетом "причина никого не интересует"?
Да, добавлю.
Если тесты прогнать на системе клиента - они останутся зелеными.
Мало того - можно сертифицировать прогу - никаких ошибок в работе с сокетом не сделано - исключения обрабатываются и все аспекты поправляются.
Остальное тоже имплементировано вполне приемлемо, хотя и не влияет на ситуацию.
Но!!! работающая софтина - упадет неприменно.
Ну если рассматривать ту ситуацию что была, то можно сказать хороший.Который сам читает все что есть из доков, делает сводные таблицы в экзеле, и даже на этом этапе уже находит нестыковки.Да многое еще было чего, не делала она ничего не шару и привносила много нового от себя
Ну это ты замечательно описал сферического коня в вакууме :) И вообще "мы за все хорошее и против всего плохого" :) Однако ответа на поставленный вопрос нет.
Какой бы грамотный не был ПМ, он никогда не сможет знать всех ньюансов.
И что? Никому и не надо знать всех ньюансов. Тот начальник тоже не знает всех ньюансов.
В том, что когда сам на своей шкуре почувствуешь как это в одной руке держать лэптоп и сенсор, а другой еще что то набирать, то сразу забудешь какой замечательный и удобный контрол мы сделали.Тут кстати и шнур выдергивается на раз.
Все это мило, но я тут вижу проблему в постановке задачи.
Что то я не понимаю как изнутри программы сделать ошибку которая в обычном случае до программы просто не доходит.
Если ошибка до программы не доходит, значит твоя программа работает корректно и, соответственно, никакой ошибки нет.
Можешь мне враппер сделать на выключение питания компа?
Конечно могу. Как только ты приведешь мне код программы, которая будет работать на выключенном компе.
Ты хоть примерно представляешь как будет вести себя оракловский коннектион при указанных условиях ?
Без понятия. Полагаю, что он либо сконнектится, либо отвалится с таймаутом, в зависимости от везения.
Подскажу - исключения вида "обнаружен дубликатный ИП в сети" у него нету. Просто нету.А про то, что есть Я немного раньше, когда проблема была, спрашивал.
Ты полагаешь, что я должен начать искать описание того, что у тебя там было? :)
Я так думал, что сейчас нам продемонстрируют именно решение... ну хотя бы на уровне подмены сокета и реальной эмуляции сети с парой одинаковых ИПов...Задача то именно так определена.
Зачем подменять сокеты или определять одинаковые ИП? При разработке софта исходить надо из того, что окружение работает без ошибок (сообщения о возникающих проблемах - это тоже безошибочная работа). Это значит, что сокет работает правильно. Это значит, что рутер работает правильно. И это значит, что в используемых протоколах (TCP, UDP) нет ошибок. Сетевая карта работает без сбоев. итд. Нет никакого смысла подменять сокеты, если ты не работаешь напрямую с сокетами. В твоем примере ты работаешь с внешней компонентой (OracleConnection), а значит именно ее и нужно заменять фейком.
И что бы ты посоветовал в этой ситуации с учетом "причина никого не интересует"?
Ты мешаешь мух с котлетами. Если у клиента что-то не работает, то это безусловно проблема. Однако это может быть как проблема твоего софта (тогда это твоя проблема), а может быть проблема конфигурации окружения у клиента (тогда это проблема клиента).
Я не собираюсь гадать и придумывать разные варианты решения возникшей у тебя проблемы.
Когда у клиента возникает какая-то проблема, то он (клиент) эту проблему репортит и разработчик должен проанализировать проблему и найти ее причину. А дальше идет уже следующий этап - надо принять решение, чья это проблема - разработчика (т.е. ошибка в коде, отсутствие какой-то фичи что-то еще) или клиента (конфигурация софта, окружения или еще что-то).
Вот у меня буквально вчера была такая ситуация: пришел баг-репорт о том, что не работает одна фича. Стал смотреть, оказалось, что клиент сконфигурировать систему так, что данные писались в несуществующую папку на несуществующем диске. Вывод - клиент должен правильно конфигурировать систему. Результаты были отправлены клиенту и досвидос. Я, как разработчик, не могу решить эту проблему в run time, но я могу правильно обработать ошибку (что и было сделано :D)
А причины, почему у клиента не было доступа к сконфигурированной папке меня совершенно не интересуют.
Без понятия.
-----
Ну и как же ты это - без понятия - собираешься эмулировать?
должен начать искать
------
Нее - ты, по твоему собственному заявлению, все сделаешь сразу даже не зная что за оно там было...
либо сконнектится, либо отвалится
-----
Если бы оно было так просто...
В некоторых случаях будет получена полуоткрытая коннекция, которую, к тому же, никак не закрыть без обрыва сети...
ты работаешь с внешней компонентой (OracleConnection), а значит именно ее и нужно заменять фейком.
-----
Двумя строками выше ты указал, что не имеешь предстявления об том, что будет ответом этой компоненты на указанную ситуацию, Т.е. не можешь заменить ее фейком. Просто по незнанию внешних проявлений сторонней проблемы.
Зачем подменять сокеты
-----
Ну так поставлення задача - симулировать обнаруженную ошибку, Ошибка - описана - второй ИП в сети.
должен проанализировать проблему и найти ее причину
-----
Как ты ее будешь искать в условиях - "причина никого не интересует"?
Ну повторю еще раз - в написанном коде проблемы НЕТ.
На всякий случай - у клиента - тоже все без ошибок.
но я могу правильно обработать ошибку
-----
Проблема в том, что не зная причины ты не можешь правильно обработать ошибку.
Ты можешь подавить часть (не все - в силу незнания причины и всех вариантов) последствий.
Не более.
Назвать тебе причину по которой не работало и не могло работать то что было описано
или ты сможешь ее обработать без этой информации?
Повторюсь - ошибок - нет. В коде (и конфигурации) 100% нет никаких ошибок.
А причины, почему у клиента не было доступа к сконфигурированной папке меня совершенно не интересуют.
-----
Меня - тоже.
Тем более, что ситуация с отсутствием доступа - решаемая.
Правда только после того как станет понятно, что это именно эта ситуация.
Ну и как же ты это - без понятия - собираешься эмулировать?
Ну во-первых, я ничего не собираюсь эмулировать. Это был твой пример и я не собираюсь разбираться в том, как работают твои компоненты.
Во-вторых, никому не надо эмулировать работу компоненты, достаточно эмулировать ответы. Т.е. сеттер для ConnectionString ничего не будет устанавливать, а функция Open не будет открывать никакие сокеты, она либо просто вернется (таким образом эмулируется успешное соединение), либо кинет исключение (эмуляция ошибки). Никаких других вызовов в твоем примере не было.
В-третьих, для тестирования OracleConnection - это черный ящик и мне глубоко фиолетово как он там работает.
Нее - ты, по твоему собственному заявлению, все сделаешь сразу даже не зная что за оно там было...
Ты либо не понял
того, что я сказал, либо умышленно перевираешь мои слова.
В некоторых случаях будет получена полуоткрытая коннекция, которую, к тому же, никак не закрыть без обрыва сети...
Да и ради бога. Если ты это может узнать обращаяь к своему объекту, значит это поведение можно эмулировать.
Двумя строками выше ты указал, что не имеешь предстявления об том, что будет ответом этой компоненты на указанную ситуацию, Т.е. не можешь заменить ее фейком. Просто по незнанию внешних проявлений сторонней проблемы.
Поведение системы в указанных условиях известно тебе (ты это уже изучил), мне же совершенно до лампочки как ведет себя OracleConnection в описанных тобой условиях, я с этим компонентом никогда не работал. Ты сам привел код, который попросил обернуть во враппер, чтобы эмулировать поведение OracleConnection. Я показал тебе как это можно сделать. Только и всего.
Ну так поставлення задача - симулировать обнаруженную ошибку, Ошибка - описана - второй ИП в сети.
Это не ошибка в поведении твоей компоненты. Симулировать надо внешнюю среду, в приведенном тобой привере внешняя среда - это OracleConnection. Как работает OracleConnection (через сеть ли, или передает открывает БД напрямую с диска или соеденяется с БД через COM-порт или работается через пайпы или шаред мемори
или еще как) - не важно. Если в сети есть 2 одинаковых ИП, то задача съэмулировать поведение OracleConnection в данных условиях. Делать сеть с двумя ИП имеет смысл только для того, чтобы выяснить поведение OracleConnection в таких условиях. Для теста же, который должен работать после каждой сборки, настраивать сеть с 2 ИП - тупость.
Как ты ее будешь искать в условиях - "причина никого не интересует"?
Очень просто. Причина сбоя программы и причина возникновения проблемы - это две большие разницы. В твоем примере, причина сбоя - это 2 одинаковых ИП в одной сети. Причина возникновения проблемы - монтер Вася, который забыл вернуть измененную конфигурацию. Так вот причина позникновения проблемы никого не волнует, т.к. сегодня это может быть монтер,
а завтра админы объеденят две подсети в одну или сотрудник со воим ноутом со статическим ИП придет в переговорку в соседний корпус.
Назвать тебе причину по которой не работало и не могло работать то что было описано или ты сможешь ее обработать без этой информации?
Я не собираюсь играть с тобой в угадайку. Хочешь называй, не хочешь не называй.
Тем более, что ситуация с отсутствием доступа - решаемая.
А вот это совсем не факт. И уж тем более, с вероятностью 99,99% эта проблема не решается софтом, который должен эту проблему корректно обработать.
либо кинет исключение (эмуляция ошибки)
-----
Ну ладно - не буду тебя мучать - там не будет одного только исключения.
Там будет группа исключений выбрасываемых в зависимости от состояния а:) самого коннекта, б) состояния сокетов, в) того куда уйдет очередной пакет на маршрутизаторе.
Пока ты этого не поймешь - ты можешь делать что угодно в коде (и тестах) но проблему - не решишь.
это черный ящик и мне глубоко фиолетово как он там работает
-----
Ну так проблема в том что именно оно там в этих условиях и не работает.
А починить - надо.
Можно в прикладе. Можно в системе. Можно просто устранить причину.
Но для любого из этих решений надо знать в чем причина и чем ее дрючить...
может узнать обращаяь к своему объекту
-----
Сокет не является моим объектом.
который попросил обернуть во враппер
-----
Я не просил оборачивать компонент во вреппер. Я привел код (свой) в котором
происходит ошибка и попросил тебя проэмулировать именно ошибку.
Почему так? Да потому что у меня рядом с Ораклом стоит Порстгрее и оно
в этой ситуации будет иметь те же самые проблемы.
то задача съэмулировать поведение OracleConnection в данных условиях
-----
Ну не можешь ты эмулировать это поведение. Просто не знаешь что именно происходит.
Я не собираюсь играть с тобой в угадайку.
-----
В угадайку - не играем и понять почему не работает - тоже не можем.
Ладушки - проблема в том, что у клиента не вся сеть TCP/IP-UDP.
В ней есть участки работающие по совершенно другим протоколам со всеми их ограничениями.
Пока не изучишь что именно там есть и как с ним работать - все будет идеально написано и нефига не будет работать...
с вероятностью 99,99%
-----
Файловый менеджер отследит возникновение проблемы доступа и сбросит информацию в биефкасе в директории юзверя.
По крайней мере у меня все работает именно так - упала/недоступна база - все сейчас пишем локально, потом будем синхронизировать.
Ну а файл у себя юзверь всегда создает.
Там будет группа исключений выбрасываемых в зависимости от состояния а:) самого коннекта, б) состояния сокетов, в) того куда уйдет очередной пакет на маршрутизаторе.
Там могут быть исключения любой сложности и вложенности и с любыми параметрами. Как только ты знаешь что там происходит, ты сразу можешь рапилить тест и убедиться, что твой софт работает правильно и правильно отрабатывает внештатную ситуацию. И тест этот работать будет всегда и предельно быстро. И для этого теста не надо будет добавлять дубликатный ИП.
Сокет не является моим объектом.
Так на кой хрен ты могда заговорил о том, чтобы эмулировать сокет?
Я не просил оборачивать компонент во вреппер.
Ну да, ты попросил какую-то дичь: Нет проблем - пиши враппер второго ИПшника в сети. И привел при этом код, который к ИП вообще никак не относится.
Я привел код (свой) в котором происходит ошибка
и попросил тебя проэмулировать именно ошибку.
Тебе было показано как можно абстрагироваться от OracleConnection, а обработку ошибки можешь тестировать бросая все эти "группы исключений" так, как тебе надо.
Ну не можешь ты эмулировать это поведение. Просто не знаешь что именно происходит.
Ну значит сначала выясняешь, а потом, в тесте, эмулируешь. В чем проблема?
Ладушки - проблема в том, что у клиента не вся сеть TCP/IP-UDP.В ней есть участки работающие по совершенно другим протоколам со всеми их ограничениями. Пока не изучишь что именно там есть и как с ним работать - все будет идеально написано и нефига не будет работать...
Я понятия не имею, что тут имеется в виду. В любом случае, данную проблему, если она вообще есть, нельзя исправить софтверно. А значит, после того, как ты все это выяснил, ты просто описываешь клиенту проблему и он решает ее сам для себя.
Как только ты знаешь что там происходит
-----
Так об этём и речь - когда знаешь причину - можно ее купировать, а не бороться с последствиями.
Но для этого надо установить именно причину.
Работая с ОраклеКоннектион указанную причину выяснить невозможно - не его уровень.
любой сложности и вложенности
-----
Ты все еще не понимаешь - там нет сложности и вложенности.
Там есть разные исключения для одной и той же операции.
Один раз тебе скажут - не коннектится, другой раз - ошибка записи, третий раз - потеря соединения.
Это из тех, до которых Я смог докопаться. Кроме этого есть еще куча разных других, в том числе и тех об которых Я не знаю.
ты попросил какую-то дичь
-----
Разумеется - Я просил эмулировать проблему, которую ты взялся законопатить враппером.
Причем указал что именно надо подменить. Правда умолчал об том, что этот враппер надо
будет скормить Коннектиону.
как можно абстрагироваться от OracleConnection
-----
Но оно не решает поблему. Оно позволяет сделать костыль для Коннектиона, но и только.
можешь тестировать бросая все эти "группы исключений" так, как тебе надо
-----
А кто будет выяснять какие именно будут "группы исключений"? Источником то черный ящик выступает.
А в доках нет никаких описаний "ехцептиона двойного ИП в сети".
Т.е. либо нужно разбираться с тем что и где, либо... хммм... никак.
В чем проблема?
-----
Эээ... гхммм...
А с какой стати Я должен разбираться в том, почему не работает написанный в соответствии со спецификацией
и многократно проверенный код?
Вот скажет мне тестер что он воспроизвел ситуацию возникновения проблемы и что проблема вот такая и при
этом оно не работает, а выдает "вот такое исключение" - я исключение обработаю без проблем.
Ну а если тестера берем подешевле - только чтобы не путал какие тесты запускать - то и вообще чинить нечего.
В любом случае, данную проблему, если она вообще есть, нельзя исправить софтверно.
-----
Ошибаешься - решается именно софтово. Но только после того как в деталях ознакомишься с тем
что там может быть, как это выяснить и как с этим работать.
он решает ее сам для себя.
-----
Он, вообще-то, даже не подозревает, что у него есть какие-то сети...
И сделать он с этим ничего не может - часть устройств сети, включая рутеры, вообще являются носимыми
устройствами.
Так об этём и речь - когда знаешь причину - можно ее купировать, а не бороться с последствиями.
Тесты делаются не для того, чтобы что-то там купировать. Они делаются для того, чтобы гарантировать, что твой софт работает так как надо и что это надо не изменилось со времени последнего билда.
Там есть разные исключения для одной и той же операции.Один раз тебе скажут - не коннектится, другой раз - ошибка записи, третий раз - потеря соединения.
Это ты не понимаешь. В описанном тобой случает делается просто три теста - один когда не коннектится, другой при ошибке записи и третий при потери соединения. Различия между этими тестами - выбрасываесое исключение. А дальше просто убеждаешься, что при одном, другом или третьем исключении программа ведет себя так, как надо. Например, при потере соеденения твоя программа принудительно высывает функцию Close. Для такого теста не надо ни регистрировать 2 одинаковых ИП, ни выдергивать кабель, ни отключать рубильник.
Разумеется - Я просил эмулировать проблему, которую ты взялся законопатить враппером.Причем указал что именно надо подменить. Правда умолчал об том, что этот враппер надо будет скормить Коннектиону.
Не надо мне указывать, что именно надо подменять. Тем более, что ты не понимаешь как работают юнит-тесты, зачем они нужны и почему они эффективны :)
Но оно не решает поблему. Оно позволяет сделать костыль для Коннектиона, но и только.
Оно позволяет абстрагироваться от чужой компоненты и протестировать свой код. Никаких костылей там нет.
А кто будет выяснять какие именно будут "группы исключений"?
Группы исключений будут перечислены в логе.
А с какой стати Я должен разбираться в том, почему не работает написанный в соответствии со спецификациейи многократно проверенный код?
С той, что ты не можешь гарантировать, что твой код рабочий. У тебя же нет тестов, которые проверяют, что ты правильно реагируешь на внештатные ситуации.
Ошибаешься - решается именно софтово. Но только после того как в деталях ознакомишься с тем что там может быть, как это выяснить и как с этим работать.
Я даже не представляю, что это могут быть за протоколы такие, которые гробят использующие TCP/IP - UDP приложения :) Все это попахивает лапшой :)
Он, вообще-то, даже не подозревает, что у него есть какие-то сети... И сделать он с этим ничего не может - часть устройств сети, включая рутеры, вообще являются носимыми устройствами.
Все интереснее и интереснее :)
Клиент не знает, что у него есть сети, при этом там куча рутеров и куча подсоедененных (по WLAN?) носимых устройств. Очевидно, что подсоедениться к этому может каждый, каждый же может определить любой IP адрес, да еще используя какой-то неведомый протокол обвалить софт. И ты хочешь сказать, что это все правда?
Ну это ты замечательно описал сферического коня в вакууме
Чтобы описать как может понравиться нужно море времени и громадное желание что мне обязательно нужен тестировщик.
Все это мило, но я тут вижу проблему в постановке задачи.
Как ни странно постановка задачи был корректной. И все были довольны, в том числе и заказчик. Не были бы довольны только конечные пользователи и то те которые не в офисе.
Если ошибка до программы не доходит
имелось в виду до исполняемого кода который можно контролировать. Вроде нужно было еще какую-то фигню от мелкософта установить и что-то при сборке проги подшаманить.
значит твоя программа работает корректно
Если приложение работает корректно это еще не значит что пользователь не будет видеть там ошибок.
Как только ты приведешь мне код программы, которая будет работать на выключенном компе.
Да нет проблем - printf("Hello world") - если не видишь результата, это не означает что она не работает
Да и это состояние не волнует, волнует именно немедленно как...
имелось в виду до исполняемого кода который можно контролировать.
У исполняемого кода нет хрустального шара. Если он (исполняемый код) не получает сообщение об ошибке, значит ошибки нет. Именно поэтому "проглатывание" ошибок catch'ем - зло.
Вроде нужно было еще какую-то фигню от мелкософта установить и что-то при сборке проги подшаманить.
Что-то все слишком сложно и запутано ;)
Если приложение работает корректно это еще не значит что пользователь не будет видеть там ошибок.
Тут надо определиться с терминологией. Что ты в данном случае понимаешь под "приложение работает корректно" и что ты понимаешь под "пользователь не будет видеть там ошибок"?
Если под "пользователь не будет видеть там ошибок" ты имеешь в виду сообщения об ошибках, то вывод сообщений об ошибках является корректной работой приложения (т.е. приложение корректно обработало ошибку). Если же под "пользователь не будет видеть там ошибок" ты имеешь в виду, что пользователь будет видеть надпись "Отменить" вместо "Подтвердить", то это не является "корректной работой приложения".
Да нет проблем - printf("Hello world") - если не видишь результата, это не означает что она не работает
Ну в таком случае я могу тебя поздравить, теперь ты самый богатый человек в мире, а если ты не видишь 150млрд долларов на своем счете, то это не значит, что у тебя их нет :D