Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Czy znacie jakieś narzędzia/metodyki/zbiory reguł do testowania modeli obiektowych? Chodzi mi o wszystko związane z projektowaniem aplikacji w architekturze zorientowanej obiektowo, a w szczególności cześć dotycząca projektu w UML-u (lub innym abstrakcyjnym języku), czyli diagramy klas, obiektów, komponentów, pakietów itd.
W skrócie chodzi mi o wszystko związane z wykrywaniem błędów, odstępstw od standardów lub też np. potencjalnych zagrożeń w takich modelach, realizowane w jakikolwiek sposób: jako wtyczkę do aplikacji, zestaw reguł w napisanych języku naturalnym, zbiór wytycznych itd.
Pozdrawiam,
Contravene
Offline
Testy jednostkowe? Tyle, że do tego by się przydała chyba jednak jakaś implementacja.
Ostatnio edytowany przez kamikaze (2010-01-23 23:39:29)
Offline
Nie, unit testy nie.
Zobacz Umbrello dla KDE. Można sobie "rysować" diagramy klas, i potrafi on potem wygenerować z tego defnicje w kilku językach. Potafi chyba też czytać definicje klas i robić z nich diagramy. A co do ogólnego sprawdzania poprawności... Nie wiem. Może po prostu miej/miejcie (jeśli to projekt zespołowy) jakiś referencyjny diagram, do którego muszą być wprowadzane i zatwierdzanie wszystkie zmiany ZANIM ktokolwiek zmieni hierarchię w kodzie.
Osobiście diagramy robię po prostu na kartkach, i po prostu przykładam do nich dużo uwagi.
Offline
[quote=kamikaze]Testy jednostkowe? Tyle, że do tego by się przydała chyba jednak jakaś implementacja.[/quote]
Nie, nie testy jednostkowe. Chodzi mi o błędy na etapie projektowania.
[quote=harry666t]Nie, unit testy nie.
Zobacz Umbrello dla KDE. Można sobie "rysować" diagramy klas, i potrafi on potem wygenerować z tego defnicje w kilku językach. Potafi chyba też czytać definicje klas i robić z nich diagramy. A co do ogólnego sprawdzania poprawności... Nie wiem. Może po prostu miej/miejcie (jeśli to projekt zespołowy) jakiś referencyjny diagram, do którego muszą być wprowadzane i zatwierdzanie wszystkie zmiany ZANIM ktokolwiek zmieni hierarchię w kodzie.
Osobiście diagramy robię po prostu na kartkach, i po prostu przykładam do nich dużo uwagi.[/quote]
Myślę, że każdy stara się unikać błędów w modelu, ale chodzi o podniesienie ich wykrywalności wraz z konstrukcjami, które mogą w przyszłości stać się problematyczne. Sprawdziłaby się do tego jakaś aplikacja, która automatycznie wykrywałaby tego typu usterki. Inne wyjście to jakaś metoda, zestaw kroków lub punktów do sprawdzenia (albo jak napisałeś referencyjny diagram), które pozwolą osiągnąć to "manualnie" (chodzi też o błędy niespójności pomiędzy poszczególnymi diagramami). Na pewno sam przygotuję coś takiego, ale istnieje duża szansa, że coś pominę, a zależy mi, żeby metoda była jak najbardziej kompletna. Gdy już będę miał coś takiego, to odpowiednią wtyczkę do aplikacji zawsze można przygotować.
Offline
Mi się zdaje, że ciężko coś takiego sprawdzić. Program, który by to sprawdzał musiałby znać logikę, którą się kierowałeś. Posiadać jakąś inteligencje, a to wątpliwe. Bo pewnie zaprojektowany model obiektowy zawsze będzie poprawny, czemu miałby nie być to tylko projekt. Inna sprawa czy jest spójny i czy będzie uniwersalny. Tego chyba żaden automat nie jest w stanie określić.
Offline
[quote=kamikaze]Mi się zdaje, że ciężko coś takiego sprawdzić. Program, który by to sprawdzał musiałby znać logikę, którą się kierowałeś. Posiadać jakąś inteligencje, a to wątpliwe. Bo pewnie zaprojektowany model obiektowy zawsze będzie poprawny, czemu miałby nie być to tylko projekt. Inna sprawa czy jest spójny i czy będzie uniwersalny. Tego chyba żaden automat nie jest w stanie określić.[/quote]
Są pewne elementy, które można sprawdzić automatycznie, jak np. pętle zależności, zbyt duża ilość metod w klasie itd. to też jest coś, co chciałbym automatycznie wykryć. Tak samo konwencja nazewnictwa itd.
Offline
No nie wiem. Pętle zależności mogą być celowe, duża ilość metod w klasie na pierwszy rzut oka widać (projektant umie liczyć co najmniej do 10, a licząc palce u nóg to nawet do 20 ;]), konwencja nazewnictwa jest przecież dowolna. Są jakieś tam reguły, ale nikt niczego nie narzuca.
Offline
[quote=kamikaze]No nie wiem. Pętle zależności mogą być celowe[/quote]
Nie chodzi mi o automatyczne poprawienie, ale wyświetlenie warninga (czyt. wskazanie, że to może rodzić problemy).
[quote=kamikaze]duża ilość metod w klasie na pierwszy rzut oka widać (projektant umie liczyć co najmniej do 10, a licząc palce u nóg to nawet do 20 ;]), konwencja nazewnictwa jest przecież dowolna. Są jakieś tam reguły, ale nikt niczego nie narzuca.[/quote]
Chodzi właśnie o to, że trzeba spełnić jakieś reguły narzucone na projekt. A że różne projekty mają różne konwencje, stąd konieczność zautomatyzowania tego (chociaż bardziej chodzi mi tutaj o przygotowanie procedury i listy wytycznych, automatyzacja na dalszym planie).
Offline
Wszystko zależy od doświadczenia i umiejętności projektanta, nikt nie powinien narzucać na projekt konwencji typu 5 metod na klase bo to z deka głupota. Nie ważne ile metod ważne, że należą one do danego obiektu i są z nim spójne wykonując zadania przewidziane dla tego obiektu. A kto to najlepiej sprawdzi niż żywa ludzka inteligencja? Przygotowanie procedury i listy wytycznych to też rola projektanta, nie wyobrażam sobie żeby jakiś automat potrafił narzucić wytyczne. Masz różnego rodzaju wzorce projektowe, popularne metody postępowania. Znając je możesz zaprojektować aplikacje, jakby były do tego automaty, projektanci nie byliby potrzebni. Są automaty, które potrafią wygenerować podstawowy kod na podstawie modelu obiektowego, ale o generowaniu czy sprawdzaniu modeli obiektowych przez automat nie słyszałem. Wydaje mi się niezbyt możliwe zbudowanie czegoś takiego, ale kto wie.
Offline
[quote=kamikaze]Wszystko zależy od doświadczenia i umiejętności projektanta, nikt nie powinien narzucać na projekt konwencji typu 5 metod na klase bo to z deka głupota. Nie ważne ile metod ważne, że należą one do danego obiektu i są z nim spójne wykonując zadania przewidziane dla tego obiektu. A kto to najlepiej sprawdzi niż żywa ludzka inteligencja? Przygotowanie procedury i listy wytycznych to też rola projektanta, nie wyobrażam sobie żeby jakiś automat potrafił narzucić wytyczne. Masz różnego rodzaju wzorce projektowe, popularne metody postępowania. Znając je możesz zaprojektować aplikacje, jakby były do tego automaty, projektanci nie byliby potrzebni. Są automaty, które potrafią wygenerować podstawowy kod na podstawie modelu obiektowego, ale o generowaniu czy sprawdzaniu modeli obiektowych przez automat nie słyszałem. Wydaje mi się niezbyt możliwe zbudowanie czegoś takiego, ale kto wie.[/quote]
W żadnym wypadku nie chodzi o generowanie modelu. Właśnie o taką listę wytycznych (z tym, że bardziej uniwersalną) również mi chodzi.
Offline
Taka lista wytycznych będzie zależeć od języka, typu projektu. Może powiedz konkretnie o co chodzi. Bo uniwersalnych wytycznych raczej nie ma, języki są różne, niektóre nie nadają się do zrobienia rzeczy, do których nadają się inne. Więc takie gadanie w powietrzu jest bez sensu. Niektóre języki wprowadzają specyfikacje i konwencje, które być znajdziesz na stronie twórców języka. Przykładem może być konwencja pisania kodu Javy zamieszczona na stronie Suna - http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html.
Offline
[quote=kamikaze]Taka lista wytycznych będzie zależeć od języka, typu projektu. Może powiedz konkretnie o co chodzi. Bo uniwersalnych wytycznych raczej nie ma, języki są różne, niektóre nie nadają się do zrobienia rzeczy, do których nadają się inne. Więc takie gadanie w powietrzu jest bez sensu. Niektóre języki wprowadzają specyfikacje i konwencje, które być znajdziesz na stronie twórców języka. Przykładem może być konwencja pisania kodu Javy zamieszczona na stronie Suna - http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html.[/quote]
Nie chcę zagłębiać się do poziomu języka, ale pozostać w modelu. Na pewno nie będzie łatwo znaleźć uniwersalne reguły, ale mimo wszystko spróbuję. Umieszczę tutaj informację o wynikach.
Offline
Nie wiem co ty tworzysz ;] Mógłbyś się pochwalić? Ktoś ci kazał coś wymyśleć, nowe programowanie obiektowe? Imho przydałoby się żebyś jednak wział, któryś z językół obiektowych za wzór i dla niego szukać reguł. Bo obiektowość jest różna i być może części aspektów obiektowości nawet nie znasz. Jeśli np. twoje myślenie obiektowe skupia się wokół PHP, gdzie obiektowość jest mizerna. Poza tym jest kilka uniwersalnych reguł, np. utrzymanie wysokiej spójności obiektów, czy minimalizacja zależności między obiektami albo hermetyzacja. Możesz poszukać czegoś o dobrych praktykach programowania.
Offline
[quote=kamikaze]Nie wiem co ty tworzysz ;] Mógłbyś się pochwalić? Ktoś ci kazał coś wymyśleć, nowe programowanie obiektowe? Imho przydałoby się żebyś jednak wział, któryś z językół obiektowych za wzór i dla niego szukać reguł. Bo obiektowość jest różna i być może części aspektów obiektowości nawet nie znasz. Jeśli np. twoje myślenie obiektowe skupia się wokół PHP, gdzie obiektowość jest mizerna. Poza tym jest kilka uniwersalnych reguł, np. utrzymanie wysokiej spójności obiektów, czy minimalizacja zależności między obiektami albo hermetyzacja. Możesz poszukać czegoś o dobrych praktykach programowania.[/quote]
Tworzę dokładnie to, co napisałem ;) Szukam sposobu, który pozwoliłby na wykrywanie błędów i sytuacji mogących powodować błędy w modelach obiektowych. Dodatkowo metoda powinna się dawać łatwo dostosowywać do konkretnego projektu i być możliwie uniwersalna.
Offline
Powodzenia, pochwal się jak skończysz.
Offline
[quote=kamikaze]Powodzenia, pochwal się jak skończysz.[/quote]
Dzięki, nie omieszkam. Sam jestem ciekaw, co z tego wyniknie.
Offline
Time (s) | Query |
---|---|
0.00017 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00129 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='44.200.40.97' WHERE u.id=1 |
0.00125 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '44.200.40.97', 1711615101) |
0.00065 | SELECT * FROM punbb_online WHERE logged<1711614801 |
0.00109 | DELETE FROM punbb_online WHERE ident='54.36.148.107' |
0.00088 | DELETE FROM punbb_online WHERE ident='54.36.148.111' |
0.00338 | DELETE FROM punbb_online WHERE ident='54.36.148.197' |
0.00096 | SELECT topic_id FROM punbb_posts WHERE id=139327 |
0.00219 | SELECT id FROM punbb_posts WHERE topic_id=15989 ORDER BY posted |
0.00089 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=15989 AND t.moved_to IS NULL |
0.00008 | SELECT search_for, replace_with FROM punbb_censoring |
0.00126 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=15989 ORDER BY p.id LIMIT 0,25 |
0.00112 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=15989 |
Total query time: 0.01525 s |