Программная инженерия

Q & A для профессионалов, преподавателей и студентов, работающих в жизненном цикле разработки систем

5
В TDD, если я напишу тестовый пример, который проходит без изменения производственного кода, что это значит?
Вот правила Роберта С. Мартина для TDD : Вам не разрешается писать какой-либо производственный код, если только он не прошел неудачный модульный тест. Вам не разрешено писать больше модульных тестов, чем достаточно для провала; и ошибки компиляции - это ошибки. Вам не разрешено писать больше производственного кода, чем достаточно для …

5
Очередь сообщений. База данных против выделенного MQ
Я после совета относительно очереди сообщений. У нас есть требования для «заданий», которые будут опубликованы в очереди сообщений. Первоначальным предложением было просто использовать экземпляр SQL Server и обрабатывать сообщения от него. Все, что я прочитал в Интернете, говорит о том, что использование базы данных для очереди сообщений не является масштабируемым …

1
Стоит ли разделять юнит-тесты и интеграционные тесты?
Я должен написать модульные тесты и интеграционные тесты для проекта. Все тесты должны быть помещены в одну папку тестов ? Или юнит-тесты и интеграционные тесты должны находиться в отдельной папке тестов ? Или я должен даже поместить их в отдельные проекты ? Если я буду держать их вместе, есть ли …

3
Зачем использовать исключение Either over (проверено)?
Не так давно я начал использовать Scala вместо Java. Частью процесса «преобразования» между языками для меня было обучение использованию Eithers вместо (проверенных) Exceptions. Некоторое время я так кодировал, но недавно начал задаваться вопросом, действительно ли это лучший путь. Одним из основных преимуществ Eitherимеет более Exceptionлучше производительность; Exceptionнеобходимо построить стек-след и …

5
Когда мы должны использовать MongoDB?
MongoDB - это база данных NoSQL, которую я нашел довольно простой в использовании. Недавно мне пришлось разработать простое приложение, которое должно было собирать некоторые данные с использованием HTTP-запросов и сохранять некоторые результаты после обработки данных, и я попытался использовать MongoDB. Исходя из этого опыта, я обнаружил, что использовать его гораздо …

5
Почему юнит-тестирование частных методов считается плохой практикой?
Контекст: В настоящее время я работаю над небольшим проектом на Python. Я обычно структурирую свои классы с помощью некоторых открытых методов, которые задокументированы, но в основном имеют дело с концепциями высокого уровня (то, что пользователь класса должен знать и использовать), а также с кучей скрытых (начиная с подчеркивания) методов, которые …

5
MVC: Контролер нарушает принцип единой ответственности?
Принцип Единой Ответственности гласит, что «класс должен иметь одну причину изменения». В паттерне MVC работа Контроллера заключается в том, чтобы быть посредником между представлением и моделью. Он предлагает интерфейс для представления отчетов о действиях, выполненных пользователем в графическом интерфейсе (например, позволяя представлению вызывать controller.specificButtonPressed()), и способен вызывать соответствующие методы в …


3
Как GDB приостанавливает исполнение
Как вы, возможно, знаете, мы можем использовать GDB и устанавливать точки останова в нашем коде, чтобы приостановить выполнение для отладки. Мои вопросы: как GDB приостанавливает процесс и позволяет вам просматривать содержимое регистров, используя, i rнапример. Разве эти регистры не используются другими процессами ОС постоянно? как они не перезаписываются? Это только …
16 c++  debugging 

4
Когда перемещать общее поле в базовый класс?
В настоящее время у меня есть два производных класса, Aи Bоба имеют общее поле, и я пытаюсь определить, должно ли оно перейти в базовый класс. На него никогда не ссылаются из базового класса, и говорят, что если в какой-то момент в будущем будет получен другой класс, Cкоторый не имеет _field1, …

2
Является ли преобразование метода C ++ в функцию C с аргументом указателя приемлемым шаблоном?
Я использую C ++ на ESP-32. При регистрации таймера я должен сделать это: timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback); timer_args.arg = this; Здесь таймер звонит soundCallback. И то же самое при регистрации задачи: xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle); Таким образом, метод запускается в отдельной задаче. GCC всегда предупреждает меня об этих преобразованиях, …
16 c++  c  functions 

1
Структура каталогов для решения .NET
Недавно мы посетили подрядчика, который поставил под сомнение нашу методологию структурирования проектов. Обратите внимание, что я специально имею в виду структуру каталогов. Он предложил использовать рекомендации Microsoft. Я подумал, что смогу найти в Google «структуру директорий Microsoft .NET Project каталогов» и найти что-то полезное, однако это оказалось не так. В …
16 c#  visual-studio 

4
Java - это плохая идея иметь полностью статические классы?
Я работаю над большим сольным проектом и сейчас, и у меня есть несколько классов, в которых я не вижу причин для создания экземпляра. Например, мой класс игры в кости прямо сейчас хранит все свои данные статически, и все его методы тоже статические. Мне не нужно инициализировать его, потому что, когда …

4
Невозможно разгадать тайну функций в Javascript
Я пытаюсь понять за кулисами сцены Javascript и застрял в понимании создания встроенных объектов, особенно Объекта и Функции, и отношений между ними. Когда я прочитал, что все встроенные объекты, такие как Array, String и т. Д., Являются расширением (унаследованным) от Object, я предположил, что Object является первым встроенным объектом, который …

3
Почему бы вам не зафиксировать объединенные изменения немедленно?
Мой офис использует Git и SourceTree для контроля версий. Это произошло потому, что, когда я присоединился, был нулевой контроль версий, и SourceTree была единственной системой, которую я когда-либо использовал. Я ни в коем случае не эксперт, но я самый опытный из моих коллег, поэтому я де-факто эксперт, ответственный за то, …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.