Тест тусгаарлалт

Орчуулгыг бүтэн эхээр нь та wordpress-ээс болон   gitbook.com  -с  үзэх боломжтой.

Хэрэв та дууриамал тесттэй хийгдсэн системд ямар нэгэн алдаа хийвэл, зөвхөн алдаатай SUT-ыг агуулсан тестүүд л ажиллахгүй болно. Харин сонгодог аргаар хийгдсэн системд алдаа хийвэл алдаатай объектыг агуулсан бүх тестүүд ажиллахгүй ба үүнд алдаатай объект бусад тестэнд хамтрагчаар орж ашиглагдаж байгаа тестүүд ч мөн орно. Үүнээс үүдээд олон дахин ашиглагдаж буй объектод гарах нэг алдаа нийт системийг хамарсан маш олон алдааг дагуулдаг.

Дууриамал аргаар хөгжүүлэгчид үүнийг маш том дутагдалтай тал гэж үздэг; учир нь алдааны үндсэн шалтгааныг олж, засахын тулд маш олон тооны debug-ын хийх хэрэгтэй болдог. Харин сонгодог аргаар хөгжүүлэгчид үүнийг асуудал гэж үздэггүй. Ихэвчлэн алдаатай кодыг илрүүлэх нь нилээд хялбархан байдаг ба хөгжүүлэгч ажиллахгүй тестийг хараад л аль алдаа хаанаас үүдэлтэйг хэлж чаддаг. Мөн түүнчлэн хэрэв та байнга тестлэдэг бол (хэрэв үгүй бол, та тэгэх хэрэгтэй), гарсан алдаа тань таны хамгийн сүүлд өөрчилсөн кодоос үүсэлтэйг та мэддэг учираас алдааг олоход тийм ч хүндрэлтэй байдаггүй.


Тестүүдийн бүтэц бүрэлдэхүүн, тогтоц (granularity) нь үүнд мөн нэгэн чухал хүчин нөхцөл болдог. Сонгодог аргаар хөгжүүлэгдсэн тестүүд олон тооны жинхэнэ объектуудыг ажиллуулдаг тул ихэвчлэн нэг тест гэдэг бол нэг объектыг тестлэх тест гэхээс илүүтэйгээр олон тооны бүл объектуудыг тестлэх нэг бүлэг тест болдог. Хэрэв бүл олон тооны объектуудыг агуулдаг бол алдааны үндэс эх шалтгааныг олоход ихээхэн хүндрэл учирдаг. Энэ нь юу гэсэн үг вэ гэхлээр тэдгээр тестүүд нилээд бүдүүн бадаг, нарийн тодорхойлогдоогүй бүтэцтэй (coarse grained) байна гэсэн үг.

Дууриамал аргаар хөгжүүлэгдсэн тестүүд дээрх хүндрэлтэй тулгарах нь нилээд ховор. Учир нь тухайн аргад  үндсэн тестлэгдэж буй объектоос бусад бүх объектуудыг дууриамлаар ашиглагддаг тул хамтрагч объектуудад нарийн тодорхойлогдсон (fine grained) тестүүд шаардлагатай болдог. Яг үндсэндээ бол бүдүүн бадаг, нарийн тодорхойлогдоогүй бүтэцтэй (coarse grained) тестүүд нь сонгодог аргын дутагталтай тал биш.  Харин үүнээс илүүтэйгээр сонгодог аргыг буруу ашигласны үр дүн гэж хэлж болно. Нэг сайн баримталбал зохих зарчим бол та класс бүхнээ яг нарийн тодорхойлогдсон тестээр тусгаарласан эхэсээ шалгаж байх хэрэгтэй. Хэдийгээр заримдаа бүл объектууд тестэнд хамрагдах үе байдаг ч тооны хувьд цөөхөн байх учиртай – 5,6 -с хэтрэхгүй байвал зүгээр. Хэрэв та бүдүүн бадаг, нарийн тодорхойлогдоогүй бүтэцтэй (coarse grained) тестүүдэд алдаа олох (debuging хийх) болбол, та нарийн тодорхойлогдсон бүтэцтэй (fine grained) тестүүдийг алхам бүрдээ үүсгэн, тестээр хөтлөгдөх аргаар цааш үргэлжлүүлэх хэрэгтэй.

Сонгодог XUnit тестүүд нь яг үндсэндээ нэгжийг тестлэх (unit) тестүүдээс гадна мөн бага хэмжээний integration тестүүд юм. Ийм учираас үндсэн тестэнд илрүүлэгдээгүй алдаанууд дэд тестүүдэд заримдаа илэрдэг тул – ялангуяа классууд хоорондоо нарийн холбогдон харилцах үед – олон хүмүүс үүнд дуртай байдаг. Дууриамал аргаар хөгжүүлэгдсэн тестүүдэд энэ байдаггүй. Мөн түүнчлэн дууриамал тест дахь *тэгэх байх гэсэн нөхцөлүүд* (expectations-үүд) заримдаа буруу байх боломжтой тул хэдийгээр тестүүд зөв ажиллаж ногоон болох боловч алдааг нуудаг.

Одоо миний онцлох хэрэгтэй нэг зүйл бол хэдийгээр аль ч тестийн аргыг та ашигласан бай та үүнийгээ системийг бүхлээр нь хамрах нарийн тодорхойлогдооогүй (coarse grained) acceptance тестүүдтэй холбож өгөх хэрэгтэй. Би acceptance тестүүдийг төслийнхөө нилээд сүүлийн шатанд авч ашигласан ба үүндээ харамсдаг нилээдгүй олон тооны төслүүдтэй таарч байсныг хэлэх хэрэгтэй байх.

Нийтлэлийг бүтнээр нь мөн gitbook.com -с унших, татаж авах боломжтой. Холбоос https://www.gitbook.com/book/erheme318/mocks-aren-t-stubs

Advertisements

Хариулт үлдээх

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Өөрчлөх )

Twitter picture

You are commenting using your Twitter account. Log Out / Өөрчлөх )

Facebook photo

You are commenting using your Facebook account. Log Out / Өөрчлөх )

Google+ photo

You are commenting using your Google+ account. Log Out / Өөрчлөх )

Connecting to %s