Компанії link guestbook php. Скрипт гостьової книги на PHP

Жарознижувальні засоби для дітей призначаються педіатром. Але бувають ситуації невідкладної допомоги за лихоманки, коли дитині потрібно дати ліки негайно. Тоді батьки беруть на себе відповідальність і застосовують жарознижувальні препарати. Що можна давати дітям грудного віку? Чим можна збити температуру у старших дітей? Які ліки найбезпечніші?

У цьому віці go'ging to see how ми можемо будувати guestbook easily with PHP and MySQL. This is very simple andстрійнаперед. All we need is:

  • A webserver або hosting account
  • phpMyAdmin або деякийтижневий для access access database

Перший, ми маємо створити creative database and necessary tables. Перейти до нашого керуючого panel (cPanel або деякий) і go to databases. Create a new database. Notice the database name. Новий розробник user і add the user to that database. Якщо ви знаєте, що це не так, скористайтесь contact customer service of your hosting provider. Процеси значною мірою відрізняються від host до host, depending on control panel they provide. Натисніть на повний файл username, user name and database host. В більшості випадків, в базі даних host є «localhost». Але деякі постачальники як customers для використання remote mysql host. У тому випадку, мабуть, що host down. Якщо ви використовуєте WAMP-сервер на Windows, перейдіть на http://localhost/phpmyadmin/ і ви збираєтеся отримати опції.

Now we’re ready to import the table. Перейти до phpMyAdmin, виберіть потрібний файл, створений і використовувати following SQL commands для створення table:

CREATE TABLE IF NOT EXISTS `comments` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `website` varchar(255) NOT NULL, `message` text NOT NULL, `timestamp` int(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Окаи, якщо ви execute command, ми повинні мати table nameed “comments” with 6 fields. The “id” field is the primary key and the unique identifier. The other fields are – name, email, website, message and timestamp. Timestamp field stores unix epoch value (how many seconds passed after 1st January 1970) of time. It will be generated using the time() function of php. В інших сферах є self explanatory.

Тепер ми повинні створити файл configuration which shall be used to store the mysql connection data. Створити файл назви: “config.php” і почати following codes in it:

So, the config.php lets you use your own configuration data. Натисніть, щоб змінити значення параметрів для зміни вашого набору.

Now we create the first page. Створити файл назви “index.php” і почати ці коди в нього:

My Little Guest Book

Post A Comment:

Name:

Email:

Website:

Message:

Exisiting Comments:

Name:($comment["name"])
"; echo" Email:($comment["email"])
"; echo" Website:($comment["website"])
"; echo" Message:($comment["message"])
"; echo" Posted at:" .date("Y-d-m H:i:s",$comment["timestamp"])."

"; } } ?>

So what does this script do? Це має html form to fill up the data necessary. Після того, як форма, будуть виконані всі коментарі, збережені в 데이터베이스 і відображати їх на сторінці. Якщо немає коментарів, ми знаємо, що це print that out. Did you notice that the form action є “post.php”? Yes, form data буде працювати в posts.php, які низькі процеси fields і store them in database. So, let’s crate post.php and put the following codes:

My Little Guest Book

На цій сторінці, ми збираємося, і всі філії були пов'язані. Якщо не буде, ми можемо print an error message. Якщо всі сфери були пов'язані, ми намагалися зберігати contents до database. We create the timestamp value using time() and extract the keys out of $_POST variable. Якщо вхідні дані висхідних повідомлень, будуть також print out error message. Якщо все це є окаям, ми повинні бути власником до index.php, де він або невдовзі може бути доведений до коментарів, як тільки ти.

We’re now done with our little guestbook. It is not that feature rich but it works! У coming posts, ми повинні додати, що ми можемо змінити його до validation, pagination and ajax interactions. Stay tuned!

Сьогодні я опишу, мабуть, найкраще завдання для новачків мови програмування PHP. Гостьова книга. На мій погляд це завдання є найпростішим, але при цьому дозволяє дізнатися про всі основні особливості роботи з PHP і базою даних MySQL. Крім цього, це завдання нескінченно розширюється, що дозволяє відточувати нові технології.

Опис і вирішення цього завдання буде написано відразу тут, без перевірок на працездатність, тому, можливо, є помилка десь. Зроблено це не через мою лінощі, а знову таки через додаткове тренування, при створенні гостьової книги Вами. Також представлене рішення буде трохи «кривувато», але про це вже наприкінці цієї статті у розділі «Самостійна робота».

Якщо Ви зовсім не знаєте як працювати з PHP, то для початку раджу прочитати нотатку PHP - з чого почати.

Ми розбиратимемо створення найпримітивнішої гостьової книги, без дизайну та адміністрування. Тобто ми обмежимося входом у книгу, реєстрацією та й залишенням повідомлень.
З завдання стає зрозуміло, що ми можемо цілком обмежиться трьома файлами php, для реалізації цієї задачі. Звичайно завдання реєстрації можна розбити на дві: форма реєстрації та додавання даних до бази, проте робити ми цього не будемо. Аналогічні міркування допустимі й у процедури залишення коментарів. Таким чином створюємо три файли: index.php, registration.php, book.php.

За назвами файлів можна відразу зрозуміти, за що вони відповідатимуть: index.php - сторінка входу, registration.php - сторінка реєстрації, book.php - сторінка гостьової книги.

Найпростіше у нашому випадку це сторінка входу. Так як сторінка відповідає за введення пари логіну та паролю — на ній має бути присутня форма для відправки цих даних на сторінку book.php. А також посилання на сторінку з реєстрацією. Маємо:

Вхід до гостьової книги

Логін:
Пароль:

Реєстрація

Трохи відійшовши від теми, для тих хто не смакує що означає код вище. Тут ми маємо голий HTML. Ключовим моментом є тег formякий приймає два параметри action, який відповідає за адресу сторінки, яка відкриється після підтвердження введення даних, та параметр метод, який відповідає яким чином ці форми будуть надсилатися на вказану сторінку (див. POST і GET простими словами). Всередині тега form вказуються поля для введення (input, select), які обов'язково повинні мати атрибут name. Саме за значенням даного атрибуту можна буде отримати введені користувачем дані на сторінці, вказаній у параметрі форми action. Обов'язково всередині форми повинен знаходитися input з типом submit, який за своєю суттю є кнопкою, натисканням на яку і відбудеться відправка даних на сторінку action.

Продовжимо… Тепер нам потрібно створити сторінку із реєстрацією нового користувача. Варто одразу продумати, що саме ми хочемо мати. Я вирішив, що для простої гостьової книги буде цілком достатньо мати користувачів з унікальними логінами, а також знати адресу їхнього Web сайту (якщо він є). Якщо ми визначилися з тим, що ми хочемо знати про користувача, то ми можемо почати проектувати нашу базу даних.

Заходимо до phpMyAdmin. Створимо там основу з ім'ям gb. У цій базі створимо таблицю Users з такими полями:

Login varchar(50) unique //логін користувача, унікальне поле password varchar(150) //пароль www varchar(255) //адреса сайту

А якщо ми вже зайшли до редактора бази, то можна відразу й подумати про те, як ми зберігатимемо повідомлення. У нашому випадку цілком підійде знати хто і коли залишив повідомлення, та й власне текст нашого повідомлення. Так само для зручності варто пронумерувати наші повідомлення. З цим ми визначилися, отже, можна сміливо створювати ще одну таблицю Messages з наступною структурою:

Id int ai(auto_increment) primary_key //номер повідомлення, лічильник, який сам буде збільшуватися mes text //текст повідомлення who varchar(50) //логін того, хто залишив повідомлення when timestamp default(current) //час залишення повідомлення, замовчуванням Поточна датата час

Із базою даних розібралися. Тепер переходимо до файлу registration.php. Підбивши підсумок вищевикладеному маємо:

Реєстрація

Логін:
Пароль:
Пароль ще раз:
WWW: http://


На головну

Трохи про код. Як Ви вже помітили, тут є PHP. Описувати форму я вже не буду, але, як ми бачимо, тут дані форми посилаються на ту саму сторінку, де розташована дана форма. Тобто файл registration.php надсилає дані сам на себе. Так робити ніхто не забороняє, проте використовувати це можна не завжди, тому що це сильно псує читабельність коду. Однак, з іншого боку, це наочно демонструє можливості мови PHP. По суті, наша сторінка розділена на два випадки. Перший випадок це коли на сторінку надсилаються дані POST запитом, другий випадок, коли на сторінку ніякого запиту POST не надіслано. У другому випадку ми покажемо форму для реєстрації, а першому почнемо виконувати перевірки надісланих даних. Як видно дані йдуть у вигляді асоціативного масиву (тобто масиву, індексами якого є рядки). Причому індекси збігаються з назвами полів input, зазначеними у формі надсилання даних. Тобто. якщо ми пишемо

то у нас, при надсиланні цих даних POST запитом, буде змінна

$_POST["vasa-peta"]

Також варто зауважити, що жодних перевірок на повтор логіну ми не робимо. Дана перевіркабуде здійснюватися лише на рівні бази даних, оскільки поле логін позначено як унікальне.

Тепер останнє. Залишилося зробити саму гостьову книгу. Небагато міркувань. Так як гостьова книга працює за логіном і паролем, то перше, що нам доведеться робити - перевіряти введений логін і пароль на наявність у базі. Так як ми вирішили додавати повідомлення так само у файлі book.php, то очевидно слідом повинна здійснюватися процедура додавання повідомлення. Ну і наприкінці відображення всіх повідомлень. (якщо зробити додавання повідомлення після їх відображення, то додане повідомлення відобразиться тільки після перезавантаження сторінки). Маємо:

Гостьова книга "; ) else ( echo "Ваше повідомлення не додано!


"; } } ?>
" name="login" /> " name="password" />

"; echo "Текст: ".$row["mes"]."
"; ) ) mysql_close($link); ?>

Ось насправді і все. Якщо код 100% робітник, добре. Якщо ні, то рекомендую Вам постаратися самостійно виправити помилки. Тепер обіцяний розділ.

Самостійна робота
Як уже говорилося на початку, це рішення «криве». Якщо Ви ще не зрозуміли чому, то зараз поясню. Як ви могли помітити у файлі book.php у формі додавання коментаря присутні кілька прихованих полів, при цьому два з них – це введений користувачем логін та пароль. Не добре, чи не так? Спробуйте виправити цей недолік використовую сесії (Як працювати з сесіями в PHP).
Постарайтеся відповісти на питання, чим відрізняються функції empty/issetі exit/die?
Змініть запит вибірки повідомлень з бази так, щоб при виведенні повідомлень відображався веб-сайт автора повідомлення.
Якщо ви помітили, пароль користувача в базі даних зберігається у відкритому вигляді, а це дуже не добре. Відредагуйте код так, щоб у базі зберігався хеш пароля користувача (наприклад, MD5 або SHA1).

Сьогодні я дам вам скрипт гостьової книги на PHP, адже не секрет, що ця річ досить популярна і якщо іншої можливості спілкуватися з адміністрацією немає, то гостьова книга просто необхідна. І у цій статті Ви зможете скачати скрипт гостьової книги на PHP, а також я розповім про процес його встановлення.

Дуже часто люди просять скрипт гостьової книги на html або на javascript. На жаль, такого ніколи немає і не буде, тому що для роботи гостьової книги потрібно хоча б записувати повідомлення у файл. А це зробити ні в JavaScriptні, тим більше, в HTMLнеможливо.

Тепер копіюйте папку guestу корінь свого сайту. Далі розміщуйте на сторінці свого сайту посилання на гостьову книгу ( http://ваш_сайт/guest).

Наступним кроком буде налаштування гостьової книги. Для цього зайдіть на адресу http://ваш_сайт/guest/admin.php. Введіть пароль " admin" і після успішної авторизації зайдіть у вкладку " Конфігурування". Короткий опис усіх налаштувань:

  • Ім'я скрипту- Поставте свою назву для гостьової книги Вашого сайту.
  • Текст привітання- напишіть будь-який текст, який Ви бажаєте, щоб бачили Ваші відвідувачі при відвідуванні гостьової книги.
  • Рекламний блок- якщо Ви хочете розмістити рекламу в гостьовій книжці, то скопіюйте її код. Якщо її немає, залиште це поле порожнім.
  • Посилання на головну сайту- Поставте посилання на головну сторінку свого сайту.
  • Емайл адміна / надсилати повідомлення- вкажіть свій e-mail, а також виберіть: хочете Ви отримувати повідомлення на свою пошту чи ні.
  • Пароль адміну- Обов'язково поставте свій пароль. Не залишайте " admin".
  • Включити МОДЕРУВАННЯ повідомлень?- якщо Ви хочете перевіряти кожне повідомлення перед публікацією, увімкніть цю опцію.
  • Задіяти функцію антиспам?- тут можна відключити систему захисту від спаму, або вибрати один із трьох варіантів: звичайна капча, загадка чи матоперація. Якщо Ви оберете звичайну цифрову капчу, вкажіть також довжину капчі в текстовому полі праворуч.
  • Задіяти функцію антифлуду?- дана опція дозволяє відфільтрувати повідомлення за темою.
  • Робити посилання у тексті активними?- якщо поставите " Так", тоді посилання в тексті повідомлень будуть активними. Це зручно для користувачів, але Ваша гостьова книга буде хорошим місцем для спамеру.
  • Увімкнути/вимкнути графічні смайли?- якщо поставите " Так", то користувач зможе використовувати смайли.
  • Макс. довжина імені- Допустима кількість символів в імені користувача.
  • Макс. довжина повідомлення- допустима кількість символів у повідомленні.
  • Повідомлень на сторінку- кількість повідомлень, що виводяться на одній сторінці.
  • Слідування повідомлень- Сортування за зростанням або зменшенням дати написання повідомлення.
  • Скін- зовнішній вигляд.

Насправді, існує величезна кількість найрізноманітніших скриптів гостьових книг. І коли я шукав його, то перебрав не менше двох десятків і зупинився на цьому з таких причин.

1. На безкоштовному хостингу є лише те, що дають.
2. Краще, але не обов'язково. Порядний гість залишить повідомлення так, як потрібно (через мою форму), а гарнийхакер все одно обійде ваші $_GET, $_POST, $_COOKIE та $HTTP_REFERER теж.
3. Контроль довжини проводитися, але неявно, самої БД (єдино, що саме повідомлення може бути величезне - до 64Кб).
4. Так, є, HtmlSpecialChars була використана, не використовував AddSlashes (і це велика помилка, визнаю свою провину, див. нижче). При ключеній magic_quotes_gpc, дана проблема не настільки гостра, але дірка в безпеці залишається (в панелі управління).
5. Так, згоден, можна було б і вирізати, але ім'я #[email protected]%#$^%$ нічим не гірше ніж AF4ETX09T43. У e-mail та url є дірка, можна використовувати скрипти.
6. Цікаво, що не ініціалізовано?

Є ще ряд цікавих прийомів, як, наприклад, захист від автоматичного введення через картинку (як на цьому сайті) http://www.сайт/webmast/php/Security-Images-in-PHP/
...

Картинок здається не було, навіщо ускладнювати демонстраційний приклад. Поки що жодного разу не зустрічав гостьовий із подібним захистом. Щодо цього сайту, то це не гостьова.

Анатомія міжсайтового скриптингу XSS
http://www.woweb.ru/index.htm/id/1073393942

Дуже цікаво, дякую.

З.И. Якби Аффтор попрацював би почитати (і вникнути) у статті що на цьому ж сайті, то зрозумів би, наскільки його праця непрофесійна. Варто враховувати досвід попередніх Авторів і, принаймні, поважати їхню працю - вони ж для вас писали.

Де є не пошана? Вибачте, якщо кого образив.

Щодо захисту, то раджу ще раз прочитати перший абзац статті, я не ставив за мету розглядати надійну гостьову, а лише показати як можна написати найпротішугостьову, для тих хто тільки починає пізнавати CGI, адже не все відразу приходить, треба починати з простого, і ти теж не відразу став таким розумним, теж робив помилки, тож давай залишимо аспекти захисту іншим статтям, іншим авторам.

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

PS

Цитата:

Закон "Про авторське право та суміжні права"
Стаття 6. Об'єкт авторського права. загальні положення
1. Авторське право поширюється на твори науки, літератури та мистецтва, які є результатом творчої діяльності, незалежно від призначення та перевагитвори, а також від способу його вираження.
Решту можеш прочитати тут: http://www.febras.ru/~patent/copyright/2_3part2.html
У тому числі і стаття 9. п.1
І не тобі вирішувати користуватися моїм правом чи ні.

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

Що означає технологія через тестування?

З початку комп'ютерної ери програмісти та помилки боролися за перевагу. Це неминуче явище. Навіть найбільші програмісти ставали жертвою цих аномалій. Немає безпечного коду. Саме тому ми використовуємо тестування. Програмісти, хоча деякі з них, перевіряють свій код, запустивши його на своїх робочих машинах, щоб переконатися, що він робить, що він повинен.

Розробка через тестуванняце техніка програмування, яка вимагає одночасного написання коду програми та тестів для нього. Це гарантує, що ваш код протестований – і дозволяє тестувати ваш код швидко та легко, оскільки цей процес автоматизований.

Як це працює?

Розробка через тестування або TDD є коротким ітеративним циклом розробки:

  1. Перед написанням будь-якого коду спочатку необхідно написати тести для нього. При написанні автоматичних тестів необхідно брати до уваги всі можливі вхідні дані, помилки та вихідні дані. При такому підході ваші думки не будуть прив'язані до жодного коду, який вже написано.
  2. Перший раз, коли ви запускаєте автоматичні тести, вони завершаться невдачею, позначаючи, що код ще не готовий.
  3. Після цього ви можете розпочати програмування. Якщо вже існує тест, і є код, що тестується, але як і раніше тести завершуються невдачею, це означає, що код ще не готовий. Код може вважатися виправленим, якщо він проходить усі перевірки.
  4. Як тільки код успішно проходить тест, можна розпочати його очищення за допомогою рефакторингу. Доки код успішно проходить тести, можна вважати що він, як і раніше, правильно працює. Вам більше не потрібно турбуватися про зміни, які можуть призвести до багів.
  5. І знову повторюємо цей цикл з іншим методом чи програмою.

Добре, але чим же це краще звичайного тестування?

Ви колись цілеспрямовано пропускали тестування програми, тому що:

  • Ви відчували, що це буде втратою часу, оскільки було внесено дуже мало змін.
  • Ви відчували себе лінивим почати тестувати все знову?
  • У вас не було достатньо часу для тестування, оскільки менеджер проекту наполягав на якнайшвидшому запуску?
  • Ви обіцяли собі протестувати це завтра?
  • Ви віддали перевагу улюбленому телешоу тестуванню?

У більшості випадків нічого не трапляється і ви успішно викочуєте свій код на продакшн без будь-яких проблем. Але іноді все відбувається навпаки. Ви намагаєтеся пофіксувати тисячі дірок у кораблі, що тоне, в той час як кожну хвилину з'являються нові. Напевно ви не хотілиб опинитися у подібній ситуації.

TDD був створений щоб ліквідувати наші виправдання. Коли програма була розроблена з використанням TDD, ми можемо швидко і ефективно застосовувати нові зміни. Все, що нам потрібно зробити - це запустити автоматичні тести! Якщо всі тести пройдені, то можна рухатися далі, якщо ні – це означає, що наші зміни щось зламали. Знаючи яка саме частина тестів впала, ми можемо легко визначити, в якому місці наших змін ми зламали код і швидко це виправити.

Я купився. Як ми це зробимо?

Існує безліч PHP автоматизованих фреймворків для тестування, які ми можемо використати. Найбільш широко використовуваний з них - PHPUnit.

PHPUnit є досить потужним фреймворком для тестування, який може бути легко інтегрований у ваші власні проекти або інші проекти, побудовані поверх популярних PHP фреймворків.

Для наших же цілей, нам не потрібна та безліч функцій, які пропонує PHPUnit. Замість нього ми будемо використовувати набагато простіший фреймворк SimpleTest.

У наступних кроках давайте припустимо, що ми розробляємо програму гостьової книги, де будь-який користувач може додавати та переглядати записи. Припустимо, що верстка була завершена, і ми просто створюємо клас, який містить логіку програмигостьової книги, де програма вставляє записи та читає їх з бази даних. Ми будемо розробляти та тестувати частину, яка відповідає за читання.

Крок 1. Налаштування SimpleTest

Це можливо найпростіший крок із усіх. Навіть цей хлопець зміг би це зробити:

Крок 4. Програти, щоб виграти

Як тільки ви перестали писати свій код, слід запустити тести. При першому запуску вони обов'язково завершаться невдачею. Якщо це не так, то, швидше за все, ваші тести насправді нічого не тестують.

Щоб запустити тести, просто відкрийте файл guestbook_test.phpу своєму браузері. Спочатку ви побачите це:

Це сталося, тому що ми ще не створили клас guestbook. Щоб зробити це створює файл guestbook.php всередині директорії classes. Цей клас буде містити методи, які ми збираємося використовувати, але поки що він нічого не містить. Пам'ятайте, спочатку ми пишемо тести, а потім код, Що тестуємо.

Якщо ви знову запустите тести, то результат виглядатиме так:

Як бачимо, наш тест продовжує завершуватися невдачею. Спробуємо знову розв'язати цю невдачу.

Крок 5. Вирішуємо тести шляхом написання коду

Тепер, коли у нас є робочі автоматизовані тести, ми можемо почати писати код. Відкриємо клас guestbook.phpта почнемо з вирішення нашого тесту.

"Kirk", "message" => "Hi, I"m Kirk."), array ("name" => "Ted", "message" => "Hi, I"m Ted.")); Public function viewAll() ( // Here, we should retrieve all the records from the database. // This is simulated by returning the $_entries array return self::$_entries; ) public function add($name, $message) ( // Тут, ми simulated insertion in the database by adding a new record in the $_entries array // This is the correct way to do it: self::$_entries = array("name" => $name, "message" => $message);self::$_entries = array("notname" => $name, "notmessage" => $message); ( // We just set $_entries array to simulate self::$_entries = array(); return true; ) )

Цей клас guestbook.php містить деякі баги, які ми зможемо знайти, коли наші випробування впадуть.

Коли запустимо тести, то побачимо таке:

Висновок у тестах показує нам у якому тесті та у якому конкретно затвердженні наш код падає. Від сюди ми легко можемо визначити, що твердження на 16 і 17 рядках завершилися невдачею.

assertTrue(isset($entry["name"]))); $this->assertTrue(isset($entry["message"]))); ... ... ... )

Це ясно показує, що повернутий масив не містить коректних ключів. Відштовхуючись від цього, ми тепер легко можемо визначити, яка частина нашого коду працює не так,

$name, "message" => $message); //fixed! return true; ) ... ... ... )

Тепер знову запустимо наші тести:

Крок 6. Рефакторинг

Оскільки код, який ми тут тестуємо, є досить простим, наші фікси багів пройшли досить швидко. Але якщо б це було складніше додаток, вам доведеться зробити кілька змін у вашому коді, щоб його було легше підтримувати. Проблема тут у тому, що зміни найчастіше мають на увазі додаткові баги. Ось де нам допомагають автоматизовані тести – як тільки ми вносимо зміни, просто знову запускаємо тести. Якщо вони знову проходять успішно, це означає, що ми нічого не зламали. Якщо завершуються невдачею, то ми десь припустилися помилки. Вони одразу повідомляють нам, де у нас помилка, і швидше за все як її можна виправити.

Крок 7. Повторити по колу

Зрештою, коли ваша програма вимагатиме нової функціональності, необхідно написати нові тести. Це легко! Повторюємо процедури з другого кроку (бо SimpleTest вже налаштований та встановлений), і починаємо коло спочатку.

Висновок

Існує безліч статей на тему розробки через тестування з більш глибоким вивченням, і можливо навіть з більш функціональними інструментами ніж SimpleTest - наприклад, мок-об'єкти, стаби, які допомагають зробити процес написання тестів ще легшим. Якщо хочете почитати більше, що сторінка Вікіпедії про розробку через тестування направить вас на правильний шлях. Якщо ви плануєте продовжити використовувати як свій тестовий фреймворк SimpleTest, то зверніть увагу на онлайн документацію і обов'язково ознайомтеся з додатковими його можливостями.

Тестування є невід'ємною частиною циклу розробки, однак часто його вирізують через дедлайни. Сподіваюся, що після прочитання цієї статті ви зрозумієте всю важливість інвестування в розробку через тестування.

Які ваші думки щодо розробки через тестування? Вам це цікаво чи навпаки ви вважаєте це простою втратою часу? Пишіть у коментарях!

Підтримайте проект - поділіться посиланням, дякую!
Читайте також
Які apple watch вибрати? Які apple watch вибрати? Колонка портативна Sony SRS-X11 Black Колонка портативна Sony SRS-X11 Black Огляд портативної колонки Sony SRS-X11 Огляд портативної колонки Sony SRS-X11