Generator UML PHP [zamknięty]


110

Jak wygenerować diagram UML na podstawie istniejących klas w PHP?


2
Nie pracuję już z PHP, więc nie mam kodu do przetestowania. Kiedy to opublikowałem, żadna z początkowych odpowiedzi nie była wystarczająca, ale od tego czasu wiele się zmieniło. Pracowałem z PHP 5.2, a obecnie jest to PHP7.
Jeffrey 04

Odpowiedzi:


42

Gruszka oferuje również narzędzie PHP UML .

PHP_UML:

  • Może generować pliki UML / XMI w wersji 1.4 lub w wersji 2.1 (widoki logiczne, komponenty i wdrożenia)
  • Potrafi wygenerować dokumentację API w formacie HTML
  • Potrafi wygenerować kod PHP (szkielet kodu) z podanego pliku XMI
  • Potrafi konwertować zawartość UML / XMI z wersji 1.4 do wersji 2.1

Zainstaluj go w wierszu poleceń za pomocą:

$ pear install pear/php_uml

(Kiedyś tak było, $ pear install pear/php_uml-alphaale pakiet stał się stabilny).

Wygeneruj swoje XMI:

$ phpuml -o project.xmi


2
z jakiegoś powodu pear.com nie lubi tego linku bez końcowego ukośnika: pear.php.net/package/PHP_UML
Stephen Fuhry

1
@Stephen, tak, też to zauważyłem! Jeśli klikniesz link, otrzymasz 404, ale jeśli wybierzesz pasek adresu i naciśniesz Enter, działa.
nickf

1
Kilka lat później polecenie jest teraz pear install PHP_UML-1.6.1(patrz pear.php.net/package/PHP_UML/download/All lub pear.php.net/package/PHP_UML )
Ben

1
To powinna być akceptowana odpowiedź. Narzędzie jest spektakularne.
Xofo

3
nie działa z php 7
DevWL

41

Gorąco polecam BOUML, który:

  • jest niezwykle szybki (najszybsze narzędzie UML, jakie kiedykolwiek stworzono, sprawdź testy porównawcze ),
  • ma solidną obsługę importu i eksportu PHP (obsługuje również C ++, Java, Python)
  • jest wieloplatformowy (Linux, Windows, inne systemy operacyjne),
  • jest w pełni funkcjonalny, imponująco intensywnie rozwijany (spójrz na historię rozwoju , aż trudno uwierzyć, że tak szybki postęp jest możliwy).
  • obsługuje wtyczki, ma architekturę modułową (pozwala to na wkład użytkowników , wygląda na to, że tworzy się społeczność BOUML)

Benchmarki wyglądają naprawdę imponująco. Uwielbiam architekta korporacyjnego, ale nie ma wsparcia dla PHP. Przekażę to narzędzie, dzięki.
Paul Dragoonis

1
@Paul Dragoonis Sparx Systems Enterprise Architect obsługuje PHP - i to nie najgorsze .
siekiera.

5
Strona internetowa BOUML mówi teraz: „UWAGA: Z powodu ciągłych naruszeń licencji, ataków i obelg ze strony mieszkańców Wikipedii [...] zdecydowałem się przerwać prace nad Bouml, z wyjątkiem napraw błędów”.
MPV,

1
„[18 grudnia 2011 r.] Pobieranie jest zawieszone do odwołania” z ich oficjalnej strony internetowej. http://bouml.free.fr/download.html - to dlatego, że potrzebowałem wersji dla Win7. Wyobrażam sobie, że może być nadal dostępny w repozytoriach Ubuntu - trzeba to sprawdzić
Val Redchenko

4
Wersja 6.1 została wydana 23 września 2012 r . Wygląda na to, że rozwój ponownie przyspieszył. Brak powiadomienia o zwalnianiu, zatrzymywaniu itp. Bouml.fr/historic.html
Andrew Ensley

24

phUML

phUML to w pełni automatyczny generator diagramów klas UML napisany w PHP, licencjonowany na licencji BSD. Jest w stanie przeanalizować dowolny obiektowy kod źródłowy PHP5 i stworzyć odpowiednią reprezentację obrazu struktury oo w oparciu o specyfikację UML.

Przykład UML

./phuml -r /var/www/my_project -graphviz -createAssociations false -neato out.png

Przewodnik krok po kroku


wymaga SVN / subversion do pobrania i tak naprawdę nie mówi, jaka jest licencja kodu źródłowego, ale wygląda dobrze! tak, byłbym ostrożny patrząc na kod źródłowy, nie ma na nim absolutnie żadnej licencji, a jedyny

Licencja jest powiązana bezpośrednio na pasku bocznym witryny projektu, pod autorem, Creative Commons: creativecommons.org/licenses/by-nc-sa/3.0
Anthony Hatzopoulos

to jest licencja na zawartość strony, LICENCJA na projekt musi być dołączona do samego projektu.

3
Wysłałem e-mail do autora, Jakoba, a on odpowiedział aktualizacją repozytorium z wyraźną i
skróconą

Ściągnąłem to i po odrobinie majsterkowania uruchomiłem go. Było naprawdę fajne, ale nie mogę zmusić skojarzeń do działania, ale jestem pewien, że to rozgryzę. Ładny, prosty. Nie ma jednak GUI, ale nie jest to wielka sprawa.
Impulsy

19

Najlepsze oprogramowanie (Windows) do obsługi PHP i UML to Sparx Systems Enterprise Architect . poza mnóstwem funkcji obsługuje następujące funkcje dla PHP:

  • Inżynieria wsteczna zorientowanego obiektowo PHP na diagramy klas UML
  • Generuj definicje klas PHP na podstawie diagramów klas UML
  • Zsynchronizuj zmiany wprowadzone w klasie UML z odpowiednią definicją klasy PHP
  • Zsynchronizuj zmiany wprowadzone w definicji klasy PHP z odpowiednią klasą UML
  • Utwórz diagramy sekwencji UML, aby pokazać, jakich klas PHP używają i jak są używane
  • Twórz szczegółową dokumentację swojego kodu PHP w standardowym formacie RTF i HTML
  • Wykonaj inżynierię kodu na modelach, aby wygenerować podstawowe strony PHP.

nie za darmo (199 USD), ale zdecydowanie warte swojej ceny.


1
Wow, to naprawdę przydatny i profesjonalny program, dzięki za wskazówkę !! Właśnie wypróbowałem diagram klas UML generujący za pomocą metody inżynierii wstecznej Sparx EA z kodu źródłowego PHP i zadziałało to cudownie, byłem zszokowany, jak dobrze to działa. : D Ponieważ nasze projekty są coraz większe i większe, a my tworzymy coraz więcej obiektów, coraz trudniej jest mieć oko na własny kod, ale jest to bardzo pomocne, ponieważ generuje diagramy UML we właściwy sposób (np. oczywiście, może zdarzają się wyjątki) PO zakończeniu kodu. Pomaga to nawet uprościć relacje między obiektami.
Sk8erPeter,

@ax - Jestem nowicjuszem i trochę gubię się w ich liście funkcji (w sekcji „Porównaj wersje”). Jaka byłaby nazwa funkcji, która pozwala mi wprowadzić kod PHP (lub łącze do plików PHP) i otrzymać w zamian diagram? Próbuję dowiedzieć się, której wersji mogę potrzebować.
JDelage,

7

Czy próbowałeś już Autodia ? Ostatnim razem, gdy próbowałem, nie był idealny, ale był wystarczająco dobry.


Próbowałem Autodia, ale jakoś nie mogę wygenerować dokładnego diagramu klas (php5)
Jeffrey04

7

Jest też php2xmi . Musisz trochę popracować ręcznie, ale to generuje wszystkie klasy, więc wszystko, co musisz zrobić, to przeciągnąć je do diagramu klas w Umbrello .

W przeciwnym razie wygenerowanie diagramu za pomocą refleksji i graphviz jest dość proste. Mam fragment tutaj , które można wykorzystać jako punkt wyjściowy.


7

Oto jak to zrobiłem (bezpośrednio z kodu do rysunku PDF, bez ręcznego rysowania czegokolwiek):

  1. Posługiwać się BOUML do "inżynierii wstecznej kodu PHP" [sic], aby wyodrębnić model klasy (BOUML jest dostępny z repozytorium "wszechświata" Ubuntu). Poważnie polecam BOUML na tym etapie, ponieważ jest naprawdę szybki w porównaniu z wieloma innymi programami, które wypróbowałem. Ponadto wydaje się, że BOUML wydaje się poprawnie wyodrębniać model (dla części, które BOUML nawet próbuje wyodrębnić).
  2. Użyj BOUML, aby wyeksportować model jako plik XMI 1.4
  3. Użyj ArgoUML aby zaimportować wspomniany plik XMI (możesz użyć wersji webstart w tym kroku)
  4. Eksportuj XMI z ArgoUML (nie wiem, która wersja / wariant XMI jest na wyjściu, ale nie jest to ten sam wynik, co wynik z BOUML. Argouml-graphviz nie może obsłużyć pliku XMI bezpośrednio z BOUML).
  5. Użyj argouml-graphviz, aby przekonwertować wyeksportowany plik XMI ArgoUML do formatu kropkowego (może być konieczne użycie saxon zamiast xsltproc, aby działał z powodu użycia XSLT2)
  6. Zastosowanie kropki lub FDP lub sfdp aby uczynić rysunek klasy.

Oto przykład odpowiedniego wiersza poleceń do użycia fdp do wyprowadzenia diagramu PDF (zakładając, że plik kropki wygenerowany przez przetwarzanie argouml-graphviz XLST jest zapisywany jako xmi-model.dot):

fdp -Tpdf -Gmaxiter=1000 -Gmindist=0.5 -Gpackmode=node \
  -Eweight=0.05 -Elen=1.0 -Eminlen=1.0 -Gsplines=true \
  -Goverlap=false xmi-model.dot -oxmi-model.pdf

Alternatywnie możesz wypróbować PHP_UML lub php2xmi zamiast BOUML do wykonywania części „inżynierii wstecznej”. Jeszcze tego nie próbowałem.

(Używam wyrażenia „inżynieria wsteczna”, ponieważ wydaje się, że ludzie używający języka UML używają tych słów, gdy mają na myśli wyodrębnianie informacji o klasie i metodzie z kodu źródłowego . Osobiście zinterpretowałbym te słowa jako wyodrębnianie informacji z wykonywalnego pliku binarnego lub przechwyconego surowego dane przewodowe.)

Jeśli wolisz ręcznie rysować diagram klas (zamiast używać komputera do rysowania), możesz użyć do rysowania BOUML lub ArgoUML. W takim przypadku pomocne będzie użycie danych „odtworzonych” za pośrednictwem BOUML.



1

Możesz użyć Visual Paradigm dla UML. To może nie być najlepiej płatny produkt (to 699 USD), po prostu opcja, jeśli ktoś chciałby spróbować. Potrafi tworzyć diagram klas z PHP i odwrotnie, i nie tylko PHP, jest też kilka języków, które możesz wybrać, takich jak C #, C ++, Ruby, Java, VB.NET, Python, Objective C, Perl itp. próbna, którą możesz sprawdzić.


1

Teoretycznie możesz użyć PhpStorm do wizualizacji swoich klas za pomocą UML. Generacja nie jest naprawdę świetna, ale możesz skutecznie refaktoryzować rzeczy i znowu, przynajmniej w przyjemny sposób podejrzeć rodziców, implementacje, stałe, atrybuty, metody i ich widoczność.

Sytuacja

Chcę wizualizować komunikację między już istniejącymi komponentami ze współpracownikiem.

Przetwarzaj za pomocą PHPStorm

https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/

Zalety

  • Ładny interfejs użytkownika, ostateczny schemat.
  • Potrafi refaktoryzować kod z diagramu.
  • Możliwość dodawania notatek.
  • Diagram klas ładnie symbolizuje prywatne / publiczne właściwości, konstruktory, metody.

Niedogodności

  • Brak wsparcia dla PHP 7.
  • Boleśnie w użyciu. Nie można zmienić rozmiaru wygenerowanych pól.
  • Podczas dodawania nowej relacji poprzednie gubią się losowo: O wtf?
  • Ponowne uruchomienie PhpStorm niszczy diagramy
  • Zmieniłem zdanie, niemożliwe użycie relacji

Wynik

Zresztą po kilku bolesnych godzinach pracy byłem w stanie tylko wygenerować niepowiązane skrzynki i musiałem użyć dodatkowego programu do powiązania relacji. Naprawdę źle. Ale wierzę, że kiedy już sprawią, że będzie działać poprawnie, będzie to świetna funkcja, ponieważ wraz ze zmianami kodu diagramy będą automatycznie aktualizowane!

Na razie nie używaj PhpStorm do diagramów UML.


Przypuszczam, że to jest nowe (:
Jeffrey04

Poprawny. Obecnie jestem w takiej samej sytuacji. Opracowałem złożoną część systemu i chcę ją zwizualizować mojemu koledze. Wypróbowałem kilka narzędzi, ale są gówniane i brzydkie :) Zamierzam to zrobić z PHPStormem i zaktualizować swoją odpowiedź, jak to wygląda i jak naprawdę jest potężne. Dam wam dzisiaj znać wynik @ Jeffrey04
Lukas Lukac

w porządku, właściwie nie robię PHP od jakiegoś czasu
Jeffrey04

0

Cóż, jeśli mam być szczery, przede wszystkim nie powinieneś generować modelu UML z kodu, ale kod z modelu UML;).

Nawet jeśli jesteś w rzadkiej sytuacji, kiedy musisz wykonać tę inżynierię wsteczną, ogólnie sugeruje się, aby zrobić to ręcznie lub przynajmniej uporządkować diagramy, ponieważ automatycznie generowany UML ma naprawdę słaby obraz (= informacje) wartości przez większość czasu.

Jeśli potrzebujesz tylko wygenerować diagramy, prawdopodobnie dobrze jest zadać sobie pytanie, dlaczego dokładnie? Kim jest docelowa publiczność i jaki jest cel? Co ma do zaoferowania diagram generowany automatycznie, a jaki kod nie?

Zasadniczo przyjmuję tylko jedną odpowiedź na to pytanie. Po prostu stało się zbyt duże i niezrozumiałe.

Co znowu jest powodem, aby zacząć od UML w pierwszej kolejności, a nie kodować;) Nazywa się to analizą i spada, ponieważ co drugi facet w biznesie uważa, że ​​jest to trochę za drogie i niepotrzebne.


7
To prawda, ale życie jest bardziej skomplikowane niż niektóre zasady, których warto używać. Może być konieczne porównanie rzeczywistego kodu z oryginalnym diagramem UML lub przeanalizowanie czyjegoś kodu lub jakiegoś kodu, który został zaimplementowany bez diagramów UML.
DAH,

3
Nie zgadzać się. Duża wartość uzyskana dzięki wizualizacji bazy / modułu kodu z diagramem. Kod jest jak wskazówki drogowe, ale przy zbyt wielu kierunkach czasami może się przydać mapa.
Basil Musa

1
Większość programów do rysowania UML ma tak zły interfejs użytkownika, że szybsze jest pisanie kodu i automatyczne generowanie diagramu UML, nawet jeśli następnie wyrzucisz kod użyty do wygenerowania diagramu ...
Mikko Rantalainen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.