Facebook Pixel
Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Modern Software Engineering

Modern Software Engineering

Doing What Works to Build Better Software Faster
توسط David Farley 2021 256 صفحات
4.19
500+ امتیازها
گوش دادن

نکات کلیدی

1. مهندسی نرم‌افزار به کارگیری اصول علمی برای ایجاد راه‌حل‌های کارآمد و اقتصادی است

مهندسی نرم‌افزار به کارگیری یک رویکرد تجربی و علمی برای یافتن راه‌حل‌های کارآمد و اقتصادی برای مشکلات عملی در نرم‌افزار است.

رویکرد علمی به نرم‌افزار. مهندسی نرم‌افزار فراتر از کدنویسی است؛ این به کارگیری اصول علمی برای حل مشکلات عملی به‌طور کارآمد است. این رویکرد شامل فرمول‌بندی فرضیه‌ها، انجام آزمایش‌ها و اتخاذ تصمیمات مبتنی بر داده‌ها است. مهندسان باید تعادل بین برتری فنی و محدودیت‌های اقتصادی را حفظ کنند و همواره به دنبال کارآمدترین راه‌حل باشند.

حل مشکلات عملی. بر خلاف علوم کامپیوتر که بر جنبه‌های نظری تمرکز دارد، مهندسی نرم‌افزار بر کاربردهای دنیای واقعی استوار است. این نیازمند:

  • درک نیازهای کاربر و الزامات کسب‌وکار
  • طراحی سیستم‌های مقیاس‌پذیر و قابل نگهداری
  • پیاده‌سازی راه‌حل‌ها با عملکرد بهینه
  • ارزیابی و بهبود مداوم نرم‌افزار است

2. بهینه‌سازی برای یادگیری از طریق تکرار، بازخورد و تجربیات

بازخورد برای توانایی ما در یادگیری ضروری است. بدون بازخورد سریع و مؤثر، ما در حال حدس زدن هستیم.

توسعه تکراری. پذیرش یک رویکرد تکراری به تیم‌ها این امکان را می‌دهد که به سرعت یاد بگیرند و سازگار شوند. این شامل:

  • تقسیم کار به بخش‌های کوچک و قابل مدیریت
  • مرور و تنظیم منظم بر اساس اطلاعات جدید
  • بهبود مداوم محصول و فرآیند است

حلقه‌های بازخورد. ایجاد مکانیزم‌های بازخورد مؤثر برای یادگیری و بهبود بسیار مهم است. جنبه‌های کلیدی شامل:

  • تست خودکار برای شناسایی مشکلات در مراحل اولیه
  • ادغام و استقرار مداوم برای اعتبارسنجی سریع
  • بازخورد منظم از کاربران و تجزیه و تحلیل استفاده
  • مرورهای تیمی برای بهبود فرآیند

تصمیم‌گیری تجربی. اتخاذ تصمیمات بر اساس شواهد قابل مشاهده به جای فرضیات یا حدس و گمان، منجر به نتایج بهتری می‌شود. این شامل:

  • اندازه‌گیری معیارهای کلیدی برای هدایت تصمیمات
  • انجام آزمایش‌ها برای اعتبارسنجی فرضیه‌ها
  • استفاده از داده‌ها برای اطلاع‌رسانی در طراحی و انتخاب‌های معماری است

3. مدیریت پیچیدگی از طریق ماژولاریتی، همبستگی و جداسازی نگرانی‌ها

چیزهایی که به هم مرتبط نیستند را از هم دور کنید و چیزهایی که به هم مرتبط هستند را نزدیک‌تر کنید.

ماژولاریتی. تقسیم سیستم‌ها به اجزای کوچک و قابل مدیریت برای مدیریت پیچیدگی ضروری است. مزایای آن شامل:

  • درک و نگهداری آسان‌تر اجزای فردی
  • بهبود قابلیت تست و استفاده مجدد
  • انعطاف‌پذیری برای تکامل بخش‌های مختلف سیستم به‌طور مستقل

همبستگی و جداسازی نگرانی‌ها. گروه‌بندی عملکردهای مرتبط در کنار هم در حالی که عناصر غیرمرتبط را جدا نگه می‌دارد، طراحی سیستم را بهبود می‌بخشد. این اصل در سطوح مختلف اعمال می‌شود:

  • طراحی تابع و کلاس
  • معماری ماژول و سرویس
  • سازماندهی تیم و مسئولیت‌ها

پنهان‌سازی اطلاعات. محصور کردن جزئیات پیاده‌سازی پشت رابط‌های به‌خوبی تعریف‌شده، وابستگی را کاهش می‌دهد و تغییرات را آسان‌تر می‌کند. این شامل:

  • تعریف قراردادهای واضح بین اجزا
  • پنهان کردن پیچیدگی داخلی از مصرف‌کنندگان خارجی
  • امکان تکامل مستقل بخش‌های مختلف سیستم

4. پذیرش تغییر و بهبود مستمر در توسعه نرم‌افزار

به محض اینکه یک طراحی را ثابت کنید، آن طراحی منسوخ می‌شود.

سازگاری. توسعه نرم‌افزار یک فرآیند مداوم یادگیری و کشف است. تیم‌های موفق:

  • انتظار و برنامه‌ریزی برای تغییر را دارند به جای اینکه سعی کنند از آن اجتناب کنند
  • سیستم‌هایی طراحی می‌کنند که انعطاف‌پذیر و آسان برای تغییر باشند
  • به‌طور مداوم کد موجود را بازنگری و بهبود می‌بخشند

طراحی تدریجی. به جای تلاش برای ایجاد طراحی‌های کامل از ابتدا، بر روی تکامل تدریجی طراحی تمرکز کنید:

  • با یک راه‌حل حداقلی شروع کنید
  • به‌طور منظم طراحی را بر اساس اطلاعات جدید ارزیابی و تنظیم کنید
  • از تکنیک‌هایی مانند بازنگری برای بهبود کیفیت طراحی در طول زمان استفاده کنید

تحویل مداوم. پذیرش شیوه‌هایی که امکان انتشار مکرر و قابل اعتماد نرم‌افزار را فراهم می‌کند:

  • خودکارسازی فرآیندهای ساخت، تست و استقرار
  • پیاده‌سازی سوئیچ‌های ویژگی برای انتشار کنترل‌شده
  • جمع‌آوری و اقدام سریع بر اساس بازخورد کاربران

5. اولویت‌بندی قابلیت تست و خودکارسازی برای بهبود کیفیت و بهره‌وری

اگر نمی‌توانید یا نمی‌خواهید کد را تغییر دهید، در واقع کد مرده است.

طراحی برای قابلیت تست. ایجاد نرم‌افزاری که تست آن آسان باشد، به کیفیت بالاتر و سیستم‌های قابل نگهداری‌تر منجر می‌شود:

  • از تزریق وابستگی برای ایجاد اجزای کم‌پیوند استفاده کنید
  • رابط‌های واضحی بین ماژول‌ها طراحی کنید
  • واحدهای کوچک و متمرکز کدی ایجاد کنید که تست آن‌ها در انزوا آسان باشد

تست خودکار. پیاده‌سازی تست‌های خودکار جامع مزایای زیادی دارد:

  • شناسایی اشکالات در مراحل اولیه توسعه
  • امکان بازنگری و تغییرات با اطمینان
  • به‌عنوان مستندات زنده رفتار سیستم عمل می‌کند
  • بهبود کیفیت و قابلیت اطمینان کلی نرم‌افزار

ادغام مداوم. ادغام و تست منظم تغییرات کد کمک می‌کند:

  • شناسایی مشکلات ادغام در مراحل اولیه
  • اطمینان از اینکه سیستم همیشه در حالت کارکردی است
  • ارائه بازخورد سریع به توسعه‌دهندگان

6. جداسازی سیستم‌ها و تیم‌ها برای امکان‌پذیری مقیاس‌پذیری و انعطاف‌پذیری

اگر تیم شما و تیم من می‌توانند پیشرفت کنند بدون اینکه نیاز به هماهنگی فعالیت‌های خود داشته باشیم، گزارش‌های "وضعیت DevOps" می‌گویند که ما بیشتر احتمال دارد کد با کیفیت بالا را به‌طور منظم تأمین کنیم.

معماری میکروسرویس‌ها. پذیرش رویکرد میکروسرویس‌ها می‌تواند مقیاس‌پذیری و خودمختاری تیم را بهبود بخشد:

  • تقسیم سیستم‌ها به خدمات کوچک و قابل استقرار مستقل
  • اجازه دادن به تیم‌ها برای مالکیت و تکامل خدمات به‌طور مستقل
  • امکان استفاده از فناوری‌ها و رویکردهای مختلف برای خدمات مختلف

خودمختاری تیم. سازماندهی تیم‌ها بر اساس قابلیت‌های کسب‌وکار به جای لایه‌های فنی:

  • کاهش بار هماهنگی
  • بهبود سرعت تصمیم‌گیری
  • افزایش مالکیت و مسئولیت تیم

توسعه مبتنی بر API. تعریف رابط‌های واضح بین سیستم‌ها و تیم‌ها:

  • کاهش وابستگی بین بخش‌های مختلف سیستم
  • امکان تکامل مستقل خدمات
  • تسهیل ادغام و تست آسان‌تر

7. تعادل بین انتزاع و عمل‌گرایی در طراحی نرم‌افزار

همه مدل‌ها اشتباه هستند، برخی مدل‌ها مفیدند.

انتزاع مناسب. یافتن سطح مناسب انتزاع برای مدیریت پیچیدگی بسیار مهم است:

  • پیچیدگی تصادفی را انتزاع کنید در حالی که پیچیدگی اساسی را حفظ می‌کنید
  • انتزاعات خاص دامنه‌ای ایجاد کنید که با مفاهیم کسب‌وکار هم‌راستا باشد
  • از مهندسی بیش از حد و انتزاع زودهنگام اجتناب کنید

طراحی عمل‌گرا. تعادل بین ایده‌گرایی و عمل‌گرایی در طراحی نرم‌افزار:

  • بر حل مشکلات واقعی تمرکز کنید به جای سناریوهای فرضی
  • آماده باشید تا بر اساس محدودیت‌های فعلی، مصالحه کنید
  • به‌طور مداوم انتزاعات را ارزیابی و تکامل دهید به‌عنوان نیازها تغییر می‌کند

طراحی مبتنی بر دامنه. هم‌راستایی طراحی نرم‌افزار با دامنه کسب‌وکار:

  • ایجاد یک زبان مشترک که توسط توسعه‌دهندگان و کارشناسان دامنه به اشتراک گذاشته شود
  • مدل‌سازی اجزای نرم‌افزار بر اساس مفاهیم و فرآیندهای دنیای واقعی
  • استفاده از زمینه‌های محدود برای مدیریت پیچیدگی در سیستم‌های بزرگ

آخرین به‌روزرسانی::

نقد و بررسی

4.19 از 5
میانگین از 500+ امتیازات از Goodreads و Amazon.

کتاب مهندسی نرم‌افزار مدرن نظرات متفاوتی را به خود جلب کرده است. بسیاری از خوانندگان از مرور جامع اصول مهندسی نرم‌افزار در این کتاب تقدیر می‌کنند و بر اهمیت تجربی‌گرایی، مدیریت پیچیدگی و تحویل مداوم تأکید می‌نمایند. خوانندگان به تمرکز بر مفاهیم بنیادی به جای فناوری‌های خاص توجه دارند. با این حال، برخی از منتقدان به تکراری بودن کتاب، کمبود مثال‌های عینی و تبلیغ بیش از حد توسعه مبتنی بر تست انتقاد می‌کنند. در حالی که مهندسان با تجربه ممکن است اطلاعات جدیدی در این کتاب نیابند، مبتدیان و کسانی که به دنبال یادآوری اصول اساسی هستند، معمولاً از محتوای کتاب بهره‌مند می‌شوند، هرچند که سبک نوشتاری آن کمی طولانی و پرحجم است.

درباره نویسنده

دیوید فارلی یک مهندس نرم‌افزار، نویسنده و educator مشهور است. او به خاطر مشارکت‌هایش در شیوه‌های تحویل مداوم و کارش در اصول مهندسی نرم‌افزار شناخته شده است. فارلی چندین کتاب در زمینه توسعه نرم‌افزار تألیف کرده است، از جمله "تحویل مداوم" و "مهندسی نرم‌افزار مدرن". او تخصص خود را از طریق رسانه‌های مختلف، از جمله یک کانال یوتیوب محبوب که بر روی موضوعات تحویل مداوم و مهندسی نرم‌افزار تمرکز دارد، به اشتراک می‌گذارد. پیشینه فارلی به عنوان یک کارشناس عملی، تدریس و نوشتن او را تحت تأثیر قرار داده و بر رویکردهای تجربی، مدولاریت و توسعه مبتنی بر تست تأکید می‌کند. کارهای او تأثیر زیادی بر بسیاری از افراد در صنعت نرم‌افزار گذاشته و شیوه‌های توسعه‌ای کارآمدتر و مؤثرتر را ترویج می‌کند.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
Unlock Unlimited Listening
🎧 Listen while you drive, walk, run errands, or do other activities
2.8x more books Listening Reading
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Jan 25,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to summaries
12,000+ hours of audio
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
30,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Settings
Appearance
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →