‫چابک‬ ‫سبک‬ ‫به‬ ‫توسعه‬
‫لبخندها‬ ‫و‬ ‫اشکها‬
‫ایران‬ ‫چابک‬ ‫ملی‬ ‫همایش‬ ‫نخستین‬-1392
‫دلپاک‬ ‫اهلل‬‫روح‬
Software Developer/Architect
Certified Professional Scrum Master since 2011(trained by Faisal Mahmood)
Played scrum master role for more than 2 year
Taking lead on development teams, including scrum teams
Participated in scrum teams since 2011(for more than 40 sprints)
emailtord@gmail.com
‫الف‬ ‫این‬ ‫داد‬ ‫لقب‬ ‫دالش‬ ‫یکی‬ ‫آن‬ ‫مختلف‬ ‫شد‬ ‫گفتشان‬ ،‫نظرگه‬ ‫از‬
‫شدی‬ ‫بیرون‬ ‫گفتشان‬ ‫از‬ ‫اختالف‬ ‫بدی‬ ‫شمعی‬ ‫اگر‬ ‫هریک‬ ‫کف‬ ‫در‬
‫مولوی‬
‫اکوسیستم‬ ‫یک‬ ‫مانند‬ ‫به‬ ‫چابکی‬
‫چابک‬ ‫اکوسیستم‬ ‫های‬‫مولفه‬
4 Values ‫چابکی‬ ‫ارزشهای‬
12 Principals ‫بیانیه‬ ‫در‬ ‫مندرج‬ ‫اصول‬
XP, SCRUM, DSDM, FDD, Lean, Kanban, … ‫متدها‬
‫انطباق‬ ‫و‬ ‫فرآیند‬ ‫ممیزی‬ ‫روشهای‬‫به‬
(time boxing, poker, backlog, velocity tracking, release plan, board, meetings)
‫روشها‬‫به‬
‫تکنیکی‬ ‫روشهای‬‫به‬
(DDD, CI, TDD, Pair Programming, Refactoring, BDD, …)
‫فرهنگ‬/‫فلسفه‬
‫تجویزی‬‫بیان‬‫ارزشی‬ ‫بیان‬
‫سفر؛‬ ‫یک‬ ‫شروع‬
‫مقصد‬:‫اجایل‬ ‫سرزمین‬
‫ارزشها‬ ‫اول؛‬ ‫موومان‬
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
‫اصل‬ ‫دوازده‬ ‫دوم؛‬ ‫موومان‬
1. Customer satisfaction by rapid delivery of useful software
2. Welcome changing requirements, even late in development
3. Working software is delivered frequently (weeks rather than months)
4. Working software is the principal measure of progress
5. Sustainable development, able to maintain a constant pace
6. Close, daily cooperation between business people and developers
7. Face-to-face conversation is the best form of communication (co-location)
8. Projects are built around motivated individuals, who should be trusted
9. Continuous attention to technical excellence and good design
10. Simplicity—the art of maximizing the amount of work not done—is essential
11. Self-organizing teams
12. Regular adaptation to changing circumstances
‫متد‬ ‫انتخاب‬ ،‫سوم‬ ‫گام‬
SCRUM!
‫پایان‬
‫اسپرینت‬
‫اول‬
‫پایان‬
‫اسپرینت‬
‫دوم‬!
‫اسپرینت‬
‫سوم؟‬
‫اسپرینت‬
‫چهارم؟‬
‫اسپرینت‬
‫پنجم؟‬
‫پایان‬
‫پروژه؟‬!
Walking on water and
developing software
from a specification are
easy if both are frozen.
Edward V. Berard
‫رفت؟‬ ‫تغییر‬ ‫استقبال‬ ‫به‬ ‫باز‬ ‫آغوش‬ ‫با‬ ‫شود‬‫می‬
Welcome changing requirements,
even late in development
‫است؟‬ ‫شده‬ ‫انجام‬ ‫بسیاری‬ ‫کارهای‬ ‫وقتی‬ ‫حتی‬!
Customer satisfaction by
rapid delivery of useful software
‫اوایل‬
‫پروژه‬
•‫نوشته‬ ‫کمی‬ ‫کد‬
‫است‬ ‫شده‬.
•‫باال‬ ‫تولید‬ ‫سرعت‬
‫است‬.
•‫افزار‬ ‫نرم‬ ‫اجزای‬
‫کار‬ ‫درستی‬ ‫به‬
‫کنند‬‫می‬.
•‫آسان‬ ‫کد‬ ‫تغییر‬
‫است‬.
•‫موفقیت‬ ‫عالی‬ ‫حس‬.
•‫لبخندها‬
‫تدریج‬ ‫به‬
•‫زیاد‬ ‫کد‬ ‫حجم‬
‫شود‬‫می‬.
•‫و‬ ‫کد‬ ‫نگهداری‬
‫دشوار‬ ‫تغییر‬
‫شود‬‫می‬.
•‫افزودن‬ ‫سرعت‬
‫نو‬ ‫قابلیتهای‬
‫شود‬‫می‬ ‫کم‬.
•‫آستانه‬ ‫در‬ ‫تیم‬
‫است‬ ‫بیماری‬.
•‫اشکها‬
‫بیداد‬ ‫داد‬ ‫ای‬!‫اسکرام‬ ‫میکردیم‬ ‫فکر‬ ‫ما‬
‫کنه‬ ‫قدرتمند‬ ‫رو‬ ‫تیم‬ ‫قراره‬!‫فکر‬ ‫ما‬
‫که‬ ‫کاری‬ ‫همه‬ ‫میتونه‬ ‫تیم‬ ‫کردیم‬‫می‬
‫رو‬ ‫الزمه‬ ‫خوب‬ ‫محصول‬ ‫یه‬ ‫تولید‬ ‫برای‬
‫بده‬ ‫انجام‬!‫کردیم‬‫نمی‬ ‫هم‬ ‫فکرش‬ ‫اصال‬
‫بیاره‬ ‫بار‬ ‫افتضاح‬ ‫یه‬ ‫بتونه‬ ‫اسکرام‬ ‫تیم‬!
‫باشد؟‬ ‫تواند‬‫می‬ ‫چه‬ ‫مشکل‬
‫اما‬ ‫عالیست‬ ‫و‬ ‫واال‬ ‫هدفی‬ ‫تیم‬ ‫قدرتمندی‬ ‫چند‬ ‫هر‬:
•‫تیم‬ ‫اعضای‬«‫انسان‬»‫هستند‬.
•«‫انسان‬»‫دهند‬‫می‬ ‫انجام‬ ‫را‬ ‫دارند‬ ‫انگیزه‬ ‫آن‬ ‫به‬ ‫که‬ ‫کاری‬ ‫ها‬.
‫سوال‬!
‫به‬‫بیشتر؟‬ ‫تولید‬ ‫برای‬ ‫یا‬ ‫دهیم‬‫می‬ ‫پاداش‬ ‫کارش‬ ‫کیفیت‬ ‫برای‬ ‫تیم‬
‫نو؟‬ ‫قابلیتهای‬ ‫به‬ ‫یا‬ ‫دهیم‬‫می‬ ‫اهمیت‬ ‫بیشتر‬ ‫کد‬ ‫کیفیت‬ ‫به‬
‫؟‬
‫ماست‬ ‫بر‬ ‫که‬ ‫ماست‬ ‫از‬!
•‫هم‬ ‫اسکرام‬ ‫تیمهای‬ ‫اینکه‬ ‫دلیل‬
،‫بیاورند‬ ‫بار‬ ‫افتضاح‬ ‫توانند‬‫می‬
‫ساختن‬ ‫برای‬ ‫آنها‬ ‫باالی‬ ‫انگیزه‬
‫است‬ ‫چیزی‬ ‫سریع‬.
•،‫بیشتر‬ ‫تولید‬ ‫و‬ ‫سریع‬ ‫ساخت‬ ‫انگیزه‬
‫یعنی‬‫سریع‬ ‫فوق‬ ‫تولید‬ ‫قدرت‬‫فاجعه‬!
•‫را‬ ‫پروژه‬ ‫سریعا‬ ‫تواند‬ ‫می‬ ‫فاجعه‬
‫کند‬ ‫گیر‬‫زمین‬.
•‫شود‬ ‫ضعیف‬ ‫تیم‬ ‫روحیه‬.
•‫مشتریان‬ ‫و‬ ‫ذینفعان‬ ‫و‬ ‫مدیران‬
‫کنیم‬ ‫تشویق‬ ‫را‬ ‫تیم‬ ‫یک‬ ‫چگونه‬
‫فاجعه‬ ،‫افزار‬ ‫نرم‬ ‫جای‬ ‫به‬ ‫تا‬
‫نسازد؟‬
•‫معینی‬ ‫مقیاس‬ ‫و‬ ‫معیار‬ ‫داشتن‬ ‫بدون‬
‫کرد؟‬ ‫ارزیابی‬ ‫را‬ ‫محصول‬ ‫کیفیت‬ ‫شود‬‫می‬
•‫قابل‬ ‫و‬ ‫عینی‬ ‫را‬ ‫کیفیت‬ ‫شود‬ ‫می‬ ‫چگونه‬
‫کرد؟‬ ‫لمس‬
‫که‬ ‫بدانیم‬ ‫یقین‬ ‫ع‬:
،‫فاجعه‬ ‫شناخت‬ ‫برای‬ ‫راهی‬ ‫داشتن‬ ‫بدون‬
‫آمد‬ ‫خواهد‬ ‫بار‬ ‫فاجعه‬.
‫مطلوب‬ ‫وضعیت‬:‫دو‬ ‫هر‬ ‫سنجش‬!
‫سرعت‬‫کیفیت‬
‫کد؟‬ ‫کیفیت‬ ‫بهبود‬!‫چگونه؟‬
• Domain Driven Design
• Test Driven Development (TDD)
• Continuous Integration
• Pair Programming
• Collective Ownership
• Refactoring
• SOLID
• KISS
• YAGNI
• GoF Design Patterns
Domain Driven Design
Domain-Driven Design: Tackling Complexity in the Heart of Software
The domain is not trivial
The project team has experience and interest in Object Oriented Programming/Design
The project has access to domain experts
There is an iterative process in place
Prerequisites for the successful application of DDD
Initiating a creative collaboration between
technical and domain experts
to iteratively refine a conceptual model that
addresses particular domain problems.
TDD
•‫پیش‬ ‫ها‬ ‫تست‬ ‫نتایج‬ ‫به‬ ‫اطمینان‬ ‫امکان‬
‫محصول‬ ‫انتشار‬ ‫از‬
•‫کد‬ ‫دلهره‬ ‫بدون‬ ‫تغییر‬ ‫توان‬.
•‫خصوص‬ ‫به‬ ‫کد‬ ‫عملکرد‬ ‫بهتر‬ ‫درک‬ ‫به‬ ‫کمک‬
‫مستندات‬ ‫فاقد‬ ‫کدهای‬ ‫در‬
‫محضر‬ ‫در‬TDD
•‫تست‬ ‫پوشش‬ ‫ضریب‬ ‫گیری‬ ‫اندازه‬
•‫ها‬ ‫تست‬ ‫کل‬ ‫تعداد‬
•‫اسپرینت‬ ‫هر‬ ‫در‬ ‫جدید‬ ‫تستهای‬ ‫تعداد‬
•‫هر‬ ‫از‬ ‫پس‬ ‫شده‬ ‫گزارش‬ ‫نواقص‬ ‫تعداد‬
‫ها‬ ‫تست‬ ‫پوشش‬ ‫کفایت‬ ‫تخمین‬ ‫و‬ ‫اسپرینت‬
•‫های‬ ‫تست‬ ‫به‬ ‫دستی‬ ‫تستهای‬ ‫تبدیل‬ ‫نرخ‬
‫خودکار‬
•‫تست‬ ‫کدهای‬ ‫سایز‬ ‫گیری‬‫اندازه‬
•‫کدها‬ ‫اجرای‬ ‫سرعت‬ ‫گیری‬‫اندازه‬
•‫تست‬ ‫کد‬ ‫طراحی‬ ‫شیوه‬ ‫ارزیابی‬
1000 unit tests
‫گیری‬ ‫اندازه‬ ‫روشهای‬ ‫دیگر‬
‫کد‬ ‫کیفیت‬
•‫گیری‬ ‫اندازه‬ ‫ابزارهای‬ ‫از‬ ‫استفاده‬
‫کد‬ ‫پیچیدگی‬ ‫ضریب‬Cyclomatic Complexity
•‫خط‬ ‫گیری‬ ‫اندازه‬-‫و‬ ‫کالسها‬ ‫کدهای‬
‫توابع‬
•‫وابستگی‬ ‫ضریب‬ ‫گیری‬ ‫اندازه‬
‫کالسها‬ ،‫ماژولها‬(DI)
Continuous Integration
•‫اندازی‬ ‫راه‬Build Server
•‫از‬ ‫اطمینان‬Build‫پس‬ ‫صحیح‬
‫مورد‬ ‫هر‬ ‫از‬Commit
•‫تعداد‬Commit‫روز‬ ‫در‬ ‫ها‬
‫شود‬ ‫رصد‬.
•‫که‬ ‫روزهایی‬ ‫تعداد‬Build
‫کنید‬ ‫رصد‬ ‫را‬ ‫خورد‬ ‫می‬ ‫شکست‬.
•‫که‬ ‫ماههایی‬ ‫در‬Build‫بدون‬
‫پاداش‬ ،‫اید‬ ‫داشته‬ ‫شکست‬
‫بدهید‬.
Pair Programming
‫نویسی‬ ‫برنامه‬ ‫صرف‬ ‫که‬ ‫زمانی‬ ‫نسبت‬
‫زمان‬ ‫نسبت‬ ‫به‬ ‫شود‬ ‫می‬ ‫انفرادی‬
‫گیری‬‫اندازه‬ ‫را‬ ‫جفتی‬ ‫نویسی‬ ‫برنامه‬
‫کنید‬ ‫رصد‬ ‫و‬.
‫تمیزتری‬ ‫کد‬ ،‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
‫آید‬‫می‬ ‫دست‬ ‫به‬.
‫و‬ ‫مشارکت‬ ،‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
‫شود‬‫می‬ ‫تقویت‬ ‫تعامل‬.
‫انتقال‬ ،‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬
‫شود‬‫می‬ ‫تسهیل‬ ‫دانش‬.
Economics
Design Quality
Satisfaction
Learning
Team Building and communication
YAGNI
"You aren't gonna need it"(acronym: YAGNI is a
principle of extreme programming (XP) that
states a programmer should not add
functionality until deemed necessary. Ron
Jeffries writes, "Always implement things when
you actually need them, never when you just
foresee that you need them."
KISS
"Keep it simple, stupid“
10. Simplicity—the art of maximizing the
amount of work not done—is essential
Easy to understand
but difficult to do.
‫همایش‬ ‫در‬Agile2008،‫تورنتو‬
Robert Martin “Uncle “Bob‫طرح‬ ‫با‬
‫دیگر‬ ‫ارزش‬ ‫یک‬ ‫افزودن‬ ‫ایده‬
‫اهمیت‬ ،‫چابک‬ ‫بیاینه‬ ‫به‬
‫مقوله‬«‫مهارت‬»‫در‬ ‫خصوص‬ ‫به‬
‫قرار‬ ‫توجه‬ ‫مورد‬ ‫را‬ ‫کدنویسی‬
‫داد‬.
Professionalism in Programming
5. Craftsmanship over Execution
Continuous attention to
technical excellence and good
design enhances agility.
‫منابع‬
http://www.infoq.com/news/2008/08/manifesto-fifth-craftsmanship
http://en.wikipedia.org/wiki/Software_craftsmanship
http://www.scrumalliance.org/community/articles/2010/december/the-land-that-
scrum-forgot
http://en.wikipedia.org/wiki/Agile_software_development
http://manifesto.softwarecraftsmanship.org/

Agile Development | By Ruhollah Delpak

  • 1.
    ‫چابک‬ ‫سبک‬ ‫به‬‫توسعه‬ ‫لبخندها‬ ‫و‬ ‫اشکها‬ ‫ایران‬ ‫چابک‬ ‫ملی‬ ‫همایش‬ ‫نخستین‬-1392
  • 2.
    ‫دلپاک‬ ‫اهلل‬‫روح‬ Software Developer/Architect CertifiedProfessional Scrum Master since 2011(trained by Faisal Mahmood) Played scrum master role for more than 2 year Taking lead on development teams, including scrum teams Participated in scrum teams since 2011(for more than 40 sprints) emailtord@gmail.com
  • 3.
    ‫الف‬ ‫این‬ ‫داد‬‫لقب‬ ‫دالش‬ ‫یکی‬ ‫آن‬ ‫مختلف‬ ‫شد‬ ‫گفتشان‬ ،‫نظرگه‬ ‫از‬ ‫شدی‬ ‫بیرون‬ ‫گفتشان‬ ‫از‬ ‫اختالف‬ ‫بدی‬ ‫شمعی‬ ‫اگر‬ ‫هریک‬ ‫کف‬ ‫در‬ ‫مولوی‬
  • 4.
  • 5.
    ‫چابک‬ ‫اکوسیستم‬ ‫های‬‫مولفه‬ 4Values ‫چابکی‬ ‫ارزشهای‬ 12 Principals ‫بیانیه‬ ‫در‬ ‫مندرج‬ ‫اصول‬ XP, SCRUM, DSDM, FDD, Lean, Kanban, … ‫متدها‬ ‫انطباق‬ ‫و‬ ‫فرآیند‬ ‫ممیزی‬ ‫روشهای‬‫به‬ (time boxing, poker, backlog, velocity tracking, release plan, board, meetings) ‫روشها‬‫به‬ ‫تکنیکی‬ ‫روشهای‬‫به‬ (DDD, CI, TDD, Pair Programming, Refactoring, BDD, …) ‫فرهنگ‬/‫فلسفه‬ ‫تجویزی‬‫بیان‬‫ارزشی‬ ‫بیان‬
  • 6.
  • 8.
    ‫ارزشها‬ ‫اول؛‬ ‫موومان‬ Individualsand interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan
  • 9.
    ‫اصل‬ ‫دوازده‬ ‫دوم؛‬‫موومان‬ 1. Customer satisfaction by rapid delivery of useful software 2. Welcome changing requirements, even late in development 3. Working software is delivered frequently (weeks rather than months) 4. Working software is the principal measure of progress 5. Sustainable development, able to maintain a constant pace 6. Close, daily cooperation between business people and developers 7. Face-to-face conversation is the best form of communication (co-location) 8. Projects are built around motivated individuals, who should be trusted 9. Continuous attention to technical excellence and good design 10. Simplicity—the art of maximizing the amount of work not done—is essential 11. Self-organizing teams 12. Regular adaptation to changing circumstances
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
    Walking on waterand developing software from a specification are easy if both are frozen. Edward V. Berard
  • 17.
    ‫رفت؟‬ ‫تغییر‬ ‫استقبال‬‫به‬ ‫باز‬ ‫آغوش‬ ‫با‬ ‫شود‬‫می‬ Welcome changing requirements, even late in development ‫است؟‬ ‫شده‬ ‫انجام‬ ‫بسیاری‬ ‫کارهای‬ ‫وقتی‬ ‫حتی‬! Customer satisfaction by rapid delivery of useful software
  • 18.
    ‫اوایل‬ ‫پروژه‬ •‫نوشته‬ ‫کمی‬ ‫کد‬ ‫است‬‫شده‬. •‫باال‬ ‫تولید‬ ‫سرعت‬ ‫است‬. •‫افزار‬ ‫نرم‬ ‫اجزای‬ ‫کار‬ ‫درستی‬ ‫به‬ ‫کنند‬‫می‬. •‫آسان‬ ‫کد‬ ‫تغییر‬ ‫است‬. •‫موفقیت‬ ‫عالی‬ ‫حس‬. •‫لبخندها‬ ‫تدریج‬ ‫به‬ •‫زیاد‬ ‫کد‬ ‫حجم‬ ‫شود‬‫می‬. •‫و‬ ‫کد‬ ‫نگهداری‬ ‫دشوار‬ ‫تغییر‬ ‫شود‬‫می‬. •‫افزودن‬ ‫سرعت‬ ‫نو‬ ‫قابلیتهای‬ ‫شود‬‫می‬ ‫کم‬. •‫آستانه‬ ‫در‬ ‫تیم‬ ‫است‬ ‫بیماری‬. •‫اشکها‬
  • 19.
    ‫بیداد‬ ‫داد‬ ‫ای‬!‫اسکرام‬‫میکردیم‬ ‫فکر‬ ‫ما‬ ‫کنه‬ ‫قدرتمند‬ ‫رو‬ ‫تیم‬ ‫قراره‬!‫فکر‬ ‫ما‬ ‫که‬ ‫کاری‬ ‫همه‬ ‫میتونه‬ ‫تیم‬ ‫کردیم‬‫می‬ ‫رو‬ ‫الزمه‬ ‫خوب‬ ‫محصول‬ ‫یه‬ ‫تولید‬ ‫برای‬ ‫بده‬ ‫انجام‬!‫کردیم‬‫نمی‬ ‫هم‬ ‫فکرش‬ ‫اصال‬ ‫بیاره‬ ‫بار‬ ‫افتضاح‬ ‫یه‬ ‫بتونه‬ ‫اسکرام‬ ‫تیم‬!
  • 20.
    ‫باشد؟‬ ‫تواند‬‫می‬ ‫چه‬‫مشکل‬ ‫اما‬ ‫عالیست‬ ‫و‬ ‫واال‬ ‫هدفی‬ ‫تیم‬ ‫قدرتمندی‬ ‫چند‬ ‫هر‬: •‫تیم‬ ‫اعضای‬«‫انسان‬»‫هستند‬. •«‫انسان‬»‫دهند‬‫می‬ ‫انجام‬ ‫را‬ ‫دارند‬ ‫انگیزه‬ ‫آن‬ ‫به‬ ‫که‬ ‫کاری‬ ‫ها‬. ‫سوال‬! ‫به‬‫بیشتر؟‬ ‫تولید‬ ‫برای‬ ‫یا‬ ‫دهیم‬‫می‬ ‫پاداش‬ ‫کارش‬ ‫کیفیت‬ ‫برای‬ ‫تیم‬ ‫نو؟‬ ‫قابلیتهای‬ ‫به‬ ‫یا‬ ‫دهیم‬‫می‬ ‫اهمیت‬ ‫بیشتر‬ ‫کد‬ ‫کیفیت‬ ‫به‬ ‫؟‬
  • 21.
    ‫ماست‬ ‫بر‬ ‫که‬‫ماست‬ ‫از‬! •‫هم‬ ‫اسکرام‬ ‫تیمهای‬ ‫اینکه‬ ‫دلیل‬ ،‫بیاورند‬ ‫بار‬ ‫افتضاح‬ ‫توانند‬‫می‬ ‫ساختن‬ ‫برای‬ ‫آنها‬ ‫باالی‬ ‫انگیزه‬ ‫است‬ ‫چیزی‬ ‫سریع‬. •،‫بیشتر‬ ‫تولید‬ ‫و‬ ‫سریع‬ ‫ساخت‬ ‫انگیزه‬ ‫یعنی‬‫سریع‬ ‫فوق‬ ‫تولید‬ ‫قدرت‬‫فاجعه‬! •‫را‬ ‫پروژه‬ ‫سریعا‬ ‫تواند‬ ‫می‬ ‫فاجعه‬ ‫کند‬ ‫گیر‬‫زمین‬. •‫شود‬ ‫ضعیف‬ ‫تیم‬ ‫روحیه‬. •‫مشتریان‬ ‫و‬ ‫ذینفعان‬ ‫و‬ ‫مدیران‬
  • 22.
    ‫کنیم‬ ‫تشویق‬ ‫را‬‫تیم‬ ‫یک‬ ‫چگونه‬ ‫فاجعه‬ ،‫افزار‬ ‫نرم‬ ‫جای‬ ‫به‬ ‫تا‬ ‫نسازد؟‬ •‫معینی‬ ‫مقیاس‬ ‫و‬ ‫معیار‬ ‫داشتن‬ ‫بدون‬ ‫کرد؟‬ ‫ارزیابی‬ ‫را‬ ‫محصول‬ ‫کیفیت‬ ‫شود‬‫می‬ •‫قابل‬ ‫و‬ ‫عینی‬ ‫را‬ ‫کیفیت‬ ‫شود‬ ‫می‬ ‫چگونه‬ ‫کرد؟‬ ‫لمس‬ ‫که‬ ‫بدانیم‬ ‫یقین‬ ‫ع‬: ،‫فاجعه‬ ‫شناخت‬ ‫برای‬ ‫راهی‬ ‫داشتن‬ ‫بدون‬ ‫آمد‬ ‫خواهد‬ ‫بار‬ ‫فاجعه‬.
  • 23.
    ‫مطلوب‬ ‫وضعیت‬:‫دو‬ ‫هر‬‫سنجش‬! ‫سرعت‬‫کیفیت‬
  • 24.
    ‫کد؟‬ ‫کیفیت‬ ‫بهبود‬!‫چگونه؟‬ •Domain Driven Design • Test Driven Development (TDD) • Continuous Integration • Pair Programming • Collective Ownership • Refactoring • SOLID • KISS • YAGNI • GoF Design Patterns
  • 25.
    Domain Driven Design Domain-DrivenDesign: Tackling Complexity in the Heart of Software The domain is not trivial The project team has experience and interest in Object Oriented Programming/Design The project has access to domain experts There is an iterative process in place Prerequisites for the successful application of DDD Initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems.
  • 26.
    TDD •‫پیش‬ ‫ها‬ ‫تست‬‫نتایج‬ ‫به‬ ‫اطمینان‬ ‫امکان‬ ‫محصول‬ ‫انتشار‬ ‫از‬ •‫کد‬ ‫دلهره‬ ‫بدون‬ ‫تغییر‬ ‫توان‬. •‫خصوص‬ ‫به‬ ‫کد‬ ‫عملکرد‬ ‫بهتر‬ ‫درک‬ ‫به‬ ‫کمک‬ ‫مستندات‬ ‫فاقد‬ ‫کدهای‬ ‫در‬
  • 27.
    ‫محضر‬ ‫در‬TDD •‫تست‬ ‫پوشش‬‫ضریب‬ ‫گیری‬ ‫اندازه‬ •‫ها‬ ‫تست‬ ‫کل‬ ‫تعداد‬ •‫اسپرینت‬ ‫هر‬ ‫در‬ ‫جدید‬ ‫تستهای‬ ‫تعداد‬ •‫هر‬ ‫از‬ ‫پس‬ ‫شده‬ ‫گزارش‬ ‫نواقص‬ ‫تعداد‬ ‫ها‬ ‫تست‬ ‫پوشش‬ ‫کفایت‬ ‫تخمین‬ ‫و‬ ‫اسپرینت‬ •‫های‬ ‫تست‬ ‫به‬ ‫دستی‬ ‫تستهای‬ ‫تبدیل‬ ‫نرخ‬ ‫خودکار‬ •‫تست‬ ‫کدهای‬ ‫سایز‬ ‫گیری‬‫اندازه‬ •‫کدها‬ ‫اجرای‬ ‫سرعت‬ ‫گیری‬‫اندازه‬ •‫تست‬ ‫کد‬ ‫طراحی‬ ‫شیوه‬ ‫ارزیابی‬
  • 28.
  • 29.
    ‫گیری‬ ‫اندازه‬ ‫روشهای‬‫دیگر‬ ‫کد‬ ‫کیفیت‬ •‫گیری‬ ‫اندازه‬ ‫ابزارهای‬ ‫از‬ ‫استفاده‬ ‫کد‬ ‫پیچیدگی‬ ‫ضریب‬Cyclomatic Complexity •‫خط‬ ‫گیری‬ ‫اندازه‬-‫و‬ ‫کالسها‬ ‫کدهای‬ ‫توابع‬ •‫وابستگی‬ ‫ضریب‬ ‫گیری‬ ‫اندازه‬ ‫کالسها‬ ،‫ماژولها‬(DI)
  • 30.
    Continuous Integration •‫اندازی‬ ‫راه‬BuildServer •‫از‬ ‫اطمینان‬Build‫پس‬ ‫صحیح‬ ‫مورد‬ ‫هر‬ ‫از‬Commit •‫تعداد‬Commit‫روز‬ ‫در‬ ‫ها‬ ‫شود‬ ‫رصد‬. •‫که‬ ‫روزهایی‬ ‫تعداد‬Build ‫کنید‬ ‫رصد‬ ‫را‬ ‫خورد‬ ‫می‬ ‫شکست‬. •‫که‬ ‫ماههایی‬ ‫در‬Build‫بدون‬ ‫پاداش‬ ،‫اید‬ ‫داشته‬ ‫شکست‬ ‫بدهید‬.
  • 31.
    Pair Programming ‫نویسی‬ ‫برنامه‬‫صرف‬ ‫که‬ ‫زمانی‬ ‫نسبت‬ ‫زمان‬ ‫نسبت‬ ‫به‬ ‫شود‬ ‫می‬ ‫انفرادی‬ ‫گیری‬‫اندازه‬ ‫را‬ ‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫کنید‬ ‫رصد‬ ‫و‬. ‫تمیزتری‬ ‫کد‬ ،‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫آید‬‫می‬ ‫دست‬ ‫به‬. ‫و‬ ‫مشارکت‬ ،‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫شود‬‫می‬ ‫تقویت‬ ‫تعامل‬. ‫انتقال‬ ،‫جفتی‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫شود‬‫می‬ ‫تسهیل‬ ‫دانش‬. Economics Design Quality Satisfaction Learning Team Building and communication
  • 32.
    YAGNI "You aren't gonnaneed it"(acronym: YAGNI is a principle of extreme programming (XP) that states a programmer should not add functionality until deemed necessary. Ron Jeffries writes, "Always implement things when you actually need them, never when you just foresee that you need them."
  • 33.
    KISS "Keep it simple,stupid“ 10. Simplicity—the art of maximizing the amount of work not done—is essential
  • 35.
    Easy to understand butdifficult to do.
  • 36.
    ‫همایش‬ ‫در‬Agile2008،‫تورنتو‬ Robert Martin“Uncle “Bob‫طرح‬ ‫با‬ ‫دیگر‬ ‫ارزش‬ ‫یک‬ ‫افزودن‬ ‫ایده‬ ‫اهمیت‬ ،‫چابک‬ ‫بیاینه‬ ‫به‬ ‫مقوله‬«‫مهارت‬»‫در‬ ‫خصوص‬ ‫به‬ ‫قرار‬ ‫توجه‬ ‫مورد‬ ‫را‬ ‫کدنویسی‬ ‫داد‬. Professionalism in Programming 5. Craftsmanship over Execution
  • 37.
    Continuous attention to technicalexcellence and good design enhances agility.
  • 38.