This document summarizes 12 chapters on software quality assurance. It discusses integrating quality activities into the project life cycle in Chapter 7. Chapter 8 covers reviews, including formal design reviews and peer reviews. Chapter 9 examines software testing strategies like black box and white box testing. Chapter 10 details test implementation, including test case design and automated testing. Chapter 11 discusses assuring quality of software maintenance. Chapter 12 covers assuring quality of contributions from external participants like subcontractors.
This document summarizes lipoprotein metabolism. It discusses that lipoproteins are spherical particles composed of lipids and proteins that transport relatively insoluble lipids through the aqueous blood. It describes the different types of lipoproteins, including their compositions, sizes, densities, and roles in transporting lipids such as triglycerides and cholesterol. In particular, it focuses on very low density lipoproteins (VLDL), detailing their production and metabolism, through the actions of lipoprotein lipase and other proteins, into intermediate and low density lipoproteins which transport cholesterol. It also discusses related clinical conditions like hyperlipoproteinemias.
Bu oturumda y端ksek trafik alt脹na 巽al脹an sistemlerin, bilinen klasik 旦l巽eklenebilirlik metodolojilerinin d脹脹nda, uygulaman脹n dier sistemlerle etkileimini asenkron olarak ger巽ekletirerek s端rd端r端lebilirliin salanabilmesi 端zerine keyifli bir sohbet ger巽ek hayat 旦rnekleriyle birlikte dinleyicileri bekliyor.
Test M端hendisliine Giri Eitimi - B旦l端m 1Mesut G端nes
油
ISTQB ve ISEB Foundation level gibi "Test Uzmanl脹脹" ile ilgili yap脹lan s脹navlara haz脹rl脹k olarak t端ketilecek d旦k端mand脹r. Ayr脹ca yaz脹l脹m test m端hendislii ile ilgili bilgi edinmek isteyenlerin okuyabilecei T端rk巽e kaynakt脹r.
Test M端hendisliine Giri Eitimi - B旦l端m 1Mesut G端nes
油
ISTQB ve ISEB Foundation level gibi "Test Uzmanl脹脹" ile ilgili yap脹lan s脹navlara haz脹rl脹k olarak t端ketilecek d旦k端mand脹r. Ayr脹ca yaz脹l脹m test m端hendislii ile ilgili bilgi edinmek isteyenlerin okuyabilecei T端rk巽e kaynakt脹r.
14. Neler G旦receiz?
TDD Nedir?
Neden?
Laravel ile TDD
route'lara istek yapmak
TDD Ne Deildir?
assertions
code coverage
PHPUnit
mock'lama
annotations
phpunit.xml
IOC / DI
15. Neler G旦receiz?
TDD Nedir?
Neden?
dom crawler
Laravel ile TDD
route'lara istek yapmak
TDD Ne Deildir?
assertions
code coverage
PHPUnit
mock'lama
annotations
phpunit.xml
IOC / DI
16. Neler G旦receiz?
TDD Nedir?
Neden?
IOC
dom crawler
Laravel ile TDD
route'lara istek yapmak
TDD Ne Deildir?
assertions
code coverage
PHPUnit
mock'lama
annotations
phpunit.xml
IOC / DI
17. Neler G旦receiz?
TDD Nedir?
Neden?
IOC
dom crawler
Laravel ile TDD
route'lara istek yapmak
mockery
TDD Ne Deildir?
assertions
code coverage
PHPUnit
mock'lama
annotations
phpunit.xml
IOC / DI
18. NEDEN?
Yap脹lacak en ufak hata, sitenin tamamiyle 巽al脹mamas脹na sebep olabilir.
Herhangi bir yerde var_dump kullanmak yerine, bunun testini yaz脹n
"Debugging Sucks, Testing Rocks"
Daha "korkusuz" gelitirme yapabilmek i巽in
"Kontrat" salamak i巽in
20. Test Driven Development Nedir?
Yeilden 旦nce k脹rm脹z脹y脹 g旦rmek
Herhangi bir kod yazmadan, 旦nce testini
yaz脹p, bu testin baar脹s脹z olduunu
(k脹rm脹z脹) g旦rmek
21. Test Driven Development Nedir?
Yeilden 旦nce k脹rm脹z脹y脹 g旦rmek
Herhangi bir kod yazmadan, 旦nce testini
yaz脹p, bu testin baar脹s脹z olduunu
(k脹rm脹z脹) g旦rmek
K脹rm脹z脹y脹 yeile 巽evirmeye 巽al脹mak
Baar脹s脹z olan testi, baar脹l脹 yapacak
minimum kodu yazarak, testi baar脹l脹(yeil) hale getirmek
22. Test Driven Development Nedir?
Yeilden 旦nce k脹rm脹z脹y脹 g旦rmek
Herhangi bir kod yazmadan, 旦nce testini
yaz脹p, bu testin baar脹s脹z olduunu
(k脹rm脹z脹) g旦rmek
K脹rm脹z脹y脹 yeile 巽evirmeye 巽al脹mak
Baar脹s脹z olan testi, baar脹l脹 yapacak
minimum kodu yazarak, testi baar脹l脹(yeil) hale getirmek
Ama her zaman yeili de k脹rm脹z脹 yapabilecek durumlar yaratmaya 巽al脹mak
Daha sonra, baar脹l脹 testi baar脹s脹z yapacak yeni testler ekleyerek
kodu deitirmek
23. Test Driven Development Nedir?
Yeilden 旦nce k脹rm脹z脹y脹 g旦rmek
Herhangi bir kod yazmadan, 旦nce testini
yaz脹p, bu testin baar脹s脹z olduunu
(k脹rm脹z脹) g旦rmek
K脹rm脹z脹y脹 yeile 巽evirmeye 巽al脹mak
Baar脹s脹z olan testi, baar脹l脹 yapacak
minimum kodu yazarak, testi baar脹l脹(yeil) hale getirmek
Ama her zaman yeili de k脹rm脹z脹 yapabilecek durumlar yaratmaya 巽al脹mak
Daha sonra, baar脹l脹 testi baar脹s脹z yapacak yeni testler ekleyerek
kodu deitirmek
En sonda mavide huzur bulmakt脹r (Refactoring).
Bu s脹rada kodun kalitesini 巽al脹an yap脹y脹 bozmad脹脹ndan emin olarak artt脹rmak
24. Test Driven Development Nedir?
Sizi daha iyi bir tasar脹ma zorlar
Daha mod端ler
Daha tekrar-kullan脹labilir (reusable)
Daha test edilebilir
25. Test Driven Development Nedir?
Sizi daha iyi bir tasar脹ma zorlar
Daha mod端ler
Daha tekrar-kullan脹labilir (reusable)
Daha test edilebilir
Haz脹r d旦k端mantasyon!
Testler, en g端zel d旦k端mantasyonlard脹r
26. Test Driven Development Nedir?
Sizi daha iyi bir tasar脹ma zorlar
Daha mod端ler
Daha tekrar-kullan脹labilir (reusable)
Daha test edilebilir
Haz脹r d旦k端mantasyon!
Testler, en g端zel d旦k端mantasyonlard脹r
Abi ben d端zg端n yazd脹m, Mehmet'in yazd脹脹 kod patlatm脹
Regression test hayat kurtar脹r
27. Test Driven Development Ne Deildir?
Boa harcanan zaman
Eer 端r端n端 gelitirmeye devam edecekseniz, o zaman脹n 巽ok daha
fazlas脹n脹 kodun bak脹m脹 i巽in harcamak zorunda kalabilirsiniz
> Bir arat脹rmaya g旦re, gelitirme s端resini %15 - %35 arrt脹r脹rken,
> hata say脹s脹n脹 %40 - %90 oran脹nda azalt脹yor.
28. Test Driven Development Ne Deildir?
Boa harcanan zaman
Eer 端r端n端 gelitirmeye devam edecekseniz, o zaman脹n 巽ok daha
fazlas脹n脹 kodun bak脹m脹 i巽in harcamak zorunda kalabilirsiniz
> Bir arat脹rmaya g旦re, gelitirme s端resini %15 - %35 arrt脹r脹rken,
> hata say脹s脹n脹 %40 - %90 oran脹nda azalt脹yor.
Daha 旦nce yaz脹lm脹 kodu, test eder
Hen端z yaz脹lmam脹 kodun testini i巽erir.
Kodun testi deil, testin kodu vard脹r
29. Test Driven Development Ne Deildir?
Boa harcanan zaman
Eer 端r端n端 gelitirmeye devam edecekseniz, o zaman脹n 巽ok daha
fazlas脹n脹 kodun bak脹m脹 i巽in harcamak zorunda kalabilirsiniz
> Bir arat脹rmaya g旦re, gelitirme s端resini %15 - %35 arrt脹r脹rken,
> hata say脹s脹n脹 %40 - %90 oran脹nda azalt脹yor.
Daha 旦nce yaz脹lm脹 kodu, test eder
Hen端z yaz脹lmam脹 kodun testini i巽erir.
Kodun testi deil, testin kodu vard脹r
Her soruna 巽旦z端md端r
Testler de yanl脹/eksik olabilir.
Kodda 巽脹kan bir bug asl脹nda yanl脹/eksik bir testtir
31. PHPUnit
Sebastian Bergmann taraf脹ndan gelitirilmitir
XUnit ailesinin bir 端yesidir
<?php
class FooTest extends PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function firstTest()
{
$this->assertTrue(true);
}
}
36. PHPUnit - Mock'lama
Unit test yazarken sadece ilgili birimi test etmeliyiz
G端n端n sonunda, t端m birimler d端zg端n 巽al脹脹yorsa, integration test'e ge巽ebiliriz
Bu birim d脹ar脹 ba脹ml脹 baka bir s脹n脹f kullan脹yorsa, onlar脹 Mock'lamal脹y脹z
37. PHPUnit - Mock'lama
class StubTest extends PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this->getMock('SomeClass');
// Configure the stub.
$stub->expects($this->any())
->method('doSomething')
->will($this->returnValue('foo'));
// Calling $stub->doSomething() will now return
// 'foo'.
$this->assertEquals('foo', $stub->doSomething());
}
}
38. Inversion Of Control - Dependency Injection
Uygulama i巽indeki, nesne yaratma (instance oluturma) s端recinin sadece bu iten sorumlu
bir birim taraf脹ndan kontrol edilmesi.
Loosly Coupled ve daha test edilebilir kodlar 端retmek i巽in
39. Inversion Of Control - Dependency Injection
Uygulama i巽indeki, nesne yaratma (instance oluturma) s端recinin sadece bu iten sorumlu
bir birim taraf脹ndan kontrol edilmesi.
Loosly Coupled ve daha test edilebilir kodlar 端retmek i巽in
class User
{
public function create() {
$logger = new DatabaseLogger();
$logger->log("user created");
}
}
40. Inversion Of Control - Dependency Injection
Uygulama i巽indeki, nesne yaratma (instance oluturma) s端recinin sadece bu iten sorumlu
bir birim taraf脹ndan kontrol edilmesi.
Loosly Coupled ve daha test edilebilir kodlar 端retmek i巽in
class User
{
public function create() {
//User s脹n脹f脹 DatabaseLogger'a 巽ok ba脹ml脹
$logger = new DatabaseLogger();
$logger->log("user created");
}
}
41. Inversion Of Control - Dependency Injection
DatabaseLogger olmadan User s脹n脹f脹 巽al脹am脹yor
Bir ad脹m ileri ta脹yarak, DatabaseLogger'a olan bal脹l脹脹 kald脹ral脹m
42. Inversion Of Control - Dependency Injection
DatabaseLogger olmadan User s脹n脹f脹 巽al脹am脹yor
Bir ad脹m ileri ta脹yarak, DatabaseLogger'a olan bal脹l脹脹 kald脹ral脹m
function kullanilacakLoggerSinifindanObjeUret () {
return new DatabaseLogger();
}
class User
{
public function create() {
$logger = kullanilacakLoggerSinifindanObjeUret();
$logger->log("user created");
}
}
43. Inversion Of Control - Dependency Injection
DatabaseLogger olmadan User s脹n脹f脹 巽al脹am脹yor
Bir ad脹m ileri ta脹yarak, DatabaseLogger'a olan bal脹l脹脹 kald脹ral脹m
function kullanilacakLoggerSinifindanObjeUret () {
//D端nyan脹n en basit Dependency Injection Container'脹
return new DatabaseLogger();
}
class User
{
public function create() {
$logger = kullanilacakLoggerSinifindanObjeUret();
$logger->log("user created");
}
}
44. Inversion Of Control - Dependency Injection
Ama hala bir sorun var
ya bu fonksiyondan d旦nen objenin "log" diye methodu yoksa?
45. Inversion Of Control - Dependency Injection
Ama hala bir sorun var
ya bu fonksiyondan d旦nen objenin "log" diye methodu yoksa?
function kullanilacakLoggerSinifindanObjeUret () {
//D端nyan脹n en basit Dependency Injection Container'脹
return new HodoLogger();
}
class User
{
public function create() {
$logger = kullanilacakLoggerSinifindanObjeUret();
$logger->log("user created");
}
}
46. Inversion Of Control - Dependency Injection
Her Logger t端revinin "log" diye methodu olmal脹
Interface!!1
interface MyLoggerInterface {
public function log($msg);
}
class HodoLogger implements MyLoggerInterface
function kullanilacakLoggerSinifindanObjeUret () {
$logger = new HodoLogger();
if (!$logger instanceOf MyLoggerInterface) {
throw new Exception("HATA!!");
}
return $logger;
}
47. Inversion Of Control - Dependency Injection
Art脹k gelen logger objesinin log methodu olduundan emin olduk.
Ama her s脹n脹f i巽in b旦yle sa巽ma methodlar m脹 yazaca脹z?
48. Inversion Of Control - Dependency Injection
Art脹k gelen logger objesinin log methodu olduundan emin olduk.
Ama her s脹n脹f i巽in b旦yle sa巽ma methodlar m脹 yazaca脹z?
Laravel IOC Container
App::bind("myapplication.logger", function () {
return new DatabaseLogger();
});
class User
{
public function create() {
$logger = App::make("myapplication.logger");
$logger->log("user created");
}
}
50. Laravel'de Unit Testing
testler app/tests alt脹nda bulunur
test s脹n脹flar脹 *Test.php ile biten dosyalarda bulunur
IlluminateFoundationTestingTestCase
test'ler 巽al脹脹rken environment "testing" olarak set edilir
burada ger巽ek ortamdan ayr脹lan ayarlar脹 girebilirsiniz
51. Laravel'de Unit Testing - Route'lar脹 kontrol etme
$response = $this->call('GET', 'user/profile');
$response = $this->action('GET', 'UserController@profile', array('user' => 1));
$crawler = $this->client->request('GET', '/');
52. Laravel'de Unit Testing - Route'lar脹 kontrol etme
$this->assertEquals('Hello World', $response->getContent());
$this->assertEquals('John', $view['name']);
$this->assertTrue($this->client->getResponse()->isOk());
$this->assertCount(1, $crawler->filter('h1:contains("Hello World!")'));
53. Laravel'de Unit Testing - Mocking
Facades
Laravel'de t端m Facade'lar Mockery ile Mock'lanabilir
public function getIndex()
{
Event::fire('user.logged');
return 'Welcome!';
}
public function testGetIndex()
{
Event::shouldReceive('fire')->once()->with('user.logged');
$this->call('GET', '/');
}
54. Laravel'de Unit Testing - Mocking
Mockery
聴stersek, Mockery kullanarak, kendi dependency'lerimizle test edebiliriz
$mock = Mockery::mock('BizimLogger');
$mock->shouldReceive('log');
App::instance("myapplication.logger", $mock);
55. Talk is cheap, show me the code!
Giris isimli bir sayfamiz olsun
Buraya yapilan GET isteklerinde, bir form g旦r端ns端n
formun i巽inde
kullan脹c脹n脹n ad脹n脹 girebilecei bir alan
ve submit butonu olsun
Kullan脹c脹 formu post ettiinde
Eer isim "phptr" ise ekrana "Hibrit!!1" yazs脹n
Deilse, "Giri yapan kullan脹c脹: KULLANICI_ADI" eklinde post edilen kullan脹c脹 ad脹n脹 yazs脹n
"phptr" kullan脹c脹s脹n脹n her girii de log'lans脹n