Добре розроблене / якісне програмне забезпечення з відкритим кодом [закрито]


32

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

Це повинен бути великий проект: не менше 100 000 рядків коду.

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

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

У вас є якесь програмне забезпечення, яке б мені запропонувало?

Зауважте, що програмне забезпечення просто має мати гарний дизайн, дизайн не потрібно документувати! :)

Це не має бути додатком для кінцевого користувача ... Це також може бути бібліотека, інструмент тощо ...


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

Дякую, що вказали на це. Мушу сказати, що інструменти розробки програмного забезпечення мене зацікавили б.
Андреа Зіліо

Якусь конкретну платформу ви хочете використовувати?

3
Погляньте на "Архітектуру програм з відкритим кодом", де описано ряд добре розроблених програм з відкритим кодом.
Річард

Рядки вимірювання коду неоднозначні. Розмір виконуваного файлу та всі клітини, від яких це залежить, можуть вам щось сказати. якщо там є хороша бібліотека, користуватися нею є лише сенс. Потім я вважаю рядки бібліотеки частиною мого загального підрахунку LOC чи ні? Я б сказав, що багато фреймворків (бібліотеки, API, SDK або будь-яке ім'я ви віддаєте перевагу), як правило, дуже хороші (вони потрапляють у будь-який кут з будь-якого кута, тому помилку швидко знайти і їх потрібно швидко виправити). Оскільки хороші кодери будуть використовувати інші хороші ліфти, то для складної програми активний LOC не повинен бути великим.
Робота

Відповіді:


23

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

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

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

  • jQuery - не дуже добре (внутрішньо) документована бібліотека, але надихаюче джерело, що демонструє, як JavaScript-код на стороні клієнта може творити чудеса.

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

  • v8 - дуже хороший код C ++, фантастична бібліотека для вивчення / вивчення реалізацій віртуальної машини.

  • Проекти NoSQL - Couch, Mongo, Redis, Cassandra - ці проекти демонструють розумні способи вирішення завзятості проблем. Також вони охоплюють ідею наполегливості поліглоту.

  • Збільшення бібліотек - хороша доза C ++.

  • OpenStack - дуже хороші проекти з хмарних обчислень та віртуалізації.

  • Фонд програмного забезпечення Apache - виберіть будь-який із своїх проектів та вивчіть його. Модульна структура HTTPd є чудовим джерелом, якщо ви хочете побачити, як компоненти збираються. APR (переносна апаратура apache) - справді хороша також ліб.

  • mod_wsgi - одна з найкращих програм на C, яку я натрапив.

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

"не менше 100 000 рядків коду" - з тих пір, коли кількість рядків стала показником хорошої якості - отримання смаку "добре розробленого / архітектурного програмного забезпечення" не вимагає, щоб воно було великим.

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

ОНОВЛЕННЯ: жовтень 2015

InfluxDB - https://influxdb.com/ Цей проект Go знаходиться в стадії активного розвитку, і все ще НЕ дуже складний. Таким чином, ви можете розпочати роботу з кодом порівняно легко, ніж щось на зразок OpenStack.


13

Киньте монету. Усі великі проекти з відкритим кодом повинні бути блискучими, щоб вижити. Проекти Apache, Linux, GNU - геніальні.


4
Всі великі спільноти перспективі проекти ОСС повинні бути принаймні гідною , щоб вижити. Не сказав би блискучим. Для речей, про які в основному говорять, урядових проектів, які виконують виключно співробітники, якість коду не завжди є найвищим показником у списку пріоритетів. Але +1 для ваших прикладів.
TZHX

8
Wordpress блискучий?
Дрю

9
  • Хром
  • Firefox
  • Апач
  • MySQL
  • PostgreSQL
  • Linux
  • GNU

2
Ви впевнені, що Firefox не заповнений застійними фрагментами коду, написаними на початку 90-х? Це, здається, не є гарним фрагментом коду для вивчення сучасних практик кодування
TheLQ

3
Вихідний код для Firefox та MySQL - жахливі лайно, які ніколи не повинні використовуватися як приклади гарного дизайну програмного забезпечення.
Йордан

7

Пітон. Зокрема, CPython, первинна реалізація. Для версії 3.2 інтерпретатор виконує близько 50 к слотів коду С, стандартна бібліотека - понад 400 к слотів коду Python. Зважаючи на надзвичайно високу якість мови та її заохочення до принципів читабельності та гарного дизайну, я думаю, що весь цей код був би досить хорошим.


4

TeX разом з MetaFont насправді варто вивчити: http://www.tug.org/

Ваша місцева бібліотека може допомогти вам з друкованими версіями джерел.


3

Я рекомендую прочитати наступну книгу, перш ніж вибирати проект з відкритим кодом. Це дасть вам зрозуміти, що можна вважати добрим / поганим кодом.

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

Ось також його інтерв'ю для обміну стеками блогу, якщо вам цікаво слухати автора, перш ніж заглянути в його
http://blog.stackoverflow.com/2011/06/se-podcast-09/

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

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

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


2

Я пропоную IntelliJ Community Edition, оскільки ви згадуєте, що вам подобаються програмні засоби.

http://www.jetbrains.org/

Що мені подобається в цьому:

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

(правда, я фанат JetBrains)


2

Я сам шукав такий проект і влаштувався CLang.

  • Це відносно нове (потомство LLVM, якому лише 10 років), тому ніякий (чи ні, що я бачив) несвіжий код
  • Модульна конструкція (як LLVM), надзвичайно добре продумана, що, на мою думку, є дуже важливим сьогодні
  • Дуже чистий код, добре коментований (ви часто бачите цитати зі Стандарту, щоб пояснити речі)
  • Дуже добре розроблений тестовий набір / тестова середовище

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

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




0

Отже, ще один варіант - Що з мовою програмування Nemerle ?

Це не так популярно (але GitHub просто додав підсвічування для Nemerle), і ви можете знайти багато хороших моментів там.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.