کیفیت در نرم افزار واقعاً به چه معناست!؟

درجه تطابق یک سیستم با نیازمندی های مشخص شده و نیازهای مشتری (یا کاربران) یا انتظارت آن ها، یکی از تعاریف رسمی کیفیت در نرم افزار است (1). از این تعریف می توان دریافت که شناخت درست نیازمندی های یک سیستم نرم افزاری از مهمترین فاکتورهای تعیین کیفیت در یک محصول نرم افزاری است. در واقع نرم افزاری که به صورت دقیق بر اساس نیازهای مشتری (یا کاربران) ساخته شده باشد، می تواند با کیفیت باشد. جلوتر متوجه خواهید شد که چرا از کلمه می تواند استفاده کردم.

پرسمن «کیفیت نرم افزار» را در مهندسی نرم افزار به صورت زیر تعریف کرده است :

In the context of software engineering, software quality measures how well software is designed (quality of design), and how well the software conforms to that design (quality of conformance)

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

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

نیازمندی ها

نمی توان از یک نرم افزار انتظار خروجی با کیفیت داشت زمانی که توسعه دهندگان آن، نیازمندی های پروژه را به خوبی درک نکرده باشند. شناخت نیازمندی های یک نرم افزار، کلیدی ترین بخش تضمین کیفیت نرم افزار است. با شناخت درست نیازمندی ها می توان به یک خروجی با کیفیت دست پیدا کرد. برای مطالعه بیشتر مطلب «مستندات نیازمندی ها و نقش آن در موفقیت یک پروژه نرم افزاری» را بخوانید.

طراحی

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

پیاده سازی

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

تست

تست نرم افزار پس از پیاده سازی، اگر به درستی انجام شود، کیفیت خروجی نرم افزار را به طرز شگرفی افزایش می دهد. در تست مشخص می شود که چه مشکلاتی در پیاده سازی وجود دارند که باید حل شوند. کیفیت نرم افزار با تعداد انجام تست های درست رابطه مستقیم دارد. هر چقدر بیشتر نرم افزار را تست کنیم، در انتها نرم افزارمان کیفیت بهتری خواهد داشت. با انجام تست های مکرر می توانید خروجی نهایی با کیفیت تری ارائه کنید و در نتیجه مشتریان راضی تری داشته باشید. در حال حاضر روش های بسیاری برای تست نرم افزار وجود دارند که همگی سعی می کنند تا کیفیت نرم افزار را بالا ببرند. چندی از متدولوژی های Agile در سیکل توسعه خود به صورت جدی از روش های تست نرم افزار استفاده می کنند تا از کیفیت محصولات نرم افزاری تولید شده اطمینان پیدا کنند. برای مثال TDD یا Test-Driven Development روشی است که برنامه نویسان را مجبور می کند تا قبل از کدنویسی، تست های مربوط به آن را بنویسند!

توزیع و استقرار

پس از پیاده سازی نرم افزار، باید بتوان به خوبی خروجی آن را بین مشتریان (یا کاربران) توزیع کرد. توزیع در اینجا به معنی Deployment است که میزان رضایت کاربران از نحوه نصب و استقرار سیستم نرم افزاری مورد نظر است. خیلی ها توزیع و استقرار را در تعیین کیفیت نرم افزار بی اهمیت می دانند اما در واقع اینطور نیست و نرم افزاری از دید مشتری با کیفیت است که به خوبی نصب و مستقر شود.

آموزش و پشتیبانی

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

farasun.wordpress.com

یادتان باشد که کیفیت نرم افزار یعنی کیفیت در تمام بخش های بالا! ناقص بودن کیفیت هر یک از موارد بالا می تواند کیفیت کل نرم افزار را تحت تاثیر قرار دهد. کیفیت نرم افزار شما، مشتری را خوشحال می کند و مشتری خوشحال یعنی سود بیشتر! پس کیفیت را جدی بگیرید!

(1) : IEEE 610.12-1990 Standard Glossary of Software Engineering Terminology

در مطالب بعدی به مباحث بیشتری در مورد کیفیت نرم افزار خواهیم پرداخت، برای پیگیری آن ها می توانید مشترک فید فراسان شوید.

Advertisements

استفاده از Castle ActiveRecord در پروژه های تحت وب

در سری آموزشی Castle ActiveRecord با یک پروژه مثال تحت ویندوز پیش رفتیم و همانطور که مشاهده کردید نکته خاصی در مورد نوع پروژه که تحت ویندوز بود وجود نداشت. اما استفاده از یک ORM در پروژه های تحت وب به علت ماهیت خاص وب، استراتژی خاصی را نیز می طلبد. در یک پروژه تحت وب، ممکن است کاربران زیادی وجود داشته باشند که هر کدام درخواست هایی را برای برنامه ما می فرستند که اکثر این درخواست ها مربوط به دسترسی به داده ها باشند.

ساده ترین روش برای استفاده از Castle ActiveRecord در یک برنامه تحت وب اضافه کردن خاصیت isWeb=»true» در بخش کانفیگ CAR در فایل web.config است. این کار باعث می شود تا CAR مجبور به استفاده از استراتژی متفاوتی برای نگهداری نمونه های Sessionهای NHibernate بکار بگیرد. در اینجا قصد نوشتن توضیحات اضافه را ندارم، بهتر است نمونه کانفیگ ActiveRecord برای یک برنامه تحت وب را مشاهده کنید :

<activerecord
 isWeb="true"
 isDebug="true"
 threadinfotype="Castle.ActiveRecord.Framework.Scopes.HybridWebThreadScopeInfo, Castle.ActiveRecord">
 <config>
 <add key="connection.driver_class"
 value="NHibernate.Driver.SqlClientDriver"/>
 <add key="dialect"
 value="NHibernate.Dialect.MsSql2008Dialect"/>
 <add key="connection.provider"
 value="NHibernate.Connection.DriverConnectionProvider"/>
 <add key="connection.connection_string"
 value="Data Source=.\SQLEXPRESS;Initial Catalog=RegisterUsers;Integrated Security=True;Pooling=False"/>
 <add key="proxyfactory.factory_class"
 value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
 <add key="SessionScopeWebModule"
 value="Castle.ActiveRecord.Framework.SessionScopeWebModule"
 name="SessionScopeWebModule"
 type="Castle.ActiveRecord.Framework.SessionScopeWebModule"/>
 </config>
 </activerecord>
 

برای اینکه بتوانیم از الگوی Session per Request استفاده کنیم (همانطور که برای NHibernate پیاده سازی می کنند) باید یک کلاس با کدهای زیر به پروژه خودمان اضافه کنیم :

public class SessionModule : HttpApplication
{
 public SessionModule()
 {
 BeginRequest += new EventHandler(OnBeginRequest);
 EndRequest += new EventHandler(OnEndRequest);
 }

 protected void Application_Start(Object sender, EventArgs e)
 {
 BeginRequest += new EventHandler(OnBeginRequest);
 EndRequest += new EventHandler(OnEndRequest);
 }

 public void OnBeginRequest(object sender, EventArgs e)
 {
 HttpContext.Current.Items.Add("ar.sessionscope", new SessionScope());
 }

 public void OnEndRequest(object sender, EventArgs e)
 {
 try
 {
 SessionScope scope = HttpContext.Current.Items["ar.sessionscope"] as SessionScope;

 if (scope != null)
 {
 scope.Dispose();
 }
 }
 catch (Exception ex)
 {
 HttpContext.Current.Trace.Warn("Error", "EndRequest: " + ex.Message, ex);
 }
 }
}

و البته خطوط زیر را به بخش system.web فایل web.config اضافه کنیم :

<httpModules>
 <add name="ar.sessionscope"
 type="Castle.ActiveRecord.Framework.SessionScopeWebModule, Castle.ActiveRecord"/>
</httpModules>

هنوز کارمان تمام نشده. باید ActiveRecord را در فقط برای اولین اجرای برنامه راه اندازی کنیم. اگر یادتان باشد در یک برنامه تحت ویندوز، راه اندازه اولیه ActiveRecord را در هنگام اجرای برنامه در متد main فایل Program.cs می نوشتیم. در یک برنامه تحت وب این کار را باید در Application_Start انجام دهیم. این متد در یک برنامه تحت وب فقط یکبار و در زمان اجرای اولیه صدا زده می شود و بهترین مکان برای راه اندازی اولیه فریم ورک ActiveRecord است. این متد زمانی که یک فایل Global.asax به پروژه خود اضافه می کنید ایجاد می شود. بدنه این متد برای راه اندازی اولیه ActiveRecord چیزی شبیه کدهای زیر می تواند باشد :

protected void Application_Start(object sender, EventArgs e)
{
 IConfigurationSource configSource = ConfigurationManager.GetSection("activerecord")
 as IConfigurationSource;
 ActiveRecordStarter.Initialize(typeof(User).Assembly, configSource);
}

برای درک بهتر مطلب می توانید پروژه مثال این مطلب را از اینجا دریافت کنید.

WebMatrix توسعه وب را آسان تر می کند

مایکروسافت به تازگی ابزار جدیدی برای توسعه دهندگان وب به نام WebMatrix ارائه کرده است که سفارشی کردن وب اپلیکیشن های موجود یا ساخت یک وب سایت جدید را با امکانات خوب و راه حل های ساده، آسان می کند. این ابزار سبک به افراد کمک می کند تا به راحتی برنامه نویسی با ASP.NET را شروع کنند و خیلی زود در آن پیشرفت کنند. WebMatrix شامل ابزارهای مهم مایکروسافت برای توسعه وب  است. این ابزارها شامل :

  • IIS Developer Express : یک وب سرور سبک و رایگان که با تمام نسخه های ویندوز و نسخه کامل IIS سازگار است.
  • ASP.NET : یک فریم ورک رایگان شامل کلاس های پایه برای توسعه وب.
  • SQL Server Compact : یک نسخه embedded و بسیار سبک و رایگان از SQL Server که بر اساس فایل کار می کند.
  • Razor Syntax : یک View Engine جدید و ساده برای ASP.NET که کدهای سمت سرور سی شارپ یا ویژوال بیسیک را با کدهای HTML ترکیب می کند (مانند  PHP) و یادگیری آن ساده و لذت بخش است.

وب ماتریکس

WebMatrix با استفاده از تکنولوژی های بالا، یک محیط مجتمع ساده و در عین حال قدرتمند برای ساخت وب سایت های داینامیک و مطابق با استاندرادهای جدید به ساده ترین شکل ممکن در اختیار کاربر خود قرار می دهد. شما با وب ماتریکس می توانید یک وب اپلیکیشن اوپن سورس مثل BlogEngine.NET را انتخاب کنید، آن را بر اساس نیاز خود سفارشی کنید و به راحتی آن را بر روی هاست خود پابلیش کنید. پروسه استفاده از وب اپلیکیشن های اوپن سورس در اینترنت با WebMatrix بسیار آسان خواهد بود. شما با وب ماتریکس حتی قادر به انتخاب CMSهای نوشته شده با PHP مثل وردپرس، جوملا و Drupal نیز هستید و حتی می توانید آن ها را با ابزارهای موجود در وب ماتریکس توسعه داده و از همانجا بر روی هاست خود پابلیش کنید.

برای شروع شما می توانید WebMatrix را از اینجا دانلود کنید. اگر دات نت فریم ورک 4.0 را نصب نداشته باشید، کمی حجم دانلود وب ماتریکس بالا خواهد بود، در غیر این صورت با دانلود 15 تا 20 مگابایت WebMatrix را در اختیار خواهید داشت. پس از اجرای آن با یک محیط ساده مواجه خواهید شد که فقط 4 انتخاب را پیش روی شما می گذارد. می توانید یک سایت جدید خالی ایجاد کنید یا از وب اپلیکیشن های موجود در گالری مایکروسافت برای شروع استفاده کنید. هر طور که شروع کنید، وب ماتریکس به شما اجازه مدیریت بر صفحات سایت و تغییر آن ها، مدیریت بر فایل های وب سایت، مدیریت بر دیتابیس سایت و در نهایت پابلیش سایت بر روی سرور را می دهد.

Microsoft Web Gallery

همانطور که اشاره شد، شما در وب ماتریکس می توانید از سینتاکس Razor برای نوشتن کدهای سی شارپ و ویژوال بیسیک در میان کدهای HTML بهر ببرید. یادگیری سینتاکس Razor خیلی آسان است. شما کدهای خود را با یک علامت @ آغاز می کنید و بلاک کد خود را در سی شارپ با { و } محصور می کنید. هر جا که از علامت @ استفاده کنید یعنی می خواهید یک کد سمت سرور را بنویسید. از متغیرها بدون تعیین نوع آن ها استفاده می کنید، سپس ASP.NET خودش بهترین تصمیم را برای تعیین نوع متغیر بر اساس مقداری که درون آن ذخیره می شود خواهد گرفت. صفحاتی که دارای کد Razor هستند دارای پسوندهای مخصوص cshtml یا vbhtml خواهند بود. سینتاکس Razor تمام قدرت ASP.NET را با قواعدی آسان تر در اختیار مبتدیان قرار می دهد، اما حرفه ای ها نیز می توانند به بهترین شکل برای بالا بردن کارایی خود از آن استفاده کنند. یک کد بسیار ساده با سینتاکس Razor را ببینید :


<html>
<head>
<title>Razor Syntax Sample</title>
</head>
<body>

@{
var message = «Hello World.»;
var today = DateTime.Now.ToString();
}

<p>Message : @message</p>
<p>Today is : @today</p>
</body>
</html>

اینطور که پیداست مایکروسافت راه درستی را انتخاب کرده و باید منتظر تکنولوژی های جدیدتر و بهترش در زمینه توسعه وب باشیم. اینکه نظر مایکروسافت در این چند سال اخیر نسبت به نرم افزارهای اوپن سورس تغییرات مثبت زیادی داشته خیلی خوب و سازنده است. مایکروسافت نیز اهمیت استفاده از وب اپلیکیشن های اوپن سورس را در توسعه وب به خوبی می داند و به همین دلیل Microsoft Web Gallery را راه اندازی کرده و توسعه دهندگان را به جای باز تولید اپلیکیشن های تکراری به استفاده و توسعه وب اپلیکیشن های اوپن سورس موجود تشویق می کند. Web Platform Installer و WebMatrix دو ابزار مهم مایکروسافت در زمینه توسعه وب هستند که به صورت توکار از وب اپلیکیشن های اوپن سورس پشتیبانی می کنند و قادرند آن ها را دانلود، تنظیم و پابلیش کنند. تکنولوژی های تحت وب هرچه بازتر باشند بیشتر مورد تایید و مورد اعتماد توسعه دهندگان وب خواهند بود، این را مایکروسافت به خوبی می داند. بدون شک در آینده ای نه چندان دور از WebMatrix و Razor Syntax بیشتر خواهیم شنید.

منابع بیشتر در مورد WebMatrix

حداقل مهارت های یک برنامه نویس دات نت!

لوگوی دات نتاین روزها آیکون ویژوال استادیو را در دسکتاپ خیلی ها می توان دید. اولین فکری که بعد از دیدن این آیکون در دسکتاپ طرف به فکر شما می رسد این است که او به احتمال زیاد برنامه نویس دات نت است. اما باید بدانید که برنامه نویس دات نت بودن فقط داشتن آیکون ویژوال استادیو بر روی دسکتاپ نیست. من یک نفر را می شناسم که ویژوال استادیو را فقط به اسم «سی شارپ» می شناسد و اصلاً نمی داند دات نت فریم ورک چیست و در حال حاضر هم برنامه های بانک اطلاعاتی می نویسد! برای اینکه یک نفر خود را برنامه نویس دات نت بداند، باید حداقل اطلاعاتی در مورد دات نت فریم ورک، کلاس های پایه آن، ابزارهای توسعه آن و زبان های برنامه نویسی آن بداند. هر کسی که در زمینه دات نت برنامه نویسی می کند و خود را توسعه دهنده دات نت می داند، باید حداقل مهارت های زیر را داشته باشد :

1 : دید شیء گرا داشته باشد و با قوانین Objected Oriented Programming به خوبی آشنا باشد. دات نت به صورت پیش فرض برنامه نویس را درگیر مباحث شیء گرایی می کند. به همین دلیل اگر کسی با شیء گرایی آشنایی نداشته باشد نمی تواند برنامه های خوبی بنویسد یا در دات نت پیشرفت کند. یک برنامه نویس دات نت باید بتواند برنامه خود را توسط کلاس ها و با استفاده از مفاهیم کپسوله سازی، ارث بری، چندریختی و اینترفیس ها بنویسد تا توسعه و تغییر آن در دراز مدت ساده و کم هزینه باشد. بر همین اساس او باید :

  • با namespace و scope کلاس ها آشنایی داشته باشد
  • تفاوت یک کلاس Partial و یک کلاس معمولی را بداند
  • مفهوم کلاس های abstract را درک کند و توانایی نوشتن interface را داشته باشد
  • بتواند با استفاده از کلمات کلیدی private، public، protected، internal و internal protected دسترسی به کلاس ها را کنترل کند
  • فرق کلاس و متد استاتیک و غیر استاتیک را بداند
  • با مفاهیم overload و override در تعریف متدها آشنایی داشته باشد

2 : با ویژگی های یکی از زبان های برنامه نویسی دات نت به خوبی آشنا باشد. دانستن ویژگی های یک زبان برنامه نویسی هم در تسریع کدنویسی و هم در استاندارد کد نوشتن به یک برنامه نویس کمک زیادی می کند. بر همین اساس او باید :

  • با تمام data typeهای یک زبان آشنا باشد و به موقع از آن ها استفاده کند
  • بتواند مفاهیم شیء گرایی را با استفاده از ویژگی های زبان پیاده سازی کند
  • با مفاهیم Boxing و Unboxing و Type Casting آشنا باشد
  • با روش های مستند سازی کد در آن زبان آشنا باشد

3معماری دات نت فریم ورک : با معماری دات نت فریم ورک آشنایی داشته باشد. یک برنامه نویس دات نت هر چقدر هم که خوب کد بنویسد، اگر نداند برنامه اش چطور و توسط چه عامل هایی اجرا و کنترل می شود یک جای کارش می لنگد! باید بداند دات نت فریم ورک شامل یک کتابخانه کلاس های پایه است که خود آن شامل رابط کاربری، کلاس های دسترسی به داده و اتصال به دیتابیس، الگوریتم های کدگذاری، ارتباطات شبکه و وب اپلیکیشن است که استفاده به جا از این کلاس ها، سرعت توسعه یک پروژه را افزایش می دهند. باید بداند برنامه های نوشته شده با دات نت در یک محیط زمان اجرا به نام CLR یا Common Language Runtime اجرا و مدیرت می شوند. باید بداند CLR وظیفه مدیریت حافظه و هندل کردن استثنا ها را نیز بر عهده دارد. بر همین اساس او باید :

  • مفهوم اسمبلی (Assembly) در دات نت را بداند
  • با ساختار فایل های اجرایی دات نت آشنا باشد
  • با کلاس های پایه دات نت آشنایی لازم را داشته باشد
  • با Garbage Collector و نحوه مدیریت حافظه در دات نت آشنا باشد
  • با قابلیت Reflection در دات نت آشنایی داشته باشد
  • بداند GAC چیست و چه کاری انجام می دهد

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

  • با پنجره های مختلف ویژوال استادیو و مفاهیم آن ها آشنایی کامل داشته باشد
  • بتواند یک پروژه موجود را کامپایل و اجرا کند
  • بتواند فایل های جدیدی را به پروژه اضافه کند
  • بتواند از Toolbox ویژوال استادیو کنترل های مورد نیاز خود را پیدا کند و کنترل های جدیدی را به آن اضافه کند
  • بتواند با ادیتور کد ویژوال استادیو کار کند و کدهای مورد نظر خود را پیدا کند
  • بتواند یک برنامه را با استفاده از ابزارهای ویژوال استادیو Debug کند (منوی Debug)
  • تفاوت میان اجرا در حالت Debug و اجرا در حالت Release را بداند
  • تفاوت ساختار پروژه های Windows Application، Console Application، Class Library، ASP.NET Web Application و ASP.NET Web Service Application را بداند
  • تفاوت Solution و Project را بداند و بتواند چند پروژه را در یک Solution مدیرت کند

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

  • بر روی مفاهیم و نحوه پیاده سازی دیتابیس و رابطه های میان جدول های اطلاعاتی و زبان SQL تسلط داشته باشد
  • با معماری ADO.NET و کلاس های پایه آن آشنا باشد
  • بداند ORM چیست و چه مشکلاتی را حل می کند
  • حداقل با یکی از ORMهای دات نت مثل LINQ to SQL، NHibernate یا Entity Framework آشنا باشد
  • با DataSet و نحوه استفاده ازکنترل های مربوط به دیتابیس مثل DataGrid آشنا باشد
  • با ساختار فایل های XML آشنایی داشته باشد و بتواند یک فایل XML را پردازش کند

توسعه دهندگان برنامه های مبتنی بر وب (ASP.NET) باید :

  • تفاوت های عمومی یک برنامه دسکتاپ و یک برنامه تحت وب را بداند
  • بداند PostBack چیست و چه کاربردهایی دارد
  • بداند متدهای استاندارد POST و GET در ASP.NET چگونه پیاده سازی شده اند
  • با ViewState آشنایی داشته باشد، وظیفه آن را بداند و بداند چه مواقعی کاربرد دارند
  • با ساختار فایل web.config آشنایی لازم را داشته باشد
  • تفاوت میان کنترل های تحت سرور و کنترل های HTML و تحت کلاینت را بداند
  • با زبان جاوا اسکریپت آشنایی لازم را داشته باشد
  • Lifetime یک برنامه ASP.NET را درک کند
  • با کوکی ها آشنا باشد و بتواند از آن ها استفاده کند
  • بتواند با استفاده از Session یک سیستم لاگین طراحی کند
  • بتواند تفاوت یک وب سرویس و یک وب اپلیکیشن را توضیح دهد

farasun.wordpress.com

این مطلب فقط نظر من در مورد حداقل دانسته های یک برنامه نویس دات نت است. شما ممکن است نظر دیگری داشته باشید و یا بخواهید آیتم هایی را به این لیست اضافه کنید. خوشحال می شوم نظر شما را هم بدانم. من تمام سعی خودم رو کردم تا مطلبم با مطلب Scott Hanselman فرق کند، این مطلب را من از نظر خودم نوشتم و هدفم با هدف آقای Hanselman کاملاً متفاوت است.

10 نکته SEO برای وب سایت های ASP.NET

پس از ساخت یک وب سایت و قرار دادن آن در اینترنت، مهمترین مسئله پیدا کردن بازدیدکننده و مشتری برای آن است. وب سایتی که بازدیدکننده نداشته باشد به هیچ دردی نمی خورد. در این روزگار هم بازدید کننده و مشتری از کجا پیدا می شود… از موتورهای جستجوی معروف مثل گوگل، یاهو و بینگ! اکثر بازدیدهای یک وب سایت را موتورهای جستجو تامین می کنند، به همین علت داشتن یک رتبه ی خوب در موتورهای جستجو یک امتیاز مهم محسوب می شود و باعث پیشرفت وب سایت شما خواهد شد. موتورهای جستجو برای ربته بندی وب سایت ها در نتایج جستجوی خود قوانین مشخصی دارند که با پیروی از این استانداردها می توانید وب سایت خود را برای موتورهای جستجو بهینه کنید. به بهینه کردن یک وب سایت برای موتورهای جستجوگر SEO یا Search Engine Optimization می گویند.

بهینه سازی برای موتورهای جستجو

در این مطلب با نکاتی آشنا خواهید شد که اگر آن ها را به کار بگیرید، موتورهای جستجوگر مطالب وب سایت شما را ایندکس خواهند کرد و لینک های شما در نتایج جستجوی موتورهای جستجوگر معروفی همچون گوگل پدیدار خواهد شد! هر چند این نکات به صورت عمومی و برای صفحات استاتیک هم کاربرد دارند اما این مطلب به صورت خاص برای توسعه دهندگان ASP.NET نوشته شده است.

1 ) URLهای تمیز بسیازید!

URL یک صفحه وب، اولین جایی است که یک موتور جستجو می بیند پس سعی کنید تا جایی که می توانید آدرس های شما با معنی باشند. اگر از ASP.NET MVC استفاده می کنید که هیچ! در غیر این صورت باید از تکنیک URL Rewriting برای بازنویسی آدرس های پارامتری و تبدیل آن به URLهای با معنی استفاده کنید. به طور مثال شما باید آدرسی مثل mysite.com/products.aspx?id=1 را تبدیل به mysite.com/products/1 کنید. اگر به جای اعداد از کلمات با معنی استفاده کنید که چه بهتر!

2 ) URLهای کوتاه بهتر از URLهای طولانی است

سعی کنید آدرس های تولید شده توسط وب سایت شما حداقل طول ممکن را داشته باشند. خود گوگل توصیه می کند که صفحات پویا حداکثر دارای دو پارامتر باشند. صفحاتی با آدرس شبیه به mysite.com/products.aspx?item=3&category=7&subcategory=12&show=true شانس کمتری برای ایندکس شدن نسبت به صفحاتی با یک URL تمیز و کوتاه دارند.

3 ) تا جایی که می توانید از ایجاد Postback جلوگیری کنید!

استفاده از Postback در صفحات aspx می تواند از مهمترین دلایل برای عدم ایندکس شدن بخشی از این صفحات در موتورهای جستجوگر باشد. به طور مثال فرض کنید بخشی از صفحه را در یک Panel قرار داده اید که کاربر پس از فشردن یک دکمه و ایجاد یک Postback به صفحه دستور panel1.Visible = true اجرا شده و محتویات پانل را به کاربر نمایش می دهد. این کار اشتباه شما باعث عدم ایندکس شدن بخشی از محتویات سایت شما که در پانل وجود دارد، می شود، به این دلیل که یک موتور جستجو نمی تواند لینک های یک دکمه را دنبال کند، به زبان ساده تر نمی تواند روی آن دکمه کلیک کند تا ببیند چه اتفاقی می افتد! علاوه بر این مورد، Postback باعث ساخته شدن مقداری کد جاوا اسکریپت در صفحه ما می شود که هم حجم صفحه را بالا می برد و هم اینکه این کدها به هیچ وجه ایندکس نمی شوند. راه حل استفاده از Query String برای انجام اعمالی است که می خواهید هنگام Postback انجام شوند. به طور مثال یک پارامتر به همین صفحه می فرستید و در Page_Load پارامترها را چک می کنید تا عمل مورد نظر کاربر را انجام دهید. در این صورت صفحه شما به راحتی در موتورهای جستجو ایندکس خواهد شد.

4 ) تا جایی که می توانید از کنترل Button استفاده نکنید!

در بکارگیری و استفاده از کنترل تحت سرور asp:Button دقت مضاعف! داشته باشد. این کنترل حتی اگر کدی برای آن ننویسید باعث ایجاد یک Postback می شود. موتورهای جستجوگر نمی توانند کد پشت این دکمه را اجرا کنند تا نتیجه را ایندکس کنند. سعی کنید تا جایی که امکان دارد به جای استفاده از دکمه از تگ a (لینک معمولی) و دستور Response.Redirect استفاده کنید.

5 ) همیشه Title صفحه را به صورت پویا ایجاد کنید

هنگامی که یک صفحه aspx به پروژه خود اضافه می کنید، صفحه شما هیچ Title خاصی ندارد. همانطور که می دانید تگ Title یکی از مهمترین بخش های یک صفحه وب است که از نگاه تیزبین موتورهای جستجو مخفی نمی ماند. فرض کنید شما یک عنوان مناسب برای قسمت Title تعیین کردید، اما آیا این کافیست؟ مگر قرار نیست صفحه پویای شما بر اساس درخواست کاربر محتویات مختلفی نمایش دهد؟ اگر جوابتان مثبت است پس شما باید بر اساس درخواست کاربر و محتویات صفحه، هر بار یک Title خاص را ایجاد کنید. برای این کار می توانید از کلاس HtmlTitle استفاده کنید یا تگ title صفحه خود را به شکل زیر تغییر دهید :

<title runat="server" id="mytitle"></title>

سپس در Page_Load کدی شبیه به کد زیر را بنویسید :

if (Request.QueryString.Count > 0)
{
mytitle.Text = "Test - " + Request.QueryString["name"];
}

6 ) به تگ Meta توجه ویژه ای داشته باشید

تگ Meta با خاصیت های name=»description»x و name=»keywords»x یکی از مهمترین تگ های مربوط به SEO هستند که اولی برای توضیح یک صفحه وب و دومی برای مشخص کردن کلمات کلیدی آن صفحه وب برای موتورهای جستجو کاربرد دارند. خزنده موتورهای جستجو همیشه دقت ویژه ای به محتویات این دو تگ مهم دارند و استفاده درست از آن ها باعث بالا رفتن رتبه صفحه وب شما در نتایج موتورهای جستجو مثل گوگل خواهد شد. در صفحات استاتیک که محتویات صفحه قرار نیست تغییر کنند، شما به صورت دستی مقادیر این تگ ها را مشخص می کنید اما در صفحات پویای ASP.NET بهتر است بر اساس محتویات صفحه ای که قرار است بر اساس اطلاعاتی که از دیتابیس خوانده می شود تغییر کند، محتویات این تگ ها نیز تغییر کنند. برای این که هر بار تگ متا به صورت پویا تعیین شود می توانید این تگ را به شکل زیر بنویسید :

<meta name="description" content=<%= MetaDesc %>  />
<meta name="keywords" content=<%= MetaKeywords %> />

سپس در Code Behind صفحه خود دو متغیر Public از نوع string به نام های MetaDesc و MetaKeywords بسازید. حالا در Page_Load بر اساس اطلاعاتی که می خواهید نمایش دهید این دو متغیر را تغییر دهید تا تگ های متای شما نیز تغییر کنند.

7 ) هر صفحه* URL یکتای خود را داشته باشد

این نکته خیلی مهم است. * منظور از صفحه در اینجا یک فایل فیزیکی نیست. به طور مثال فایل فیزیکیproducts.aspx می تواند صفحات products.aspx?id=1 یا products.aspx?name=datefa را بسازد که محتویات یکسانی ندارند! موتورهای جستجو این دو آدرس را به صورت دو صفحه جداگانه در نظر می گیرند. اگر مثل همین مثال از Query String برای مشخص کردن پارامترها استفاده کنید هیچ مشکلی وجود ندارد، اما اگر از ViewState، Session یا کوکی برای ذخیره این پارامترها و پاس دادن مقادیر به صفحات استفاده می کنید، راه اشتباهی را در پیش گرفته اید! استفاده از این روش باعث می شود که نرم افزارهای خزنده توانایی تفکیک صفحات را نداشته باشند و در نتیجه محتویات شما در موتورهای جستجو ایندکس نخواهد شد. به بیان ساده هر صفحه ای که یک URL یکتا داشته باشد و کاربر بتواند آن را بوکمارک کند توسط موتورهای جستجو نیز قابل ایندکس شدن خواهد بود.

8 ) حتماً یک Site Map برای پروژه خود بسازید

Site Map یک پروتکل استاندارد بر اساس XML است که به موتورهای جستجو کمک می کند تا صفحات را آسان تر و کاراتر ایندکس کنند. داشتن یک Site Map در یک وب سایت مبتنی بر ASP.NET علاوه بر فوایدی که برای ایندکس شدن در موتورهای جستجوی مختلف دارد، باعث نظم در ساختار منوها و Navigation یک وب سایت می شود. ساختن یک Site Map با لطف ویژوال استادیو بسیار آسان شده است. روی پروژه خود کلیک راست کنید و گزینه Add New Item… را برگزینید. در پنجره باز شده Site Map را پیدا کنید و به پروژه خودتان اضافه کنید. حالا فایلی به نام Web.sitemap به پروژه شما اضافه شده است. اگر با XML آشنایی داشته باشید، قواعد نوشتن Site Map نیز مانند نوشتن تگ های XML است. سعی کنید تمام صفحات مهم خودتان را با جزئیات کامل و رعایت قوانین یک نقشه سایت، در این فایل مشخص کنید.

9 ) URLهای خود را با حروف کوچک بسازید

اکثر موتورهای جستجو به بزرگی و کوچکی حروف حساس هستند و این یعنی دو آدرس mysite.com/products.aspx و mysite.com/Products.aspx برای آن ها متفاوت هستند. برای جلوگیری از این اشتباه شما باید تمام URLهای خود را با حروف کوچک بسازید تا مشکلی در ایندکس شدن صفحات توسط موتورهای جستجو پیش نیاید.

10 ) سورس کد صفحات را تمیز کنید!

سورس کد خود را تمیز کنید تا صفحات شما کم حجم شوند. در اینجا منظور از سورس کد، کد نوشته شده در فایل های aspx است نه کدهای موجود در Code Behind که به cs یا vb ختم می شوند. برای تمیز کردن سورس صفحات :

  • کامنت های html را حذف کنید
  • از ViewState وقتی که نیازی به آن ندارید، استفاده نکنید
  • از form runat=»server»x وقتی که نیازی به آن ندارید، استفاده نکنید
  • تا می توانید کد جاوا اسکرپیت درون فایل aspx ننویسید، بلکه از فایل های Js خارجی استفاده کنید
  • تا می توانید کدهای CSS خود را در فایل های استایل جداگانه تعریف کنید

farasun.wordpress.com

نکات مهم دیگر :

  • در تگ های a حتماً از خاصیت title استفاده کنید
  • در تگ های img از خاصیت alt استفاده کنید
  • مطالب وب سایت خود را در فرمت rss هم ارئه کنید
  • از Flash یا Silvetlight برای نشان دادن محتویات استفاده نکنید
  • از Flash یا Silverlight برای ساختن منوها استفاده نکنید
  • از منوهای جاوا اسکریپت استفاده نکنید
  • لینک خود را در وب سایت های دیگر قرار دهید

farasun.wordpress.com

یک ران تایم برای اجرا کردن همه!

با CLR که آشنا هستید!؟ یکی از اجزای اصلی پلت فرم دات نت مایکروسافت است. CLR یک پیاده سازی از CLI استاندارد است و محیطی برای اجرای کدهای برنامه های دات نت ایجاد می کند. کامپایلر های سی شارپ و ویژوال بیسیک دات نت کد ماشین تولید نمی کنند، بلکه کدی تولید می کنند به صورت byte code که ماشین به تنهایی قادر به تفسیر و اجرای آن نیست. کامپایلر ابتدا کد CIL یا همان MSIL را تولید می کند. سپس هنگام اجرای برنامه مورد نظر CLR وارد عمل شده و با کامپایلر just in time یا JIT کد CIL برنامه مورد نظر را به کدی که برای سیستم عامل قابل درک باشد، تبدیل می کند.

clr

وظیفه CLR تنها تبدیل بایت کد CIL به کد ماشین نیست، CLR وظایف مدیریت حافظه، پردازش استثناها (Exception Handling)، مدیرت نخ ها (Thread Management)، Garbage Collection و تامین امنیت را به بهترین نحو انجام می دهد.

CLR پیاده سازی CLI استاندارد برای سیستم عامل ویندوز است. پیاده سازی های دیگر CLI مثل Mono و Portable.NET برای سیستم عامل های غیر ویندوز بوجود آمده اند، زیرا CLR فقط روی ویندوز اجرا می شود.

ایده نوشتن این مطلب و عنوان آن، طرح تی شرت زیر است. بقیه تی شرت های تیم CLR را ببینید!

clr_shirt

طرح این تی شرت، شما را به یاد ارباب حلقه ها نمی اندازد!؟ 🙂

تعریف برخی از اصطلاحات بکار رفته در این مطلب :

  • CLI : مشخصات بازی (=open specification) است که توسط مایکروسافت توسعه داده می شود که کد اجرایی و محیط ران تایمی که هسته دات نت فرم ورک و نرم افزارهای آزاد Mono و Portable.NET را شکل می دهند، توضیح می دهد. این مشخصات محیطی را تعریف می کند که به زبان های برنامه نویسی سطح بالا امکان استفاده در پلت فرم های مختلف را بدون باز نویسی برای یک معماری خاص، می دهد. CLI مخفف Common Language Infrastructure است.
  • CIL : زبان سطح پائینی در CLI است که زبان های تحت دات نت پس از کامپایل شدن به آن ترجمه می شوند. CIL معادل دات نت زبان اسمبلی برای یک CPU است. پس از تبدیل سورس کد یکی از زبان های دات نت به کدهای CIL، این کدها به بایت کد تبدیل می شوند و یک اسمبلی دات نت ایجاد می شود. CIL قبلاً با اسم MSIL نیز شناخته می شد. CIL به صورت «sil» (سیل) تلفظ می شود و مخفف Common Intermediate Language است.
  • JIT Compiler : به عنوان «ترجمه پویا» نیز شناخته می شود و تکنیکی است برای بهبود کارایی یک برنامه کامپیوتری. JIT کد تولید شده قبل از اجرای برنامه را به کدی که به صورت Native اجرا می شود، تبدیل می کند. برای مثال بایت کد را به کد ماشین تبدیل می کند. بسیاری از محیط های ران تایم مدرن مانند دات نت مایکروسافت و بسیاری از پیاده سازی های جاوا از JIT برای اجرای کد با سرعت بالا استفاده می کنند.
  • Garbage Collection : یک شکل از مدیریت حافظه خودکار است که برای باز پس گیری حافظه اشیائی که دیگر مورد استفاده قرار نمی گیرند، کاربرد دارد.
  • Mono : مونو پروژه اوپن سورس و آزادی است که توسط ناول برای پیاده سازی دات نت فریم ورک روی پلت فرم های غیر ویندوزی بوجود آمده است. مونو می تواند روی انواع توزیع های لینوکس (ماننده اوبونتو و زوزه)، مک، سولاریس، سیستم عامل های سازگار با یونیکس و BSD اجرا شود. این پروژه شامل ابزارهای سازگار با دات نت مثل یک IDE، کامپایلر سی شارپ و یک پیاده سازی CLR است. (بخوانید : آیا برنامه دات نت شما روی لینوکس اجرا می شود!؟)
  • Portable.NET : قسمتی از پروژه DotGNU است و محیط ران تایم آزاد و اوپن سورسی برای برنامه های مبتنی بر CLI استاندارد است. این پروژه از کلاس های پایه دات نت، XML و Windows Forms پشتیبانی می کند.

منبع : ویکی پدیا

farasun.wordpress.com

مطالب مرتبط :

اگر تمايل به دنبال کردن مطالب اين وبلاگ داريد، مي توانيد مشترک فيد فراسان شويد.

چطور مشترک شويم؟