🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.funkcyjne
4 messages
4 total messages Started by rajm Mon, 17 Jul 2006 11:32
Jak testować?
#837
Author: rajm
Date: Mon, 17 Jul 2006 11:32
18 lines
1413 bytes
Witam,

W jaki sposób testujecie aplikacje funkcyjne? (np. lispowe właśnie). Chodzi mi
o testy typu whitebox.

W typowych, imperatywnych językach (np. obiektowych) to wiadomo; Są testy
pokrycia kodu, są asercje, do większych kawałków wykonuje się testy
jednostkowe np. JUnitem. Obiekty dostają coś na wejściu, patrzymy co zwracają
na wyjściu.

W przypadku softu lispowego, czy ogólnie pisanego deklaratywnie specyfika
działania jest zgoła inna. Są na to jakieś oddzielne narzędzia czy metodyki? 
Moglibyście coś polecić? Może kakieś frameworki?

Pozdrawiam

-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Jak testować?
#838
Author: Tomasz Zielonka
Date: Tue, 18 Jul 2006 12:54
44 lines
2259 bytes
 rajm wrote:
> Witam,
>
> W jaki sposób testujecie aplikacje funkcyjne? (np. lispowe właśnie). Chodzi mi
> o testy typu whitebox.
>
> W przypadku softu lispowego, czy ogólnie pisanego deklaratywnie specyfika
> działania jest zgoła inna.

Mówiąc o "sofcie lispowym" prawdopodobnie myślisz o oprogramowaniu pisanym
w Common Lisp lub Scheme. Języki te nie wymuszają programowania
deklaratywnego, a jedynie w pewnym stopniu wspierają ten styl. Cały czas
masz dostęp do mnóstwa imperatywnych mechanizmów, możesz więc używać
technik znanych z języków imperatywnych.

Jeśli chodzi o programowanie funkcyjne, to nie jestem tu ekspertem, ale...

> W typowych, imperatywnych językach (np. obiektowych) to wiadomo; Są testy
> pokrycia kodu,

nie znam takich narzędzi dla języków funkcyjnych

> są asercje,

też są asercje

> do większych kawałków wykonuje się testy jednostkowe np. JUnitem.

też można, oczywiście nie JUnitem.

Do Haskell'a jest bardzo ciekawy system QuickCheck, który opiera się na
automatycznym generowanie testowych danych i sprawdzaniu zadanych
własności.

> Obiekty dostają coś na wejściu, patrzymy co zwracają
> na wyjściu.

Analogicznie, funkcje dostają coś na wejściu, patrzymy co zwracają na
wyjściu ;-) Z funkcjami jest to nawet bardziej naturalne, zdziwiło mnie
stwierdzenie, że "obiekty dostają coś na wejściu". Obiekty mają też
stan.

Best regards
Tomasz
Re: Jak testować?
#839
Author: Tomasz Zielonka
Date: Tue, 18 Jul 2006 12:57
8 lines
1058 bytes
Tomasz Zielonka wrote:
[...]

Chciałem jeszcze napisać o kilku rzeczach, ale przedwcześnie wysłałem
posta. Postaram się dodać dziś wieczorem.

Best regards
Tomasz
Re: Jak testować?
#840
Author: Tomasz Zielonka
Date: Wed, 19 Jul 2006 05:49
28 lines
2141 bytes
Tomasz Zielonka wrote:
> Tomasz Zielonka wrote:
> [...]
>
> Chciałem jeszcze napisać o kilku rzeczach, ale przedwcześnie wysłałem
> posta. Postaram się dodać dziś wieczorem.

Warto się zastanowić dlaczego w ogóle testujemy programy. Robimy to
dlatego, że nie jesteśmy pewni ich poprawności. Jednym z celów
rozwoju języków funkcyjnych jest dostarczenie narzędzi, które
pozwalają uzyskać większą pewność poprawności programu.

Sporą pomocą jest już sam styl funkcyjny, unikający niepotrzebnego stanu
i efektów ubocznych, bliższy matematyce niż strukturze komputera.
Oprócz tego ważne są dobre możliwości modularyzacji kodu, osiągane m.in.
przez funkcje wyższego rzędu, funkcje jako wartości, leniwość.

Większość języków funkcyjnych w jakimś stopniu ułatwia dowodzenie
własności programów. Przy braku efektów ubocznych można przekształcać
programy tak prosto jak wyrażenia matematyczne (bo tym faktycznie są
programy w niektórych JF).

W językach z bogatym statycznym systemem typów można przenieść część
niezmienników programu na poziom typów, dzięki czemu zachowanie tych
niezmienników będzie sprawdzane podczas kompilacji, statycznie.

Pozdrawiam
Tomasz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads