چگونه میتوان پیوسته نرم افزار خوب ساخت؟

7 01 2008

امروز داشتم (دوباره) فصل اول کتاب “Head First: Object Oriented Analysis And Design” رو میخوندم که با خودم گفتم بد نیست مطالبش رو خالصه کنم چون هم به خودم کمک میکنه اونها رو طبقه بندی کنم هم اینه پاسخ بسیاری از پرسشهای دوستان برنامه نویس هم هست. لحن رسمی مقاله برای اینه که بامداد گیر داده سایت باید کلاس خودشو حفظ کنه :-)

صورت مسئله چیست؟
همه دوست دارند نرم‌افزاری که میسازند «خوب» باشد، اما نرم‌افزار خوب چیست؟ و مهمترایکنه چگونه میتوان «پیوسته نرم افزار خوب ساخت؟». پاسخ پرشس نخست در یک سری ویژگیهایی است که یک نرم‌افزار خو ب باید داشته باشد و فرایندی که عمل کردن به آن ما را به ساخت چنین نرم‌افزاری میرساند، پاسخ پرشس دوم.

نرم‌افزار خوب چیست؟
نرم‌افزار خوب آن آن نرم‌افزاری است که مشتری را شاد کند و برای برنامه‌نویس هم قابل قبول باشد. مشتری آن گاه شاد است که نرم‌افزا، آن کاری را که او می‌خواهد بدرستی انجام دهد. برنامه نویس زمانی شاد است که نرم‌افزار به‌ خوبی طراحی شده باشد. همین جا یک نتیجه بسیار مهم بدست میاید و آن اینکه نرم‌افزاری که کارش را انجام ندهد ارزشی ندارد. نرم‌افزار زمانی ارزش پیدا میکند که نیاز مشتری برآورده شود. اگر نرم افزاری با پیروی از آخرین اصول طراحی و کد نویسی ساخته شود و ساختار آن به گونه‌ای باشد که هر برنامه نویسی را به آفرین گفتن وا دارد اما نیاز مشتری را بدرستی برآورده نکند، آن نرم‌افزار ارزش چندانی ندارد. این نکته‌ ایست که بسیاری از برنامه نویسان دانسته یا نادانسته آن را در زیر سایه پیچیدگیهای فنی پنهان میکنند. نخستین کاری که نرم‌افزار باید انجام دهد آن است که نیاز مشتری را بخوبی برآورده کند. نکات مثبت دیگر همه «درون سازمانی» هستند و هرچند هر کدام برای نرم‌افزار امتیازی بشمار میروند اما زمانی تبدیل به «ارزش» میشوند که به راضی کردن مشتری کمک کنند. نکته دیگر اینکه نرم‌افزار خوب به جز مشتری یک سر دیگ هم دارد و آن برنامه‌نویسی است که نرم‌افزار را میسازد. برنامه‌نویس هم باید از نرم‌افزاری که ساخته خرسند باشد و آن زمانی بدست میاد که نرم‌افزار به‌خوبی طراحی شده باشد. توجه کنید که طرف سخن ما برنامه‌نویسان حقیقی هستند و نه هر کسی که در بازار IT به مسموم کردن فضا مشغول است. تفاوت میان این دو مانند تفاوت میان «حاج منصور بنا» با «مهندس مرجان معمار» است. این ویژگی دوم به ما یاد آوری می‌کند که تنها برآورده کردن نیاز مشتری به هر ریخت و شکلی که شده برنامه‌نویسی نیست و نرم‌افزار باید بدرستی و بخوبی طراحی و ساخته شده باشد. چنین نرم‌افزاری انعطاف پذیر، قابل نگهداری، قابل استفاده مجدد و قابل گسترش خواهد بود. هیچ یک از این ویژگیها به گونه ای مستقیم و بی ‌واسطه برای مشتری(یا برنامه‌نویسان قلابی) قابل درک نیست اما همگی آنها در پایان در خدمت همان ویژگی نخست (راضی نگه داشتن مشتری) در‌میایند. نرم افزاری که (در ظاهر) کارش را انجام دهد اما طراحی خوبی نداشته باشد محکوم به شکست است.چنین نرم‌افزاری ممکن است در مراحل نخستین مشتری را خرسند کند اما به محض اینکه نیازهای مشتری تغییر کرد (که می‌کند) و مسئله گسترش و اصلاح نرم‌افزار پیش‌ آمد آنگاه طراحی بد عواقب خود را نشان میدهد. نرم‌افزاری که نمیتواند بسادگی گسترش‌ یابد، اعمال تغییرات در آن بسیار هزینه بر است، زمان انجام تغییرات در آن قابل قبول نیست، کاری را که تا به حا بدرستی انجام میداد دیگر انجام نمیدهد و… در پایان باعث ناخرسندی مشتری شده و نرم‌فزار را از ارزش میاندازد. در حقیقت نرم‌افزار هایی که این‌گونه ساخته میشوند (طراحی بد) از همان آغاز هم بی‌ارزش هستند و ارزش دروغین و کوتاه مدت آنها از این روست که به هر دردسری که شده نیاز اولیه مشتری را برآورده می‌کنند. اما همینکه مشتری نیازش را تغییر داد، بی‌ارزشی ذاتی آنها آشکار میشود. هرگز خود را با تحویل دادن نرم‌افزاری که بد طراحی شده اما «کارش را میکند» فریب ندهید. بسیاری از مدیران و شبه برنامه‌نویسان (دانسته یا نادانسته) با این استدلال که نرم‌افزار باید کارش را انجام دهد وچیز دیگری مهم نیست خود را فریب می‌دهند اما حقیقت این است که کار نرم‌افزار پایانی ندارد و نرم‌افزار خوب آنی است که در همه حال مشتری را خرسند کند و نه تنها در نخستین نسخه.

در مقاله‌ای دیگر ویژگیهای نرم‌افزار خوب (انعطاف پذیری، کارایی، سادگی نگهداری، توانایی گسرش و …) را تعریف خواهیم کرد و راههای رسیدن به آنها را نیز بررسی میکنیم.


کارها

اطلاعات

9 جواب

8 01 2008
Bamdad Dashtban

آیا همه نرم افزار ها احتیاج به گسترش دارند؟

8 01 2008
اشکان

تقریبا بله. اگر نرم‌ازاری که ساخته اید چیز خوبی باشد و ایده آن هم در بارار پاسخ بدهد (یعنی نیازی که مشتری دارد، نیاز درستی باشد) بدن تردید نرم‌افزارتان تغییر خواهد کرد و این تغییر در قالب گسترش قابلیت های آن خواهد بود. گسترش نشانه ای است از اینکه نرم‌افزار خوبی ساخته اید که در بازار برای مشتری هم پاسخگو است. اگر مشتری نرم‌افزار را تحویل گرفت و برای گسترش آن برنگشت به احتمال بسیار در کار او یا شما اشکالی هست.

17 04 2008
navvab

عالی بود.
مرسی.
بای…
نواب/

23 03 2009
masaeli

سلام ممکنه در مورد مهندسی وب مطالبی را برایم ایمیلکنید خیلی ممنونم…..

24 03 2009
لوگوس

بدبختانه نمیتونم براتون چیزی بفرستم. پوزش من رو بپذیرید اما پیشنهاد میکنم کتاب راجر پرسمن نسخه انگلیسی رو بخونید. در یکی از فصلهای پایانی مهندسی وب رو شرح داده

17 05 2009
nahid

salam.
aval az site kheili mofdeton kheili mamnon bad mikhastam azaton khahesh konamemkanesh hast ke dar morede vizhegihaye yek nar afzare khob va in ke be che sorat bayad bashe dar moredesh etelate bishtari ro baraye man mail konin rastesh in mozo baraye tahghighe in terme man darse mohandesi narme vali man dar moredesh hichi nemidonam age komakam konin azaton kheili mamnon misham.

20 05 2009
لوگوس

درورد
بدبختانه نمیتونم چیز زیادی براتون ایمیل کنم اما پیشنهاد میکنم چند فصل مربوط به این موضوع (کیفیت نرم افزار) رو در کتاب راجر پرسمن بخونید

30 08 2009
بهزاد

سلام
ببخشید مشکل من در برنامه نویسی تشخیص دادن خود برنامه و نحوه طراحی است و مثالی که دارم این است مثل شیشه شکسته نیاز به بند زدن دارم خواهمشند است است که مرا راهنمایی بفرمایید با اینکه رشته من نرم افزار می باشد و دبیر همین کار هستم باور کردن درس دادن یک روتین میباشد و چند مدتی از هرچه درس مو کتاب تکراری بیزارم
باتشکر

6 10 2009
لوگوس

درود بسیار
بهزاد جان درست متوجه مشکل شما نشدم، اگر یه کمی با جزییات بیشتر بگی شابد بتنم کمکی بکنم.

دیدگاه‌تان را بنویسید: