<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass
  [
    math-font    = STIX Two Math, agreed,
    CJKmain-font = { {Songti SC}[AutoFakeSlant] },
    CJKsans-font = { {STHeiti}[AutoFakeBold = 2] }
  ] {hduthesis}

\tikzset{ &gt; = stealth }
\usetikzlibrary{positioning,shapes.geometric}

\DocInfo
  {
    title      = åŸºäºŽ \hologo{LaTeX3} å¼€å‘çš„
                 æ­å·žç”µå­ç§‘æŠ€å¤§å­¦ç¡•å£«å­¦ä½è®ºæ–‡ \hologo{LaTeX} æ¨¡æ¿/
                 \hologo{LaTeX} Template for Master's Thesis at Hangzhou Dianzi University that was Developed Based on \hologo{LaTeX3},
    major      = å‡èšæ€ç‰©ç†,
    stdntid    = C668668E0,
    author     = ç”³æ™ºèƒ½/SAN Chi Nan,
    supervisor = æ•™æŽˆ:è‘‰èŠ·æ™´/Prof.:YIP Tsz Ching,
    % bibsource  = reference
  }

\begin{document}

\maketitle
\commitment
  [
    example-image-a/2025-05-31, example-image-a/2025-05-31,
    example-image-b/2025-06-01
  ]

\begin{abstract}[cn]

  è®¾è®¡æ¨¡å¼è¢«å¹¿æ³›ç”¨äºŽè§£å†³è½¯ä»¶è®¾è®¡å’Œå¼€å‘è¿‡ç¨‹ä¸­åå¤å‡ºçŽ°çš„è®¾è®¡é—®é¢˜ã€‚è®¾è®¡æ¨¡å¼åœ¨è½¯ä»¶æºç&nbsp;ä¸­çš„ä½¿ç”¨ä¿¡æ¯ï¼ˆå³è®¾è®¡æ¨¡å¼å®žä¾‹ï¼‰èƒ½å¤Ÿåœ¨è¾ƒå¤§ç¨‹åº¦ä¸Šåæ˜&nbsp;è½¯ä»¶ç³»ç»Ÿçš„è®¾è®¡æ€è·¯ã€‚å‡†ç¡®åœ°ä»Žè½¯ä»¶æºç&nbsp;ä¸­è¯†åˆ«å’ŒæŒ–æŽ˜è®¾è®¡æ¨¡å¼å®žä¾‹èƒ½å¤Ÿå¸®åŠ©è½¯ä»¶å¼€å‘å’Œç»´æŠ¤äººå‘˜å¿«é€Ÿç†è§£è½¯ä»¶ç³»ç»Ÿçš„åŽŸå§‹è®¾è®¡å’Œå®žçŽ°ï¼Œä»Žè€Œå¯¹è½¯ä»¶ç³»ç»Ÿçš„ç»´æŠ¤ã€å‡çº§
  æ›´æ–°å’ŒäºŒæ¬¡å¼€å‘ç­‰å·¥ä½œæä¾›æ–¹ä¾¿ã€‚

  è¿‘äº›å¹´æ¥è½¯ä»¶å·¥ç¨‹é¢†åŸŸæå‡ºäº†å¤šç§è‡ªåŠ¨åŒ–æˆ–åŠè‡ªåŠ¨åŒ–åœ°æŒ–æŽ˜è®¾è®¡æ¨¡å¼å®žä¾‹çš„æ–¹æ³•ã€‚å…¶ä¸­éƒ¨åˆ†æ–¹æ³•å°†è®¾è®¡æ¨¡å¼å’Œè½¯ä»¶æºç&nbsp;è½¬åŒ–ä¸ºæŸç§ç‰¹å®šçš„å›¾çš„å½¢å¼ï¼Œç„¶åŽé€šè¿‡æŒ–æŽ˜åŒæž„å­å›¾çš„æ–¹å¼æŒ–æŽ˜è®¾è®¡æ¨¡å¼å®žä¾‹ã€‚ç„¶è€Œï¼Œç”±äºŽåŒæž„å­å›¾æŒ–æŽ˜é—®é¢˜æ˜¯ä¸€ä¸ªNPå®Œå…¨é—®é¢˜ï¼Œè¿™äº›æ–¹æ³•çš„æ‰§è¡Œæ•ˆçŽ‡é€šå¸¸è¾ƒä½Žã€‚
  
  ä¸ºäº†æœ‰æ•ˆè§£å†³åŸºäºŽå­å›¾åŒæž„çš„è®¾è®¡æ¨¡å¼æŒ–æŽ˜æ–¹æ³•çš„æ•ˆçŽ‡ä½Žä¸‹é—®é¢˜ï¼Œæœ¬æ–‡æå‡ºäº†ä¸€ç§é«˜æ•ˆçš„åŸºäºŽå¿«é€Ÿæœç´¢åºåˆ—å’Œè¡Œä¸ºæ¨¡æ¿çš„ç»“æž„åž‹è®¾è®¡æ¨¡å¼æŒ–æŽ˜æ–¹æ³•ã€‚è¯¥æ–¹æ³•é¦–å…ˆå°†è®¾è®¡æ¨¡å¼å’Œè½¯ä»¶æºç&nbsp;è½¬åŒ–ä¸ºä¸€ç§å¸¦æƒæœ‰å‘å›¾ï¼Œå³ç±»å…³ç³»å›¾ï¼Œç„¶åŽä»Žè½¯ä»¶æºç&nbsp;çš„ç±»å…³ç³»å›¾ä¸­æ‰¾å‡ºæ‰€æœ‰ä¸Žè®¾è®¡æ¨¡å¼çš„ç±»å…³ç³»å›¾ç›¸åŒæž„çš„å­å›¾ï¼Œæ¯ä¸ªå­å›¾çš„é¡¶ç‚¹æ‰€è¡¨ç¤ºçš„ç±»ç»„æˆäº†ä¸€ä¸ªå€™é€‰è®¾è®¡æ¨¡å¼å®žä¾‹ã€‚åœ¨æŒ–æŽ˜è¿‡ç¨‹ä¸­ï¼Œæœ¬æ–‡æ–¹æ³•ä¸ºæ¯ç§è®¾è®¡æ¨¡å¼æž„å»ºäº†ä¸€ä¸ªå¿«é€Ÿæœç´¢åºåˆ—ï¼Œè¯¥å¿«é€Ÿæœç´¢åºåˆ—æè¿°äº†è®¾è®¡æ¨¡å¼çš„ç»“æž„ä¿¡æ¯å¹¶æŒ‡å®šäº†ä¸€ä¸ªé«˜æ•ˆçš„æœç´¢è®¾è®¡æ¨¡å¼è§’è‰²çš„æ¬¡åºï¼Œä»Žè€Œå¤§å¤§å‡å°‘äº†æŒ–æŽ˜è¿‡ç¨‹çš„æœç´¢ç©ºé—´ã€‚æ­¤å¤–ï¼Œæœ¬æ–‡ä¸ºæ¯ç§è®¾è®¡æ¨¡å¼åˆ¶å®šäº†ä¸€ä¸ªç‰¹å®šçš„è¡Œä¸ºæ¨¡æ¿ï¼Œç”¨äºŽè¿‡æ»¤å€™é€‰å®žä¾‹é›†åˆä¸­ä¸æ»¡è¶³è¡Œä¸ºç‰¹å¾çš„é”™è¯¯å®žä¾‹ï¼Œè¿›ä¸€æ­¥æé«˜äº†æœ¬æ–‡æ–¹æ³•çš„å‡†ç¡®çŽ‡ã€‚æœ€åŽï¼Œæœ¬æ–‡é€‰å–4ä¸ªå¸¸ç”¨çš„å¼€æºè½¯ä»¶ç³»ç»Ÿè¿›è¡ŒéªŒè¯å®žéªŒã€‚å®žéªŒç»“æžœè¡¨æ˜Žï¼Œé’ˆå¯¹æœ¬æ–‡åˆ¶å®šçš„ç»“æžœåŸºå‡†ï¼Œè¯¥æ–¹æ³•ä¸ä»…èƒ½å¤Ÿè¾¾åˆ°100\%çš„å¬å›žçŽ‡å’Œç›¸å¯¹è¾ƒé«˜çš„å‡†ç¡®çŽ‡å’ŒF-measureå€¼ï¼Œè€Œä¸”æ˜¾è‘—æé«˜äº†æ‰§è¡Œæ•ˆçŽ‡ã€‚

  \keywords{è®¾è®¡æ¨¡å¼, è®¾è®¡æ¨¡å¼æŒ–æŽ˜, å¿«é€Ÿæœç´¢åºåˆ—, è¡Œä¸ºæ¨¡æ¿, å­å›¾åŒæž„}
\end{abstract}

\begin{abstract}[en]

  \setstretch{1.3}
  Design patterns are widely used to address the recurring design problems during the process of software design and development. The information about design patterns used in software source code-design pattern instances reveal much about the high-level abstract design ideas. Accurately identifying and detecting design pattern instances in a software system can help developers and maintainers to understand its original design and implementation, facilitating maintenance, update and re-development.

  In recent years, many approaches have been proposed to automatically or semi-automatically detecting design pattern instances from software source code. Among these approaches, some approaches transform software source code and design patterns into certain graphs, and then exploit subgraph isomorphism techniques to detect design pattern instances. However, as mining isomorphic subgraphs is an NP-complete problem, those approaches usually fail to achieve satisfactory efficiency.
  
  In order to effectively solve the inefficiency of the approaches which are based on subgraph isomorphism, we propose an efficient approach to detect structural design pattern instances based on quick-search sequences and behavior templates. In the proposed approach, we transform software source code and design patterns into a certain form of weighted and directed graph namely Class Relationship Graph, and then detect all the subgraphs from the source code graph which are isomorphic to the Class Relationship Graph of a certain design pattern. The classes that each isomorphic subgraph's vertices represent then consist of a candidate instance. During the process of detecting design pattern instances, we construct a quick-search sequence for each design pattern, which describes the structural characteristics of design pattern and specify an order to efficiently search the roles of each design pattern. According to the quick-search sequence, we can greatly reduce the search space. Afterwards, we construct a specific behavior template, which is used to filter the false positives in the candidate instance set and further improve the processing efficiency. Finally, we exploit our approach on four well-known open-source software systems. The results demonstrate that our approach not only achieves nearly 100\% recall and relatively high precision and F-measure on the benchmark we construct, but also significantly.
  
  \keywords
    {
      Design Pattern, Design Pattern Detection, Quick-Search Sequence,
      Behavior Template, Sub-graph Isomorphism
    }
\end{abstract}

\tableofcontents

\chapter{ç»ªè®º}

\section{ç&nbsp;”ç©¶èƒŒæ™¯ä¸Žæ„ä¹‰}

éšç€ä¿¡æ¯æŠ€æœ¯çš„é£žé€Ÿå‘å±•å’Œå¹¿æ³›åº”ç”¨ï¼Œå„è¡Œå„ä¸šéƒ½ç§¯ç´¯äº†å¤§é‡çš„è½¯ä»¶ç³»ç»Ÿã€‚

\section{å›½å†…å¤–ç&nbsp;”ç©¶çŽ°çŠ¶}

è®¾è®¡æ¨¡å¼æŒ–æŽ˜çš„ç›¸å…³ç&nbsp;”ç©¶å·¥ä½œä¼´éšç€è®¾è®¡æ¨¡å¼åœ¨è½¯ä»¶å·¥ç¨‹é¢†åŸŸçš„æå‡ºè€Œåº”è¿è€Œç”Ÿï¼Œå¹¶å¾—åˆ°äº†å¹¿æ³›çš„å…³æ³¨å’Œç&nbsp;”ç©¶ã€‚æ­£å¦‚ Apostolos Ampatzoglou çš„æè¿°ï¼Œå…³äºŽæŒ–æŽ˜è½¯ä»¶æºç&nbsp;ä¸­è®¾è®¡æ¨¡å¼å®žä¾‹çš„ç&nbsp;”ç©¶æ˜¯è®¾è®¡æ¨¡å¼ç›¸å…³çš„æ‰€æœ‰ç&nbsp;”ç©¶å·¥ä½œä¸­æœ€å—å…³æ³¨çš„ä¸€é¡¹ç&nbsp;”ç©¶è¯¾é¢˜ã€‚

\subsection{ç»“æž„åˆ†æž}

ç»“æž„åˆ†æžæ–¹æ³•æ˜¯æœ€å¸¸è§çš„æŒ–æŽ˜è®¾è®¡æ¨¡å¼å®žä¾‹çš„æ–¹æ³•ã€‚

\end{document}
</pre></body></html>