Доставка моєї бібліотеки першого класу. Будь-які проблеми, які мені потрібно знати?


12

Я веб-розробник, який збирається розблокувати досягнення в моїй кар’єрі "Бібліотека першого класу", і я потію кулями (я всю ніч напружувався). Я хотів би скористатися досвідом спільноти, щоб побачити, чи є у когось якісь пропозиції чи рекомендації, щоб переконатися, що це проходить максимально гладко. Чи є якісь конкретики та проблеми, про які мені потрібно знати? Щось особливе щодо процесу збирання, що може повернутися, щоб мене вкусити?

Ось де я перебуваю:

  • Бібліотека перевірена одиницею і охоплює код приблизно 97%
  • API добре задокументований і створено XML-документи для підтримки intellisense
  • Я переконався, що користувачі приватного та приватного класу є точними та правильними. Те ж саме стосується всіх геттерів / сетерів
  • Помилка з обробкою помилок не настільки витончена, як хотілося б, але я дотримуюся встановленого терміну і визнав, що це "так добре, як і зараз".
  • Немає дружньої лісозаготівлі. Debug.Writeline широко використовувався ... Нещодавно я дізнався, що це відображення мого недосвідченості :(

Ваша рада дуже цінується!

Бібліотека буде використовуватися для генерування звітів. Стандартна шапочка - підключається до бази даних лише для читання, виконує обчислення, формати та виводить дані у потік відповідей.


Мене було використано як ресурс, який потрібно заповнити одному із програмістів, які вийшли з ладу, і це завдання мені було надано як проект "вирізати зуби". Бібліотека класів буде випущена для використання іншими програмістами компанії, поки вони пишуть виробничий код.


2
Потрібні деталі, як випустити? Випуск на продаж? Випустити відкритий код для спільного використання? Відпускати клієнту за контрактом, на який укладаєте? Відпускати до решти організації розвитку як частину проекту для роботодавця, який працює на повний робочий день? Випускати як версію нового продукту для клієнта, доступного для роботодавця, який працює на повний робочий день?
Джиммі Хоффа

@JimmyHoffa: додав відповіді на ваші запитання. Дякуємо, що знайшли час hte!
Пан JavaScript

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

Можливо, використовуйте Sandcastle або іншу бібліотеку, що генерує документи, щоб мати офлайн (ish) довідкові матеріали?
Джессі К. Слікер

7
Розслабтесь. Маючи навіть один тест на одиницю та один єдиний рядок документації API, піднятий цей випуск вище ~ 95% коду, "випущеного для інших програмістів у компанії", на мій досвід.
Carson63000

Відповіді:


8

Блокування API

Мистецтво ефективного побудови API - це стільки про управління очікуванням, скільки про структуру.

Коли я говорю API, я конкретно маю на увазі те, як називаються загальнодоступні / внутрішні класи / методи та який рівень їх доступу (тобто приватний / громадський / внутрішній).

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

Релізи:

  • Бета (тобто до 1,0)

    • може містити кілька змін порушень API
    • можуть не вистачати змін, сумісних із зворотним рівнем між версіями
    • може бути відсутність лаку
  • Офіційний (1.0+)

    • API заблоковано до наступного основного випуску
    • будь-які внесені зміни повинні гарантувати зворотну сумісність
  • Незначний (колишній 1.1)

    • містять виправлення помилок та / або реалізацію функцій
    • може доповнювати, але не відбирати від визначеного API

Якщо ви вважаєте, що API потрібно загартувати, то випустіть його на деякий час як бета-версію. Це сигналізує про те, що він доступний для використання, але не повинен використовуватися для виготовлення та / або критичного для місії коду.

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

Ваші припущення про те, як воно буде використовуватися, помилкові

Незалежно від того, наскільки добре щось розроблено, люди знайдуть спосіб зловживання або створення альтернативного використання.

Один із способів вирішити це - заблокувати якомога більшу частину реалізації за допомогою аксесуарів (тобто приватних / публічних / внутрішніх), але жодна кількість дизайну чи інженерії не дасть вам стільки розуміння, як випуск коду для користувачів.

Насправді не важливо, наскільки «ідеальним» ви вважаєте, що ваш код може стати, ваші користувачі докажуть, що це не так.

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

У вашому випадку ви загартовуєте битву з нуля, щоб ви могли також почати роботу.


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

Реалізація послідовної схеми ведення журналів буде важливою перед випуском коду для виробництва, оскільки вам знадобиться спосіб глобального включення / відключення / фільтрації журналів. BTW, в більшості випадків ведення журналу дійсно включає лише імпорт бібліотеки та зміну вихідних викликів з Debug.WriteLine () на щось на зразок Logging.Debug (), Logging.Info (), Logging.Error (). Сам реєстратор просто забезпечує стандартну реалізацію для конфігурації, фільтрації та більш широкого спектру схем виводу (колишні файли, консоль тощо).

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


1
+1 Re: ведення журналів - настійно рекомендую TraceSource . Він не вводить зовнішніх залежностей, оскільки є частиною основних бібліотек .NET, і дозволяє користувачам приєднувати слухачів і налаштовувати відстеження як через код, так і через файли app.config.
Ден Ліон

4

Ці дві речі, які я вважаю, є ключовими для випуску програмного забезпечення:

  • Точно знайте, що ви звільнили
  • Керуйте очікуваннями

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

Знаючи, що ви звільнили

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

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

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

Управління очікуваннями

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

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

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


0

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

Загальне:

  • Введіть нульові перевірки параметрів функції, які не повинні бути нульовими. Це допомагає мені рано провалюватися.
  • Видаліть зайві коментарі та коментовані файли. Це спричиняє майбутню роботу.
  • Шукайте будь-які коментарі "// TODO". Іноді я залишаю для себе записки. Іноді про них забуваю.
  • Проведіть тест мого коду, використовуючи виробничу базу даних, де це можливо. Це допомагає гарантувати, що на виробничому сервері відбулися всі зміни моєї бази даних.
  • Введіть рясні лісозаготівлі. Особливо для початкового розгортання. Насправді я зберігаю журнал для кінця, тому що мій код, як правило, дещо гелюється. Ви не хочете потрапляти в ситуацію, коли стався збій, і ви кажете собі "Якби я знав, яке значення значення X має в цей час". Спробуйте спланувати заздалегідь.
  • Спробуйте зафіксувати сторонні бібліотечні дзвінки на Фасадах. Це дозволяє легко змінювати бібліотеки в майбутньому, а також забезпечує контрольний список того, що потрібно від бібліотеки.

.Net specific:

  • Переконайтесь, що я викликаю Dispose () на одноразові об’єкти. Я використовую аналіз коду або FxCop, щоб допомогти знайти випадки цього.
  • Переконайтесь, що я правильно відкрутив усі обробники подій. Це запобігає витоку пам'яті.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.