<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Szoftver_technik%C3%A1k_vizsga%2C_2005._12._21.</id>
	<title>Szoftver technikák vizsga, 2005. 12. 21. - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Szoftver_technik%C3%A1k_vizsga%2C_2005._12._21."/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Szoftver_technik%C3%A1k_vizsga,_2005._12._21.&amp;action=history"/>
	<updated>2026-05-18T06:05:23Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Szoftver_technik%C3%A1k_vizsga,_2005._12._21.&amp;diff=139774&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoszak|SzoftverTechnikakV20051221}}  &lt;style&gt; ol { margin-top: 0px; } &lt;/style&gt;  &lt;div id=&quot;feladat1&quot;&gt;&lt;/div&gt; ==1. feladat==  &#039;&#039;DLL-ek definíciója, elő…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Szoftver_technik%C3%A1k_vizsga,_2005._12._21.&amp;diff=139774&amp;oldid=prev"/>
		<updated>2012-10-22T09:45:55Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoszak|SzoftverTechnikakV20051221}}  &amp;lt;style&amp;gt; ol { margin-top: 0px; } &amp;lt;/style&amp;gt;  &amp;lt;div id=&amp;quot;feladat1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; ==1. feladat==  &amp;#039;&amp;#039;DLL-ek definíciója, elő…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoszak|SzoftverTechnikakV20051221}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt; ol { margin-top: 0px; } &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==1. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;DLL-ek definíciója, előnyei? Mi a különbség a statikus és dinamikus linkelés között?&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*DLL*: Dynamic-link library. Kódot, adatokat, erőforrásokat tartalmazó, exe-vel azonos szerkezetű file. &lt;br /&gt;
&lt;br /&gt;
Előnyei:&lt;br /&gt;
* lehetővé teszi moduláris szoftver készítését: az egyes funkciók külön fejleszthetők és tesztelhetők&lt;br /&gt;
* a file újrafelhasználható más szoftverekben =&amp;gt; winchester spórolás&lt;br /&gt;
* elég csak az éppen szükséges modulokat betölteni =&amp;gt; memória spórolás&lt;br /&gt;
* nyelvfüggetlen&lt;br /&gt;
Hátrányai (összefoglaló néven: függőségi probléma vagy &amp;amp;bdquo;dll hell&amp;amp;rdquo;)&lt;br /&gt;
* Az interfész nem változtatható&lt;br /&gt;
* Nincs szabványos verziókezelés&lt;br /&gt;
* A dll-eknek nincs szabványos helye a file rendszerben.&lt;br /&gt;
&lt;br /&gt;
*Statikus linkelés (lib)*: A könyvtár a program indításakor betöltődik (leképződik a processz címtartományára). Gyorsabb. &amp;lt;br&amp;gt;&lt;br /&gt;
*Dinamikus linkelés (dll)*: Rugalmasabb, de nagyobb az overheadje. Két fajtája van&lt;br /&gt;
# Implicit: a könyvtár stubját (egy .lib-et) hozzálinkeljük a programhoz, a dll-t a Windows tölti be a program indításakor.&lt;br /&gt;
# Explicit: futás közben, =LoadLibrary= hívással töltjük be a dll-t, és &amp;lt;pre&amp;gt;GetProcAddress&amp;lt;/pre&amp;gt;-szel kérdezzük le a használt függvények címét. A kód =FreeLibrary= hívással törölhető ki a memóriából.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==2. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;WinAPI-ban jelenítsünk meg egy négyzetet. Menüpont hatására jöjjön elő egy modális dialógusablak, amiben be lehet állítani a négyzet oldalát. Első indításkor az Edit mező 70-es értéket tartalmazzon. A kurzor billentyűk lenyomására a négyzet mozduljon el 1 pixellel a megfelelő irányba.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A teljes kód letölthető [https://wiki.sch.bme.hu/pub/Infoszak/SzoftverTechnikakV20070130/negyzet.zip innen].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Square {&lt;br /&gt;
	 int x, y, size;&lt;br /&gt;
} square;&lt;br /&gt;
&lt;br /&gt;
LRESULT CALLBACK DlgProc(HWND hwnd, UINT iMsg,&lt;br /&gt;
	 WPARAM wParam, LPARAM lParam)&lt;br /&gt;
{&lt;br /&gt;
	 char size[11];&lt;br /&gt;
&lt;br /&gt;
	 switch(iMsg) {&lt;br /&gt;
		  case WM_INITDIALOG:&lt;br /&gt;
				sprintf(size, &amp;quot;%d&amp;quot;, square.size);&lt;br /&gt;
				SetDlgItemTextA(hwnd, TEXTBOX_SIZE, size);&lt;br /&gt;
				return TRUE;&lt;br /&gt;
&lt;br /&gt;
		  case WM_COMMAND:&lt;br /&gt;
				if (wParam==IDOK) {&lt;br /&gt;
					 GetDlgItemTextA(hwnd, TEXTBOX_SIZE, size, 10);&lt;br /&gt;
					 square.size = atoi(size);&lt;br /&gt;
					 EndDialog(hwnd, 0);&lt;br /&gt;
					 return TRUE;&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
	 return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,&lt;br /&gt;
	 WPARAM wParam, LPARAM lParam)&lt;br /&gt;
{&lt;br /&gt;
	 HDC hdc;&lt;br /&gt;
	 PAINTSTRUCT ps;&lt;br /&gt;
	 RECT rect;&lt;br /&gt;
	 HBRUSH redBrush;&lt;br /&gt;
	 HPEN redPen;&lt;br /&gt;
	 int moved;&lt;br /&gt;
&lt;br /&gt;
	 switch(iMsg) {&lt;br /&gt;
		  case WM_CREATE:&lt;br /&gt;
				square.x = 0;&lt;br /&gt;
				square.y = 0;&lt;br /&gt;
				square.size = 70;&lt;br /&gt;
				return 0;&lt;br /&gt;
&lt;br /&gt;
		  case WM_COMMAND:&lt;br /&gt;
				if (wParam==MENUITEM_SETTINGS) {&lt;br /&gt;
					 DialogBox(hInst, MAKEINTRESOURCE(DIALOG_SETTINGS), hwnd, DlgProc);&lt;br /&gt;
					 InvalidateRect(hwnd, NULL, 1);&lt;br /&gt;
				}&lt;br /&gt;
				return 0;&lt;br /&gt;
&lt;br /&gt;
		  case WM_KEYDOWN:&lt;br /&gt;
				moved = 1;&lt;br /&gt;
				switch (wParam) {&lt;br /&gt;
					 case VK_LEFT: square.x--; break;&lt;br /&gt;
					 case VK_RIGHT: square.x++; break;&lt;br /&gt;
					 case VK_UP: square.y--; break;&lt;br /&gt;
					 case VK_DOWN: square.y++; break;&lt;br /&gt;
					 default: moved = 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (moved) InvalidateRect(hwnd, NULL, 1);&lt;br /&gt;
				return 0;&lt;br /&gt;
&lt;br /&gt;
		  case WM_PAINT:&lt;br /&gt;
				hdc = BeginPaint(hwnd, &amp;amp;ps);&lt;br /&gt;
				redBrush = CreateSolidBrush(RGB(255, 0, 0));&lt;br /&gt;
&lt;br /&gt;
				/*&lt;br /&gt;
				rect.left = square.x;&lt;br /&gt;
				rect.top = square.y;&lt;br /&gt;
				rect.right = square.x + square.size;&lt;br /&gt;
				rect.bottom = square.y + square.size;&lt;br /&gt;
				FillRect(hdc, &amp;amp;rect, redBrush);&lt;br /&gt;
				*/&lt;br /&gt;
&lt;br /&gt;
				// vagy&lt;br /&gt;
&lt;br /&gt;
				redPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));&lt;br /&gt;
				SelectObject(hdc, redBrush);&lt;br /&gt;
				SelectObject(hdc, redPen);&lt;br /&gt;
				Rectangle(hdc, square.x, square.y, square.x + square.size, square.y + square.size);&lt;br /&gt;
				DeleteObject(redBrush);&lt;br /&gt;
				DeleteObject(redPen);&lt;br /&gt;
&lt;br /&gt;
				EndPaint(hwnd, &amp;amp;ps);&lt;br /&gt;
				return 0;&lt;br /&gt;
&lt;br /&gt;
		  case WM_DESTROY:&lt;br /&gt;
				PostQuitMessage(0);&lt;br /&gt;
				return 0;&lt;br /&gt;
&lt;br /&gt;
		  default:&lt;br /&gt;
				return DefWindowProc(hwnd, iMsg, wParam, lParam);&lt;br /&gt;
	 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat3&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==3. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;MFC-ben milyen osztályokkal valósítják meg az MDI-os document-view architektúrát, ezek hogy érik el egymást?&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GetActiveView() +-----------+ &amp;lt;-----------------\&lt;br /&gt;
		/-------&amp;gt; |	CView	|						 | GetFirstViewPosition()&lt;br /&gt;
		|			+-----------+ ---------------\  | GetNextView()&lt;br /&gt;
		|								GetDocument() |  | UpdateAllViews()&lt;br /&gt;
		|												  |  |&lt;br /&gt;
		|												  V  |&lt;br /&gt;
+-----------+	GetActiveDocument()	+-----------+&lt;br /&gt;
| CFrameWnd | ----------------------&amp;gt; | CDocument |&lt;br /&gt;
+-----------+								 +-----------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az UpdateAllViews() minden view-ra meghívja az =OnUpdate= eseménykezelőt, amiben paraméterként átad egy referenciát a módosítást végző view-ra. Az MDI működését az Observer tervezési minta írja le.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			  +------------+		  +---------+		  +---------+&lt;br /&gt;
			  | MyDocument |		  |  View1  |		  |  View2  |&lt;br /&gt;
			  +------------+		  +---------+		  +---------+&lt;br /&gt;
					  |						  |						|&lt;br /&gt;
					  |						  |	 user			 |&lt;br /&gt;
					  |		SetData()	  &amp;amp;#9632; &amp;lt;--------		  |&lt;br /&gt;
				x=2  &amp;amp;#9632; &amp;lt;----------------- &amp;amp;#9632;						|&lt;br /&gt;
			  /---- &amp;amp;#9632;						  |						|&lt;br /&gt;
			  \---&amp;gt; &amp;amp;#9632;						  |						|&lt;br /&gt;
					  &amp;amp;#9632;						  |						|&lt;br /&gt;
UpdateAllViews() &amp;amp;#9632;						  |						|&lt;br /&gt;
  /------------- &amp;amp;#9632;						  |						|&lt;br /&gt;
  \------------&amp;gt; &amp;amp;#9632;	  OnUpdate()	  |						|&lt;br /&gt;
					  &amp;amp;#9632; -----------------&amp;gt; &amp;amp;#9632;						|&lt;br /&gt;
					  &amp;amp;#9632;		 GetData()	 &amp;amp;#9632;						|&lt;br /&gt;
					  &amp;amp;#9632; &amp;amp;#9632; &amp;lt;--------------- &amp;amp;#9632;						|&lt;br /&gt;
					  &amp;amp;#9632; &amp;amp;#9632;						&amp;amp;#9632;						|&lt;br /&gt;
					  &amp;amp;#9632;					OnUpdate()				  |&lt;br /&gt;
					  &amp;amp;#9632; ------------------------------------&amp;gt; &amp;amp;#9632;&lt;br /&gt;
					  |					 GetData()				  &amp;amp;#9632;&lt;br /&gt;
					  | &amp;amp;#9632; &amp;lt;---------------------------------- &amp;amp;#9632;&lt;br /&gt;
					  | &amp;amp;#9632;						|						&amp;amp;#9632;&lt;br /&gt;
					  |						  |						|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==4. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt;Milyen életciklus modellt választanál egy 2-3 hónapos projekthez, amit már csinált a csapat?&amp;lt;br&amp;gt;&lt;br /&gt;
Mit jelent a Unified Process? Fázisai?&amp;lt;br&amp;gt;&lt;br /&gt;
Mit jelent az iteratív fejlesztés? Magyarázd el az UP példáján.&amp;lt;br&amp;gt;&lt;br /&gt;
Mik az egyes fázisok végtermékei?&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat5&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==5. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Composite tervezési minta mire jó, mikor használják, class diagram, osztályok szerepe?&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat6&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==6. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Hogyan néz ki egy use case diagram? Mik az elemei?&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A use case diagram egy projekt üzleti modelljét írja le. Legegyszerűbb esetben egy páros gráf az aktorok és a rendszer funkciói között. Bonyolultabb esetben a funkciók szétbonthatók hierarchikusan kisebb funkciókra.&lt;br /&gt;
&lt;br /&gt;
A funkciók működése forgatókönyvekkel írható le. A főforgatókönyv a hibamentes esetben végrehajtandó lépéseket sorolja fel. A kiegészítő forgatókönyv definiálja, hogy a főforgatókönyvben melyik lépésben milyen hibák léphetnek fel, és megmondja, hogy mi a teendő a bekövetkezésük esetén. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat7&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==7. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;KDE-ben készítsünk egy view-t, ami lekérdezi a dokumentumtól egy téglalap adatait, és kettős puffereléssel megjeleníti.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[SzoftverTechnikakV20041223#feladat7|Megoldás]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;feladat8&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==8. feladat==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Tesztelés típusai + magyarázat&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Formális teszt: párhuzamosan fut a szoftver tervezése és tesztelése&lt;br /&gt;
** (+) ismert a forgatókönyv&lt;br /&gt;
** (+) ismert az elfogadási kritérium&lt;br /&gt;
** (+) automatizálható&lt;br /&gt;
** (-) sok tervezési igényel&lt;br /&gt;
** (-) nem térhetünk ki mindenre (időbeli és pénzbeli korlátok miatt)&lt;br /&gt;
* Informális teszt&lt;br /&gt;
** (+) olcsó&lt;br /&gt;
** (+) random módon történik&lt;br /&gt;
** (-) alap forgatókönyvek kieshetnek&lt;br /&gt;
** (-) szoftver tervvel nincs összhangban a tesztelési terv&lt;br /&gt;
* Béta teszt&lt;br /&gt;
** (+) sok felhasználó csinálja&lt;br /&gt;
** (+) ingyen van&lt;br /&gt;
** (-) known bugs az azonnali javítás helyett&lt;br /&gt;
* FAT (Factory Acceptance Test)&lt;br /&gt;
	  Átadás előtti teszt a vevő bevonásával, valós környezetben.&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2007.06.13.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoszak]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>