Обсяг рутинної роботи з розробки програмного забезпечення та його вплив на оцінку


11

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

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

  1. Все, що можна оцінити з високою точністю, - це рутинна робота, тобто речі, які були зроблені раніше. Всі інші види роботи, що стосуються досліджень та творчості, насправді не можна оцінити, принаймні, не з точністю, скажімо, +/- 20 відсотків.

  2. Розробка програмного забезпечення полягає в тому, щоб уникнути повторюваних завдань. Одним із основних його принципів є ДУХА (не повторюйте себе). Кожен раз, коли програміст виявить, що він робить повторювані речі, саме час знайти абстракцію, яка уникає цього повторення. Ці абстракції можуть бути простими речами, такими як вилучення повторного коду у функцію або введення його в цикл. Вони також можуть бути складнішими, як створення мови, що залежить від домену. У будь-якому випадку їх реалізація передбачає дослідження (чи хтось робив це раніше?) Або творчість.

З цих двох пунктів роблю вищенаведений висновок.

Насправді я досить довго цікавився, чому ці відносини не згадуються в будь-якій іншій дискусії, публікації в блозі чи статті про оцінку програмного забезпечення. Це занадто теоретично? Чи мої припущення неправильні? Або це занадто банально - але тоді, чому більшість відомих мені розробників вважають, що вони можуть робити оцінки з точністю +/- 20 відсотків або вище?


7
99% всієї розробки програмного забезпечення за межами таких областей, як ядра, були зроблені тисячі разів. Занадто багато розробників просто хочуть робити все по-новому, вигадуючи ті самі старі проблеми знову і знову.
Бент

@Bent: Отже, ви говорите, що розробка програмного забезпечення - це в основному копіювання та вставка? Я знаю, що багато розробників працюють таким чином і часто виявляють, що це призводить до неможливого коду. Але це вже інша історія. Навіть якщо хтось працює таким чином, він повинен зрозуміти, що скопіювати і звідки. Це те, що я також вважав би дослідницькою роботою.
Френк Пуффер

1
@rwong: Звичайно, має сенс використовувати бібліотеки. Але пошук потрібної функції в бібліотеці та правильний спосіб її використання - це або науково-дослідна робота (якщо lib має скаргу та / або ви її добре не знаєте), або тривіальна (якщо ви знаєте цю функцію). Те, що ви називаєте «клей-код», на мій досвід, часто є складним. Її реалізація не є необхідною рутинною роботою.
Френк Пуффер

1
@ JohnR.Strohm: Я не читав цих специфічних книг, але знайомий з основами COCOMO - проте ніколи не використовував це на практиці. Також я прочитав дві-три інші книги ДеМарко. Чи можете ви підказати, який конкретний зміст пов'язаний з моїм запитанням?
Френк Пуффер

2
@FrankPuffer, "Економіка програмного забезпечення інженерії" Боема для читання програмного забезпечення потрібна для читання. Книга Демарко не відстає. КОРОТКА відповідь така: Якщо ви досить добре знайомі з тим, що програмне забезпечення повинно зробити, щоб оцінити його ВСЕ, ви досить знайомі, щоб вважати це відносно звичайним.
Джон Р. Стром

Відповіді:


11

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

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

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

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

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

Вимоги зазвичай поділяються на три категорії:

  1. Неясні, деталі залишені розробнику.

"Зробіть мені веб-сайт, він повинен бути крутим і продати свої віджети"

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

  1. Дуже специфічний

"Зробити колір фону заголовка # ff1100"

Супер швидко зробити і, знову ж таки, легко оцінити. Але! вимога обов'язково змінюється. "Хм ні на друге думки, спробуйте цю іншу червону" або "Зачекайте! Я мав на увазі лише на цій одній сторінці!" тож реальний проміжок часу "скільки часу, поки я не задоволений кольором заголовка" не має нічого спільного з кодирувальними оцінками

  1. Неясні, припущені деталі

"Зробіть мені веб-сайт, (як і facebook)"

Тут безліч нестандартних припущень, "звичайно, ви хочете іншого логотипу", "воно повинно мати нескінченну прокрутку", "повинно бути масштабованим до 1 мільярда користувачів!" ефективно контролювати кошторис. Або розробник думає про все і підштовхує оцінку вище очікувань "1 meeelion man hours", або вони думають / припускають, що потрібні лише базові особливості та дають занадто низьку оцінку. "Ой тиждень-другий, я припускаю, що ви просто хочете поставити фейсбук в кадрі правильно?"

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


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

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

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

Давайте не потрапляємо у полум’яну війну "хто найкращий програміст". Все, що вони говорять, - чим більше речей ви зробили, тим менше нових речей. Якщо у всіх ваших проектах передбачено використання нових технологій для більшості функцій ... Це здається дивним
Ewan

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

6

чому більшість відомих мені розробників вважають, що вони можуть робити оцінки з точністю +/- 20 відсотків або вище?

Тому що ми оцінюємо своє терпіння з проблемою набагато більше, ніж реальна проблема.

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

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

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


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

@FrankPuffer Я не погоджуюся, що спритні методи не дозволяють зробити це зрозумілим. SCRUM, зокрема, навіть не вимагає від розробників оцінювати, поки значення функції не буде настільки високим, що його насправді планується виконати, тобто, точно під час оцінки. Агільні методи особливо підходять для цього: спочатку визначте функції з найвищою цінністю для бізнесу, потім оцініть їх, потім зробіть їх і подивіться, скільки часу насправді зайняло. Помийте повторно промивання. Через кілька циклів цього ви отримаєте дуже гарне уявлення про оцінку та фактичний час розробки.
RibaldEddie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.