Нужен совет.

Есть примерный план интерактивного учебника по программированию. Учебник собирается выпускаться бесплатно (если на Бумстартере средства соберу, то еще и быстро).


Накидал сейчас план, нужны комментарии - какие темы стоит рассматривать, какой порядок тем лучше и какие темы включать в п. 7.1, 8.1, 9.1, 10.1, 11.1.


Примерный план учебника:


1 Введение в информатику

1.1 Системы счисления

1.2 Логические операции

1.3 Графические представления

1.4 Алгоритмы

1.5 Аппаратное обеспечение ЭВМ

1.6 Типы данных

2 Подготовка к началу работы

2.1 Системы контроля версий

2.2 Требования к рабочему месту

2.3 Выбор программного обеспечения

3 Введение в программирование

3.1 Графические схемы при проектировании приложения

3.2 Алгоритмизация

3.2.1 Построения алгоритма решения задачи

3.2.2 Принцип дробления алгоритма

3.2.3 Принцип атомарной операции

3.2.4 Повторное использование кода

3.3 Оформление кода

3.4 Безопасность приложения

3.5 Определение целей и задач

3.6 Структура программы

3.6.1 Библиотеки

3.6.2 Функции

3.6.3 Строки

3.6.4 API

3.7 Программный интерфейс

3.7.1 Нативные приложения

3.7.2 Веб-приложения

3.7.3 Консольные приложения

3.7.4 Универсальные (полиинтерфейсные) приложения

3.8 Парадигмы программирования

3.9 Объекты и их применимость

4 Базы данных

4.1 SQL и реляционная модель данных

4.2 SQLite3

4.3 MySQL

4.4 PostgreSQL

4.5. NoSQL базы данных

5 Язык программирования Python

5.1 Типы данных

5.1.1 Числа

5.1.2 Строки

5.1.3 Списки

5.1.4 Словари

5.1.5 Кортежи

5.2 Условный оператор

5.3 Циклы

5.3.1 Счетный цикл for

5.3.2 Условный цикл while. Бесконечный цикл.

5.4 Функции.

5.4.1 Функции

5.4.2 Параметры функции и значения по умолчанию

5.4.3 Лямбда функции

5.4.4 Модификаторы функций

5.5 Классы и объекты

5.5.1 Классы

5.5.2 Наследование классов

5.5.3 Объекты

5.6 Графический интерфейс. Библиотека PySide

5.7 Работа с веб-интерфейсом

5.8 Работа с базами данных

5.9 Исключения

5.10 Многопоточность

6 Язык программирования С

6.1 Типизация. Типы данных

6.2 Условный оператор

6.3 Циклы

6.4 Функции.

6.5 Графический интерфейс. Библиотека GTK

6.6 Работа с базами данных

7 Язык программирования С++

7.1 Предлагайте

8 Язык программирования JavaScript

8.1 Предлагайте

9 Язык программирования PHP

9.1 Предлагайте

10 Язык программирования PERL

10.1 Предлагайте

11 Язык программирования Prolog

11.1 Предлагайте

2
Автор поста оценил этот комментарий

Немного нарушена логика, тесты пишут несколько для другого. Например, у нас есть метод, мы написали его и написали тесты, проверяющие, что метод делает то, что от него ожидается на средних и граничных условиях. После этого мы написали еще 100500 методов, фич и прочего, и тут делаем что-то, что ломает тот наш первый метод. И так как у нас есть тесты, есть довольно большая вероятность увидеть, что мы что-то сломали. Тесты не панацея, но еще один слой защиты от багов, возникающих за счет регрессии

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо за комментарий
Автор поста оценил этот комментарий

Я не совсем понял описываемую схему. Т.е. есть предложение написать кусок документации  и каждый раз вручную все проверять, чтобы не накосячить в тестах?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Нет. Допустим мы пишем программу которая содержит функцию возведения в степень. Она принимает 2 числовых значения и возвращает результат. В блокноте (или по вкусу) пишем:


pow(число дробное 1 (0-1000), число дробное 2 (0-100)) - число (возвращаемое значение)


вообще там сложнее, но для примера сгодиться. Далее в самом начале функции прописываем:

если (число аргументов != 2 или аргумент 1 > 1000 или аргумент 1 < 0 или аргумент 2 > 100 или аргумент 2 < 0) {запрос повторного ввода или исключение } иначе {тело функции}.


Вызываем функцию и видим, чего она ждет и чего возвращает.


Для строковых значений можно (и нужно) обязательно проверять длину (переполнение буфера).


При эмуляции работы программы в эту функцию должны попадать как соответствующие, так и не соответствующие критериям данные.


Проблема тестов в том, что зачастую пользователи настолько "талантливы", что умудряются сделать невозможное.

показать ответы
Автор поста оценил этот комментарий

а давайте ебнем сразу 12-ти томник.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Там интерактив... Хотя если вспомнить документацию по FreeBSD/PHP/PySide...
Автор поста оценил этот комментарий

раз есть php,то есть предложение включить CSS и HTML

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Хорошо, поменял.  Теперь конец списка глав выглядит вот так:

8 Разработка для WWW

8.1 Язык программирования PHP

8.2 Язык разметки HTML

8.3 Язык таблиц стилей CSS

8.4 Язык программирования JavaScript

9 Язык программирования PERL

9.1

10 Язык программирования Prolog

10.1


Кстати - скрин профиля.

Иллюстрация к комментарию
2
Автор поста оценил этот комментарий

почему так модно стало учить программировать? когда научился и не знаешь куда применить знания что ли?

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Обычно курсы имеют цель срубить бабло, а не научить чему-то. Профессия высокооплачиваемая и востребованная. Но курсы (несколько знакомых отучились) плодят говнокодеров, а альтернативы этим курсам (кроме высшего образования) нет. Здесь я хочу выложить и поддерживать материал для подготовки нормальных грамотных специалистов.
1
Автор поста оценил этот комментарий

Блин включи java если будет возможность)

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Не будет, к сожалению. Я включаю только те языки с которыми работал. С Java я не работал, как я смогу ей учить и о ней писать?
показать ответы
Автор поста оценил этот комментарий

Вопросов несколько:

1) Зачем давать несколько языков программирования? Если человек понял, как писать императивно, понял алгоритмизацию, имеет пускай даже небольшой опыт в языке (ну, и ООП в частности), то для него не будет проблемой перейти к другому языку

2) Человеку довольно сложно принять что-то, полезности чего он не осознает. А это весь второй и половина третьего пункта. Пока ты не ощущаешь боли от чего-то, ты не будешь использовать те, или иные инструменты для уменьшения оной, просто потому, что у тебя ее нет. Поэтому в классических циклах обучения и начинают просто с программирования а потом добавляют все остальное, по мере наращивания сложности

3) То же самое относится к ООП - пока проекты не начнут становиться достаточно сложными и комплексными, никто не сможет понять как и для чего нужно ООП (опыт и мой, и практически всех моих знакомых)

4)

3.2.4 Повторное использование кода

3.3 Оформление кода

3.4 Безопасность приложения

3.5 Определение целей и задач

3.6 Структура программы

3.6.1 Библиотеки

3.6.2 Функции

3.6.3 Строки

3.6.4 API
Буквально вся эта часть смотрится очень странно для человека, который еще не написал ни одной строчки кода. Какое оформление? Какое повторное использование? Какая безопасность?


Ну и последнее, судя по моему опыту, нужно очень, очень много внимания уделять составлению алгоритмов. Я в свое время учился программированию на паскале, на задачнике для 11 класса, где просто нарешивал и нарешивал десятки и сотни задач. А потом брал олимпиадные задачи и опять нарешивал. И, как мне кажется, это лучший путь, потому что выучить стиль кода, ООП не так сложно, когда у тебя нет проблемы с вопросом, а как в принципе решить задачу, и ты можешь сконцентрироваться на том, чтобы решить ее самым оптимальным или красивым способом. Так что писать, писать и еще раз писать код!

раскрыть ветку (1)
Автор поста оценил этот комментарий
1. Изначально я хотел сделать книгу про Full-stack разработку. Чтобы дать возможность человеку не замыкать себя в чем-то одном.
2. и 4. Я уже пересмотрел концепцию. Думаю с первого пункта (вместо выделенного раздела) пойдет пайтон.
3. К ООП можно еще добавить базы данных. Тоже без пары десятков тысяч строк сложновато понять зачем они нужны.

Научить составлению алгоритмов - основная цель книги.
1
Автор поста оценил этот комментарий

Не знаю, на сколько это применимо для пособия по программированию (я строительный инженер), но если начнете писать пособие, добавляйте как можно больше практических примеров во всех темах, где это только возможно. Имхо сухая теория усваивается намного хуже. У меня в памяти намного дольше хранилась информация из пособий, которые подходили к описанию теории по системе "реальная ситуация->теоретическое обоснование" Также было бы здорово, если к учебному пособию будет написан какой-нибудь интерактивный задачник со ссылками на темы учебного пособия.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо за пожелание.
Автор поста оценил этот комментарий

Вообще да, но в javascript они, вроде как, тоже есть.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Если совсем коротко, то события и делегаты - аналог сигналов.


1. Событие - вызов функции по действию пользователя.

2. Делегат - условный вызов функции по действию пользователя т.е. идет не просто вызов функции, а вызов функции отвечающей заложенным критериям.


Например:

1. Событие. Мы ставим вызов функции при щелчке по ссылке. Как только ссылка кликнута - вызывается функция.

2. Делегирование. Мы ставим вызов функции на объект, например таблицу с условием работы по клику в ячейке. Как только произошел клик в таблице проходит проверка является ли место клика - ячейкой. Если является, то вызывается функция, которая получает ссылку на эту ячейку.


То есть при делегировании можно назначать одно действие произвольному набору элементов DOM. Например, поменять цвет в ячейке. Не важно сколько ячеек, строк, столбцов и т.п. цвет измениться только в кликнутой ячейке.

Автор поста оценил этот комментарий

Проверка функции pow с любыми значениями на входе и выходе. Никак не покажет ошибку в функции факториала.

Ну и это по сути и есть ручное тестирование?

Ну и зачем мы тогда программируем, чтобы все делать вручную?

Что такое эмуляция? Интеграционное тестирование?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Про проверку "на выходе" не прочитал?


Эмуляция - когда архитектура программы имеет выделенную функцию приема данных от пользователя (вызываемую обычно в main/основном коде в зависимости от ЯП) и функцию вывода данных. В dev-версии вызов функции приема заменяется другой, которая содержит подобранный и "решенный" массив данных. Данная функция подает "на вход" программы значения, а функция-вывод заменяется анализатором, который сравнивает полученные в итоге значения с контрольными.


Помимо этого в тело программы еще вводят "лог-маркеры" - функции записывающие в лог временную метку, вызов/строку и работающий набор значений. По "решению" ищут отклонение в логе, таким образом получая локализацию ошибки.


Отличие от тестов - проверяется работа программы. Не код. Код может меняться сотни раз, но программа при этом должна работать, причем правильно работать.

показать ответы
Автор поста оценил этот комментарий

События и делегаты )

С событиями еще понятно, но сколько я про делегаты не читал, так и не понял, что они такое и зачем нужны.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Это в С#?

показать ответы
Автор поста оценил этот комментарий

Что значит "под ключ"? Нельзя же за одну книгу подготовить программиста, которого сразу в Google возьмут, например.


"Экспериментально хочу попробовать сделать вариативное содержание" у Кнута эта идея реализована - можно взять в качестве примера. Я про Искусство Программирования.


"Проект рассматривается как некоммерческий, поэтому об этом не думал." на желание клиента в любом случае надо ориентироваться, иначе вашим продуктом не будут пользоваться даже если он бесплатный =)


"Си, наверное стоит либо выставить факультативом (как пролог) или выкинуть совсем." я бы викинул его совсем. Если хочется показать что-то уровнем ниже, чем С++ то сразу стал бы рассказывать про Assembler. Заодно и архитектуру процессора подробнее описать можно.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Нельзя. Но можно подготовить программиста готовому к простым задачам на фрилансе или на неответственную должность в софтверную компанию.


Кнута учту.


Си тогда совсем выкину.

Автор поста оценил этот комментарий

"Для больших проектов есть другой способ - эмуляция" дык это же и есть то тестирование, о котором идёт речь =)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Когда начинали пиарить тесты тоже путались, вроде одно и то же... Эмуляция и тестирование выполняют одну и ту же задачу одним и тем же способом, но строятся по совершенно разным принципам.


Тесты - служат для проверки поведения программы и покрывают весь код.


Эмуляция - запуск готовой программы в которой интерфейс пользователя заменен на функцию вставляющую заранее определенные значения и считывающую результат. Проверяется конечный результат.


То есть отличие в объекте тестирования тесты проверяют код, эмуляция саму программу.

Автор поста оценил этот комментарий

Как бы вы применили второй принцип, если разрабатываете, например, GUI? Там граничные значения вычислить почти никогда не получится. Зато тестированием большинство багов отлавливаются "на раз" и малой кровью. А что важнее - когда кто-то добавил новую кнопку, то не нужно заново для всех предыдущих окон кнопок и менюшек пересчитывать "граничные значения". Это правда удобно, а для больших проектов - жизненная необходимость.


Другое дело, что в учебнике для новичков учить фичам больших проектов - гиблая затея. Потому что новичку это всё равно понадобится очень нескоро, а пока что он просто не поймёт, зачем это вообще нужно (т.к. делать тесты для проги из тысячи строк обычно не очень разумно, её и правда проще верифицировать).

раскрыть ветку (1)
Автор поста оценил этот комментарий

С чего это "не получиться"? В чем принципиальная разница в получении данных из консоли или из веб-форм или из полей графического интерфейса? Граничные условия не пересчитываются, потому что закладываются в функцию "на входе". Что будет если в числовое поле кто-то умудриться забить текст? Знаю, что в теории невозможно... Но уязвимости присутствуют как объективная реальность. А когда функция проверяет то, что ей поступило "на входе" и либо выводит предупреждение, либо аварийно завершается при некорректном значении, то уязвимости появиться гораздо сложнее.


Для больших проектов есть другой способ - эмуляция. Тоже своего рода тест, но делается по другому. Выбираются значения и считается вручную (важно!) результат. Потом вместо UI запускается программа которая вбивает значения и сравнивает результат. На этапе UI - программа баги отлавливают тестировщики.

показать ответы
Автор поста оценил этот комментарий

вам нужно определить цель книги, и её целевую аудиторию. Судя по тому, что учебник охватывает многие базовые цещи - ЦА, видимо, состоит в основном из тех, кто совсем не знает программирования или только начал его изучать. Тогда я вижу только одну достижимую цель - познакомить с программированием. Потому что качественно научить программировать с нуля за одну книгу (имхо) невозможно.


Теперь, зная цели, можно поставить вместо себя "типичного представителя ЦА". Он берёт книгу по программированию, начинает её читать - и видит какие-то системы счисления, логические операции. "Зачем мне вся эта чушь? Я программировать хочу!" и откладывает вашу книгу, берёт другую книгу.

Чтобы такого не было - нужно (хотя бы в начале) давать клиенту (а в данном случае читатель - ваш клиент) то, что он хочет. То, что он ожидает. Начать надо именно с программирования. Я не спорю, что вообще и логические операции, и двоичная логика - очень важны. Но давать их "в сферическом вакууме", с обещаниями мол "это вам ещё потом пригодится" - плохой подход. Он работает только если человек свёрдо намерился изучить именно вашу книгу. А большинство просто отложить вашу книгу и возьмёт что-то поудобнее.


Поэтому я бы Главу 2 поставил первой (2.1 просто выкинуть или куда-то в самый конец положить - это полезно только для тех, кто уже серьёзно подумывает о карьере девелопера) и главу 5 поставил второй. Глава 3 пусть остаётся третьей (то бишь после Python), иоб я не понимаю, как вы собирались рассказывать про оформление кода когда сам код ученики ещё ни разу так и не видели. Что оформлять? :)

Python - отличный язык для обучения. Но вот почему дальше идёт С? Почему не сразу С++? Мы только что научили человека пользоваться классами и объектами, а теперь зачем-то просим его забыть об этом. Причём я не увидел по содержанию, что ученик получит, если откажется от изечнных фич (на деле я, конечно, знаю области применения С, но это опять же только для тех, кто уже не нуждается в таких книгах). Так что лично я бы вместо С сразу поставил С++.


Также ОБЯЗАТЕЛЬНО нужно рассказывать про структуры данных. Хороший прогаммист обязан понимать разницу между вектором и списком. Почему иногда мы хотим использовать дерево поиска, а иногда - хэш-таблицу. Всё это нужно вынести в отдельную главу "Структуры данных" (название взял с неба) и описывать после С++, т.к. там придётся говорить про указатели и работу с памятью.


Сам в качестве хобии преподаю информатику/программирование уже 8 лет. Если ещё будут вопросы или с чем-то из написанного не согласны - комментируйте, обсудим.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо за комментарий. Целевая аудитория - люди, которые хотят начать программировать. Цель книги - подготовить начинающего программиста "с нуля" и "под ключ". Возрастная категория 12+.


Книга - интерактив. То есть это не бумажная версия, а архив со страницами + примеры + необходимые файлы и сверхлегким браузером для просмотра. Экспериментально хочу попробовать сделать вариативное содержание (то есть несколько параллельно доступных вариантов оглавлений). Если пойдет, то можно будет и о бумажной задуматься.


Ну а насчет "чего клиент хочет" - мое упущение. Проект рассматривается как некоммерческий, поэтому об этом не думал.


Си, наверное стоит либо выставить факультативом (как пролог) или выкинуть совсем.


Структуру данных добавлю. Найдешь меня в ВК - ник везде один.

показать ответы
1
Автор поста оценил этот комментарий

Постарайся поработать над изложением, иногда твои тексты через чур академичны и суховаты, иногда ты о простых жизненных вещах говоришь очень сложно. Представь что твоему будущему читателю не обязательно 25-30 лет :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Вычитку готовых текстов будут производить школьники 7+ классов (я у них преподаю). Если им будет понятно, то я думаю и взрослые поймут.
Автор поста оценил этот комментарий
Это утопия бесполезная и бесперспективная)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Пролог - весьма интересный язык. Он интересен тем, что с одной стороны он сказочно крут, но в то же время сказочно бесполезен. Потому что его ниша крайне узкая, более того, эта ниша не имеет широкого распространения.


Но убило Пролог другое - его гораздо проще заменить, чем выучить.

Автор поста оценил этот комментарий

так вы не писали что с ней не работали)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Эх... Всего знать невозможно. Если проект взлетит, то обязательно выучу и включу во 2-е издание, как и мобильную разработку.
Автор поста оценил этот комментарий

Нет, сначала пишут тесты, а потом уже код, в этом суть TDD. Добавляют новые тесты только при исправлении багов, чтобы была уверенность в отсутствии регрессий и при расширении функционала, но тут опять сначала тест - потом код.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Сам-то принцип от этого не меняется. И заодно то, что вызывает у меня приступ бешенства - многие, кто говорят о TDD заявляют, что "работа прекращается, когда код начинает проходить все тесты".

Автор поста оценил этот комментарий

2.1 как-то не к месту, на мой взгляд. Может это в конце ?


Обычно SQL и БД учат после основ программирования, хотя, Вам виднее.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Неа, там ему самое место. Когда чему-то выучили - уже появились привычки, так что лучше сразу осветить. С SQL тот же принцип. Когда человек освоил императив появляется желание на нем сделать все, в том числе и то, что по уму должны делать декларативные языки.
Автор поста оценил этот комментарий
Супер. Как и когда можно узнать, что учебник готов?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Сделаю посты когда запущу Бумстартер и буду выкладывать главы по готовности в постах. Проект - полностью открытый, средства собираю, чтобы на время написания стать менее привязанным к работе (чтобы освободилось время).

1
Автор поста оценил этот комментарий

Не очень понятно чему именно вы собираетесь научить людей. Если курс наподобие "Основ программирования", то стоит сделать упор на алгоритмистику, способы построения алгоритмов, структуры данных и т.д.


Если с уклоном в web-программирование, что мне кажется более логичным по вашему содержанию, то имеет смысл ограничиться языками Python и близкими к нему, а также рассмотреть клиент-серверную архитектуру, хотя бы чтобы дать основное представление зачем всё это и где применяется.


Если стремитесь покрыть большую аудиторию и сильно желаете рассмотреть много языков программирования, то нужно хотя бы давать их классификацию и пояснять для чего может применяться каждый из них на примерах.


В любом случае, как мне кажется, Пролог сильно выпадает из общей структуры. Если слышали такое понятие как Декларативные языки программирования, то это он. C++ и все остальные - процедурные. Отличие принципиальное, и зачем их рассматривать "в куче", не очень понятно.


И последнее замечание, простите. На мой пристрастный взгляд парадигме "объектно-ориентированного программирования" можно посвятить несколько больше места...


Тем не менее, удачи вам в своих начинаниях)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Спасибо, учту пожелания.
Автор поста оценил этот комментарий
Пролог тут ненужен
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Да, но для общего развития и разминки... Вообще хотел кинуть Лисп для затравки, но он отпугивает.
показать ответы
3
Автор поста оценил этот комментарий

Офигенная штука должна получиться, но как заставить себя это читать? ))

7.1 Указатели и нафига они нужны. Почему в паскале (который учили все) такой дичи не было, и зачем выделять память не во время компиляции. (мое имхо, ибо на указателях, собственно, не самой сложной части, все грустнеют и заканчивают обучение)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Добавил.
показать ответы
Автор поста оценил этот комментарий

ссылочку на бумстартер будь добр,или пикабу это расценит как рекламу?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Проект в черновиках (оформляю). В первой версии хотел ограничиться только Python, но потом подумал добавить языки. Заодно спросить про темы которые стоит включить. Хочется сделать качественное пособие "с нуля и под ключ".
показать ответы
Автор поста оценил этот комментарий

А если в код пишут 2 программиста. И функция возведения в степень использует функцию, вывода, обработчик ошибок, и функцию умножения. А функцию pow использует функция факториала.

То как одному программисту гарантировать, что изменения в одном участке кода не приведут к появлению ошибок в другом участке кода?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
А для этого и существует контроль версий и документация.


Когда я участвовал в коллективной разработке у нас было "правило кодов" (обратили внимание на QT, который все "свои" данные метит Q). Для того, чтобы случайно не переназначить системные переменные или не создать случайно две переменные/функции с одним именем использовались коды:

[буква проекта][1-2 буквы из ФИО сотрудника]. То есть если код проекта Z, а сотрудник получил код II то его функции и переменные начинаются с ZII. При выполнение работы сперва ставилась задача (если проблему видел сотрудник, то он выставлял задачу себе), шла итерация (добавление/изменение функций и переменных), проверялось исполнение, затем следующая итерация.


Теперь о "появлении ошибок в другом участке" - проверка данных в функциях проходит "на входе" и "на выходе" функции (проверка возвращенного значения). Если возникнет ошибка, то эмуляция покажет проблему, а лог - её локализацию.

показать ответы
1
Автор поста оценил этот комментарий

Тесты. Если этого до сих пор нет в содержании, лучше ничему не учить других.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Тесты являются распиаренной, но не нужной (а иногда и опасной) системой. Наглядно:

1. Пишем код

2. Пишем тесты кода

3. Натравливаем 2 на 1

4. Смотрим результат.

Если все хорошо, то в релиз. Круто? Да... Но только выглядит. Потому что если тест написан с косяком или баг трудно воспроизвести, то в релиз уходит уязвимость.


Теперь смотрим на такую схему:

1. Прописываем архитектуру вызовов

2. При написании кода определяем граничные значения переменных

3. При передачи параметров функциям проверяем переменные на граничные условия

4. Проверяем функцию на набор условий.


То есть во-первых тестирование не является отдельным пунктом разработки (включено в Безопасность), во-вторых проводится непосредственно при разработке. Шанс ошибиться гораздо ниже (правда и скорость разработки несколько падает).

показать ответы