Академический Документы
Профессиональный Документы
Культура Документы
03. Файловая система
03. Файловая система
Файловая система
В этой лекции
В этой лекции
– Работа с файлами
Откуда берутся асинхронные операции
– Работа с файлами
– Чтение/запись данных по сети
Откуда берутся асинхронные операции
– Работа с файлами
– Чтение/запись данных по сети
– Отложенные операции
Откуда берутся асинхронные операции
– Работа с файлами
– Чтение/запись данных по сети
– Отложенные операции
– Ожидание пользовательского ввода
Зачем нужен setImmediate()
Зачем нужен setImmediate()
– Даёт возможность выполнить код в пределах одно витка, но после срабатывания
обработчика
Зачем нужен setImmediate()
– Даёт возможность выполнить код в пределах одно витка, но после срабатывания
обработчика
nodejs.org/dist/latest-v9.x/docs/api/events.html
Паттерн EventEmi9er
– Разделяет концепции слушателя и эмитента
nodejs.org/dist/latest-v9.x/docs/api/events.html
Паттерн EventEmi9er
– Разделяет концепции слушателя и эмитента
– Эмитент (Emi9er) — тот, кто предоставляет данные
nodejs.org/dist/latest-v9.x/docs/api/events.html
Паттерн EventEmi9er
– Разделяет концепции слушателя и эмитента
– Эмитент (Emi9er) — тот, кто предоставляет данные
– Слушатель (Listener) — тот, кто заинтересован в данных
nodejs.org/dist/latest-v9.x/docs/api/events.html
Интерфейс
Интерфейс
– У EventEmi9er есть специальное событие error, если оно произошло и нет ни одного
обработчика error, то будет выброшено исключение
Особенности
– У EventEmi9er есть специальное событие error, если оно произошло и нет ни одного
обработчика error, то будет выброшено исключение
setTimeout(() => {
console.log('This will still run.');
}, 500);
nodejs.org/dist/latest-v9.x/docs/api/process.html#process_process_events
Демо
Работа с файлами
Файл
Файл
– Путь
Файл
– Путь
– Расширение
Файл
– Путь
– Расширение
– Кодировка, если это текстовый файл
Файл
– Путь
– Расширение
– Кодировка, если это текстовый файл
– Уровень доступа
Файл
– Путь
– Расширение
– Кодировка, если это текстовый файл
– Уровень доступа
– Режим (чтение, запись, чтение и запись)
Файл
– Путь
– Расширение
– Кодировка, если это текстовый файл
– Уровень доступа
– Режим (чтение, запись, чтение и запись)
– Ссылка
Синхронное чтение файла
Синхронное чтение файла
const fs = require(`fs`);
const fs = require(`fs`);
const fs = require(`fs`);
const fs = require(`fs`);
eslint.org/docs/rules/handle-callback-err
Buffer
структура данных, которая хранит блок
«чистых» (необработанных) данных. Ведёт себя так
же как массив с зафиксированной длиной, т.е.
размер однажды созданного буффера никогда не
меняется
Проверка доступа и чтение
fs.access('myfile', (err) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('myfile does not exist');
return;
}
throw err;
}
throw err;
}
throw err;
}
readMyData(fd);
});
Тестирование
Тест —
это процедура, которая позволяет либо
подтвердить, либо опровергнуть
работоспособность кода
Википедия
https://ru.wikipedia.org/wiki/Разработка_через_тестирование
Тестирование
Тестирование
– ручное
тестирование производится человеком
Тестирование
– ручное
тестирование производится человеком
– автоматическое 🤖🔫🤖
тестирование производится программами
Тестирование
– ручное
тестирование производится человеком
– автоматическое 🤖🔫🤖
тестирование производится программами
– функциональное тестирование
проверка, правильно ли работает программа
Тестирование
– ручное
тестирование производится человеком
– автоматическое 🤖🔫🤖
тестирование производится программами
– функциональное тестирование
проверка, правильно ли работает программа
– тестирование производительности
проверка, достаточно ли быстро работает программа
Тестирование
– ручное
тестирование производится человеком
– автоматическое 🤖🔫🤖
тестирование производится программами
– функциональное тестирование
проверка, правильно ли работает программа
– тестирование производительности
проверка, достаточно ли быстро работает программа
– тестирование безопасности
проверка, безопасна ли программа
Тестирование
– ручное
тестирование производится человеком
– автоматическое 🤖🔫🤖
тестирование производится программами
– функциональное тестирование
проверка, правильно ли работает программа
– тестирование производительности
проверка, достаточно ли быстро работает программа
– тестирование безопасности
проверка, безопасна ли программа
Тестирование
Тестирование
– юнит-тестирование
тестирование отдельных модулей программы. Проверяется, правильно ли работает
каждая из частей программы в отдельности
Тестирование
– юнит-тестирование
тестирование отдельных модулей программы. Проверяется, правильно ли работает
каждая из частей программы в отдельности
– интеграционное тестирование
проверка, правильно ли взаимодействуют компоненты системы
Тестирование
– юнит-тестирование
тестирование отдельных модулей программы. Проверяется, правильно ли работает
каждая из частей программы в отдельности
– интеграционное тестирование
проверка, правильно ли взаимодействуют компоненты системы
– системное тестирование
проверка, правильно ли работает вся система
Тестирование
– юнит-тестирование
тестирование отдельных модулей программы. Проверяется, правильно ли работает
каждая из частей программы в отдельности
– интеграционное тестирование
проверка, правильно ли взаимодействуют компоненты системы
– системное тестирование
проверка, правильно ли работает вся система
Тесты в JS
Тесты
Тесты
1. что тестировать
Тесты
1. что тестировать
2. как тестировать
Что тестировать
Что тестировать
• test runner — программа, которая запускает тестовые файлы и показывает результат
их выполнения
Что тестировать
• test runner — программа, которая запускает тестовые файлы и показывает результат
их выполнения
Хороший код
assert
принимает на вход значение, которое переводит в boolean. Если значение равно true,
продолжает выполнение, если false — выдает ошибку (останавливает JS)
Хороший код
Хороший код
Проходите
assert
принимает на вход значение, которое переводит в boolean. Если значение равно true,
продолжает выполнение, если false — выдает ошибку (останавливает JS)
Хороший код
assert
принимает на вход значение, которое переводит в boolean. Если значение равно true,
продолжает выполнение, если false — выдает ошибку (останавливает JS)
Хороший код
10 - 8 === 11
assert
принимает на вход значение, которое переводит в boolean. Если значение равно true,
продолжает выполнение, если false — выдает ошибку (останавливает JS)
Хороший код
🔫
assert
assert
– assert
проверяет на правдивость выражение
assert
– assert
проверяет на правдивость выражение
– assert.equal/notEqual/strictEqual/notStrictEqual
проверяет, равны ли два значения
assert
– assert
проверяет на правдивость выражение
– assert.equal/notEqual/strictEqual/notStrictEqual
проверяет, равны ли два значения
– assert.deepEqual/notDeepEqual
проверяет равны ли объекты по значению
assert
– assert
проверяет на правдивость выражение
– assert.equal/notEqual/strictEqual/notStrictEqual
проверяет, равны ли два значения
– assert.deepEqual/notDeepEqual
проверяет равны ли объекты по значению
– assert.throws/assert.doesNotThrow
проверяет, падает ли функция с ошибкой
Как тестировать
Как тестировать
Как тестировать
• Test-driven Development (разработка через тестирование) — сначала написать тесты,
а потом код
Как тестировать
• Test-driven Development (разработка через тестирование) — сначала написать тесты,
а потом код
• Behaviour-driven development
Как тестировать
• Test-driven Development (разработка через тестирование) — сначала написать тесты,
а потом код
• Behaviour-driven development
• Behaviour-driven development
• Behaviour-last development ;)
Test Last Development (TLD)
Test Last Development —
(тесты потом) разработка по принципу написания
тестов для уже готового кода. После того как код
написан, пишутся тесты, которые проверяют,
работает ли программа так, как задумано
Test Last Development
подходит в ситуации, когда нужно сформировать
набор тестов для уже имеющегося кода
Test Last Development
Test-driven Development (TDD)
методология подхода к написанию ПО на основе
тестов
Test-driven Development (TDD) —
сначала пишутся тесты, для того, чтобы закрепить
поведение программы, а потом пишется код, на
котором тесты будут выполняться без ошибок
Behavior-driven development (BDD)
набор практик и подходов к написанию тестов.
Диктует стиль написания и формулирования тестов.
Основан на подходе TDD
codeutopia.net/blog/2015/03/01/unit-testing-tdd-and-bdd
[ ] Тест 1
слайды корректно переключаются
[ ] Тест 2
не происходит переполнения вправо
[ ] Тест 3
не происходит переполнения влево
[
[x]
] Тест 1
слайды корректно переключаются
[ ] Тест 2
не происходит переполнения вправо
[ ] Тест 3
не происходит переполнения влево
[
[x]
] Тест 1
слайды корректно переключаются
[
[x]
] Тест 2
не происходит переполнения вправо
[ ] Тест 3
не происходит переполнения влево
[
[x]
] Тест 1
слайды корректно переключаются
[
[x]
] Тест 2
не происходит переполнения вправо
[
[x]
] Тест 3
не происходит переполнения влево
Test-driven Development
разработка ведется короткими итерациями,
по определенному алгоритму
Test-driven Development —
Test-driven Development —
1. написать тест
тест используется для описания функциональности, формализует задачу
Test-driven Development —
1. написать тест
тест используется для описания функциональности, формализует задачу
3. написать код
который будет решать поставленную задачу так, чтобы
тесты начали проходить. Код не должен быть идеальным,
он просто должен выполнять поставленную задачу
Test-driven Development —
1. написать тест
тест используется для описания функциональности, формализует задачу
3. написать код
который будет решать поставленную задачу так, чтобы
тесты начали проходить. Код не должен быть идеальным,
он просто должен выполнять поставленную задачу
4. запустить тесты
проверить, проходят ли тесты теперь
Test-driven Development —
1. написать тест
тест используется для описания функциональности, формализует задачу
3. написать код
который будет решать поставленную задачу так, чтобы
тесты начали проходить. Код не должен быть идеальным,
он просто должен выполнять поставленную задачу
4. запустить тесты
проверить, проходят ли тесты теперь
5. оптимизировать код
после решения задачи, можно улучшить код: оптимизировать алгоритмы, оптимизировать
расположение модулей
Test-driven Development
ключевой момент в разработке через тестирование
даже не само написание тестов до кода, а именно
короткие итерации написания полностью
протестированного кода
habrahabr.ru/post/314994/
Behaviour-last Development
(поведение потом) разработка после того как придет
менеджер и заставит что-то делать
XD
#include <iostream>
int main()
{
std::cout << "¡Adiós!";
return 0;
}