Контрактники...
Да и немного помню кошкину ситуацию.
Да ничего необычного в его ситуации нет.
Систему в полном объеме не знает никто.
Да и ради бога :) У меня на текущем проекте тоже самое :) Никому и не нужно знать всю систему.
Даже если ты делаешь чего-то для одного рабочего места тебе будут говорить о детали А, а то что там могут делать деталь Б и С можно узнать случайно, а можно и нет.
И что? Сделал ты для детали А - протестировал и все работает - отлично. Если про делали Б и С ты ничего не узнал - отлично. Если узнал, то дополняешь тесты для этих деталей. Никто не требует моментального покрытия всего функционала.
И не обязательно, что можно вообще написать хотя бы юнит тест к нужному фукнционалу.
Это да. Но для таких случаев придумали рефакторинг. Ну и таки есть тестовые фреймфорки, которые подменяют код ;) Правда платные. Так что вполне вероятно, что это вопрос инструментария.
Опять же, кроме юнит-тестов есть еще и интеграционные и системные тесты.
Если результат - какие-то данные в эксель-файле, то проверять надо содержание эксель-файла.
-----
Каким образом проверять содержание ехцел-файла?
Тебе русским языком написано:
- пользователь НЕ знает что там должно быть.
- код построения находится в приватных функциях.
- внешний интерфейс - два поля (типа Дата) и кнопа, результат - файл.
И юз-кейс там не один. И это не "две даты и кнопочка".
-----
Тебе скриншотик дать?
с чего он взял, что этого там нет
-----
Потому как его шеф сказал ему - Бу-бу-бу...
А когда его шеф говорит ему - Бу-бу-бу - в файлике должны быть данные...
С этими данными нужно проделать 1., 2., 3... или 4., 5 - если весто Бу-бу-бу услышал Бу-бу-ба...
и поместить результат в другую форму и нажать другой кнопарик (этого кода нет)...
Но данных в файлике нет...
Пусть либо формулирует
-----
Смешно...
Он НЕ знает ЧТО он делает - он знает КАК он должен делать - читать, вписать, нажать, читать, нажать, читать, вписать, нажать, читать, вписать, нажать...
И так - 8 часов в сутки... чем быстрее - тем больше зарплата... за формулирование - не платят...
Теоретически, полностью с вами согласен. Но практически, обычно бывают нюансы.
Если про делали Б и С ты ничего не узнал - отлично. Если узнал, то дополняешь тесты для этих деталей.
Есть только маленький нюанс совместная обработка А и Б, в данной реализации, невозможна.
Но для таких случаев придумали рефакторинг.
Ну я хочу глянуть на рефакторинг 10-летнего монолитного спагетти кода, когда при этом приложение должно быть всегда в рабочем состоянии.
Опять же, кроме юнит-тестов есть еще и интеграционные и системные тесты.
Ну вот есть софт, управляет железом и получает оттуда же данные. Чтобы промоделировать железо нужно писать докторскую, не говоря уже о том как "перецепить" соединение с железом.
Ваши действия?
Если клиент ожидает какую-то информацию, то он знает что они там ожидает.
-----
Ты действительно не понимаешь?
Сидит Патрик. Сельский. Полностью от сохи.
Он знает, что в файлике есть клеточка из которой он должен взять что там есть
и поместив это форму нажать кнопарь. Все, ничего больше он не знает...
Просто человеко-"автомат" по перемещению данных из клеточки в форму.
Проблема - клеточка - пуста.
Никому и не нужно знать всю систему.
-----
Есть в системе календарик смен.
там пустяки - начало-окончание и немного дополнительной фигни.
Единствення проблема - сделано неудобно.
Я поковырялся и написал намного более удобную фиговинку...
заодно и глюки пофиксил и тесты написал... даже жизнеспособность
в базе проверяется...
Внедрять?
на рефакторинг 10-летнего монолитного спагетти кода
-----
Примерно 20-летнего... и минимум 5-к прогеров разной квалификации...
Но самое то - при активном и постоянном изменении требований...
Чтобы промоделировать железо нужно писать докторскую, не говоря уже о том как "перецепить" соединение с железом.
-----
Ну это пустяки... совершенные пустяки...
пишем управляющее воздействие как ключ
возвертаем чего там железо должно вернуть...
Правда получится смешно, если железо нельзя ресетнуть, а его ресопнсе зависит от текущего состояния...
Ну это пустяки... совершенные пустяки...
безусловно, особенно когда входной сигнал зависит от выходного и всё это происходит в реальном времени. ".НЕТ" правда справляется ещё.
Каким образом проверять содержание ехцел-файла?
Открываешь ексель-файл и читаешь его. В чем проблема? Если смог записать, значит и прочитать можешь.
- пользователь НЕ знает что там должно быть.
Значит пользователь НЕ знает, есть там это или нет.
- код построения находится в приватных функциях.
Это не важно.
- внешний интерфейс - два поля (типа Дата) и кнопа, результат - файл.
Это тоже не важно.
Тебе скриншотик дать?
Нафига мне твой скриншот? Ты же сам не знаешь, как отличить ошибку от корректной работы :) И не знаешь как узнать правильно отработала твоя функция или нет.
Потому как его шеф сказал ему - Бу-бу-бу...
т.е. его шеф знает, что должно быть в файлике.
Но данных в файлике нет...
Есть! Просто он не знает об этом :)
Он НЕ знает ЧТО он делает - он знает КАК он должен делать - читать, вписать, нажать, читать, нажать, читать, вписать, нажать, читать, вписать, нажать...
И так - 8 часов в сутки... чем быстрее - тем больше зарплата... за формулирование - не платят...
А на то, чтобы маякнуть тебе и сказать "у меня тут нет данных", у него, значит время есть и это время даже оплачивается :D :D :D
Ну-ну...
Есть только маленький нюанс совместная обработка А и Б, в данной реализации, невозможна.
Ну значит будет либо А и о Б думать не надо, либо будет Б и не надо думать об А :)
В чем проблема?
Ну я хочу глянуть на рефакторинг 10-летнего монолитного спагетти кода, когда при этом приложение должно быть всегда в рабочем состоянии.
Ну так никто не рефакторит все за раз. Частями, там где это возможно. А в рабочем состоянии оно должно быть после мерджа. При этом рабочесь состояния можно оценить только одним способом - протестировав.
Чтобы промоделировать железо нужно писать докторскую, не говоря уже о том как "перецепить" соединение с железом.
Это кто тебе сказал такую ерунду? :) Железо для тестов симулируется довольно просто. Тут же нужно симулировать состояние железа. Наверное ты как-то не так понимаешь слово сочетание "симуляция железа" :)
Симуляция для стресс-теста уже сложнее, но тоже до докторской там далеко.
Ваши действия?
Я сделаю симулятор железа :) Так же как я делал симулятор для System.IO.Directory, System.IO.DriveInfo, симулятор системы видео анализа и
симулятор карточных игр для стресс-тестов :) Уверяю тебя, это совсем не трудно ;)
Сидит Патрик. Сельский. Полностью от сохи.
Он знает, что в файлике есть клеточка из которой он должен взять что там есть
и поместив это форму нажать кнопарь. Все, ничего больше он не знает...
Просто человеко-"автомат" по перемещению данных из клеточки в форму.
Проблема - клеточка - пуста
.Ну вот тебе и тест кейс:
1) система находится в состоянии Х
2) клеточка YZне должна быть пуста
Вот и делаешь тест:
а) инициализируешь систему в состоянии Х
б) генерируешь файл
в) проверяешь клеточку YZ
Все :)
В чем проблема?
А том что должны и А и Б должны обрабатываться в данной одной реализации. И не различными частями.
Ну так никто не рефакторит все за раз. Частями, там где это возможно.
безусловно, но какой смысл вместо одного костыля делать другой, немного более лучший.
Единственный выход - переписать всё с нуля, заложив правильную архитектуру вместо никакой.
Железо для тестов симулируется довольно просто.
железо разное бывает
Набросать сотню кнопочек для эмулятора: дверь открыта, воздух поступает, штырь в позиции А и т.п. вполне можно. Можно даже сэмулировать как продукт по всей цифровой цепочке проходит.
А вот с многоканальным аналогом в реальном времени с обратной связью уже не очень просто.
Засунул враппер на входы и выходы - уже не работает, так как время и так было на пределе.
Наверное ты как-то не так понимаешь слово сочетание "симуляция железа"
возможно. Только получить чистый синус нафиг не надо.
Открываешь ексель-файл и читаешь его. В чем проблема? Если смог записать, значит и прочитать можешь.
-----
И что Я ТАМ должен читать?
Там, обычно, до десятка пагей забитых цифирьками. Что именно они обозначают Я не знаю. Патрик - тоже не знает.
Что именно Я должен в них читать?
И ты опять не хочешь понимать - кучка спагетти породила ехцел-файл.
Спагетти - не мой - унаследованный от прогера, которй свихнулся на кодинге этого спагетти...
Значит пользователь НЕ знает, есть там это или нет.
-----
Ты буквы от пустого места отличать умеешь? Вот и пользователя этому обучили.
Что означают цифро-буквы он не знает.
Ты же сам не знаешь, как отличить ошибку от корректной работы
-----
Именно.
Единственный для меня способ - редуцировать код до уровня когда Я его буду понимать.
Попутно обвешивая понятые части тестами.
Сколько-то - сделано. Остаток - слишком велик для одного.
И не знаешь как узнать правильно отработала твоя функция или нет.
-----
Нее, не знаю. Тем более, что функция - приватная и не моя.
А должен? Если - должен - то откуда Я это должен знать?
маякнуть тебе
-----
Мне - редко. В основном только по моим наработкам. Там тоже не мало, но все же объектная реализация - могу трекировать возникающие ошибки по частям.
В основном идет непосредственному начальнику, потом еще начальнику, потом по цепочке вниз...
Ко мне это доходит в виде - "в Р20 нет нужных данных".
Ну а Р20 - два поля, кнопа и файл на выходе...
В чем проблема?
-----
Самая простая - и А, и Б, и В - имеют индексы - А22, Б33... значения индексов ограничиваются... размером диаппазона 8хДецимал...
Если проще - практически каждое изделие - уникально...
Частями, там где это возможно.
-----
Нормальное спагетти тебе давно не попадалось...
А том что должны и А и Б должны обрабатываться в данной одной реализации. И не различными частями.
Я все еще не понял проблему.
Предположим есть 2 детали - А и Б
И есть всего 3 варианта:
1) А и Б всегда делаются на разных рабочих местах и на этих рабочих местах установлено разное ПО (ПО все заранее знает о детали). - тут все понятно, есть только одна деталь и под нее написан софт.
2) А и Б всегда делаются на разных рабочих местах и на этих рабочих местах установлено одинаковое ПО (ПО все заранее знает о детали) - тут тоже все ясно, есть 2 детали и ПО конфигурируется под конкретную деталь
3) А и Б могут делаться на одном рабочем месте (ПО должно
определить какую деталь делать) - тут тоже все ясно :) должны быть какие входные признаки для определения типа детали.
Других вариантов вроде как нет. О каком из этих 3-х вариантов ты говоришь?
Единственный выход - переписать всё с нуля, заложив правильную архитектуру вместо никакой.
Для того, чтобы переписать систему с нуля нужно четкое понимание необходимости этого действия + экономическая целесообразность :)
Никто не будет переписывать систему до тех пор, пока сопровождение обходится дешевле, чем написание новой.
А вот с многоканальным аналогом в реальном времени с обратной связью уже не очень просто.
Это больше похоже на крупный тест всей системы. Тут другие подходы и технологии. И другая частота запуска тестов.
Для тестирования логики все это не нужно.
И что Я ТАМ должен читать?
Тоже самое, что и Патрик :) Ты дам читаешь "нечто"... скажем, какую-то циферку. Какая разница "что"? Патрик же тоже не знает "что" это такое. Он знает, что в этой клетке "должна быть циферка".
Вот и твой тест должен действовать также:
а) открыл эксель файл
б) прочитал значение в поле XY
в) проверил циферка ли это.
Если циферка, то тест зеленый и Патрик доволен.
Если там пусто или не циферка, то тест красный и Патрик расстроен.
Все. Что еще тебе надо?
И ты опять не хочешь понимать - кучка спагетти породила ехцел-файл.
Спагетти - не мой - унаследованный от прогера, которй свихнулся на кодинге этого спагетти...
Это вообще не важно. Тебе надо убедиться, что этот спагетти-код породил циферку
в поле XY. И всем наплевать как он это сделал.
Ты буквы от пустого места отличать умеешь? Вот и пользователя этому обучили.
Если тебя этому тоже обучили, то и ты можешь определить пусто там или нет.
Что означают цифро-буквы он не знает.
Это и не важно.
Все. Что еще тебе надо?
-----
Мне, вообще-то, платят не за то, что циферька есть, а за то, что она есть и что она правильная...
Причем правильная ожидается даже в том случае если в оригинальном варианте она не правильная.
Да-да, даже в том случае когда ни Я, ни Патрик не знаем что она обозначает...
Вот сейчас в Р20 выяснилось, что данные по некоторым клиентам отсутствуют.
Ну да - нету ничего в клеточках...
Что именно чинить надо?
Напомню - два поля, кнопа и файл...
Внутри - спагетти... которое должно работать с другой СУБД и базой другой структуры....
И всем наплевать как он это сделал.
------
Когда - сделал - всем точно наплевать КАК.
Ты мне расскажи что тестить и как фиксить когда он НЕ сделал...
Это и не важно.
-----
Хи-хи...
Всегда упускаешь один фактор... ничего не важно - ни что есть в думпнутом ехецеле, ни как считалось... до тех пор пока станки не простаивают.
А для того чтобы они крутились - должна быть нужная Патрику цифирька...