반응형

개발 도구

  1. Eclipse : http://www.eclipse.org/
  2. Netbean : http://www.netbeans.org/community/releases/60/index.html
  3. Firebug : http://www.getfirebug.com/

소스코드 관리

  1. CVS : http://www.cvshome.org
  2. Subversion : http://subversion.tigris.org
  3. MS Visual SourceSafe
  4. BitKeeper : http://www.bitkeeper.com
  5. ClearCase : http://www-306.ibm.com/software/awdtools/clearcase/

빌드 스크립트 도구

  1. make : http://source.redhat.com/cygwin
  2. Automake : http://www.gnu.org/software/automake
  3. Ant : http://ant.apache.org
  4. NAnt : http://nant.sourceforge.net
  5. Groovy : http://groovy.codehaus.org
  6. Rake : http://rake.rubyforge.org/  
  7. SCons : http://www.scons.org/

빌드 시스템

  1. Mavenhttp://maven.apache.org 
  2. Maven2 : http://maven.apache.org/maven2/index.html

CI 도구 (Continuous integration )

  1. CruiseControl : http://cruisecontrol.sourceforge.net
  2. CruiseControl .NET : http://sourceforge.net/projects/ccnet
  3. DamageControl : http://damagecontrol.codehaus.org
  4. AntHill : http://www.urbancode.com/projects/anthill
  5. Continuum : http://maven.apache.org/continuum
  6. LuntBuild : http://luntbuild.javaforge.com/  
  7. Buildix : http://buildix.thoughtworks.com/  
  8. Hudson : https://hudson.dev.java.net/  (직관적이고 사용법이 쉬움)

이슈 추적 도구

  1. Bugzilla : http://www.bugzilla.org
  2. JIRA : http://www.atlassian.com/software/jira/default.jsp
  3. FogBugz : http://www.fogcreek.com/FogBugz
  4. PR-Tracker : http://www.prtracker.com  
  5. Trac : http://trac.edgewall.org/

테스트 프레임워크

  1. JUnit : http://www.junit.org
  2. NUnit : http://www.nunit.org
  3. xUnit.NET : http://www.codeplex.com/xunit
  4. MbUnit : http://www.mbunit.org
  5. HTMLUnit : http://htmlunit.sourceforge.net
  6. HTTPUnit : http://httpunit.sourceforge.net
  7. JWebUnit : http://jwebunit.sourceforge.net
  8. Cobertura : http://cobertura.sourceforge.net
  9. Clover : http://www.cenqua.com/clover  
  10. Cactus : http://jakarta.apache.org/cactus/
  11. Emma : http://emma.sourceforge.net/
  12. Fit : http://fit.c2.com
  13. Fitness : http://fitnesse.org  
  14. Watir : http://wtr.rubyforge.org
  15. Systir : http://atomicobject.com/systir.page
  16. AUT : http://aut.tigris.org/
  17. UnitTest++ : http://unittest-cpp.sourceforge.net/  
  18. TestNG : http://testng.org/doc/  
  19. CppUnit : http://sourceforge.net/projects/cppunit  
  20. CppUnit2 : http://cppunit.sourceforge.net/cppunit-wiki/CppUnit2  
  21. Selenium : http://www.openqa.org/
  22. Agitar : http://www.agitar.com/  
  23. JTest : http://www.parasoft.com/jsp/home.jsp  
  24. PushToSoft : http://www.pushtotest.com/  
  25. Eclemma : http://www.eclemma.org/

프로젝트 관리

  1. OpenProj : http://openproj.org/openproj 
  2. dotproject : http://www.dotproject.net/
  3. Mantis : http://www.mantisbt.org/

커뮤니케이션 도구, 위키

  1. MoinMoin : http://moinmoin.wikiwikiweb.de/
  2. Confluence : http://www.atlassian.com/software/confluence/
  3. TWiki : http://twiki.org/
  4. SocialText : http://www.socialtext.com/  
  5. Springnote : http://www.springnote.com/ko

성능분석

  1. ANTS Load : http://www.red-gate.com/products/ants_load/index.htm  
  2. JunitPerf : http://www.clarkware.com/software/JUnitPerf.html  
  3. Jmeter : http://jakarta.apache.org/jmeter/

기타

  1. Structure101 : http://www.headwaysoftware.com/index.php  
  2. FreeMind : http://freemind.sourceforge.net/wiki/index.php/Main_Page  
  3. Capistrano : http://manuals.rubyonrails.com/read/book/17


 

출처 :   개발이 좋아 개발자가된 많은 사람들에게 말하고 싶은 이야기. by k16wire
           http://moai.tistory.com/notice/270 

반응형

[edit] Open-source products

  • Bandera — analyser for Java
  • Checkstyle — analyse Java and apply coding standard
  • ClassCycle — analyse Java class cycles and class and package dependencies (Layers)
  • CQual — A tool for adding type qualifiers in C
  • FindBugs — an open-source static bytecode analyzer for Java (based on Jakarta BCEL).
  • Flawfinder — open source programming tool that examines C or C++ source code for security weaknesses.
  • Jlint — for Java
  • JsLint - online analyzer for JavaScript
  • Oink — collaboration of C++ static analysis tools
  • Perl::Critic - a static code analysis tool for Perl
  • Pixy — a PHP 4 source code scanner for detection of XSS and SQL injection vulnerabilities.
  • PMD (software) — a static ruleset based Java source code analyzer that identifies potential problems.
  • PyChecker - The original static code analyser for Python.
  • pylint - A static code analyser for Python. Works as a plugin to PyDev for the Eclipse IDE.
  • RATS — Rough Auditing Tool for Security, which can scan C, C++, Perl, PHP and Python source code.
  • Soot — A Java program analysis and compiler optimization framework
  • Sparse — a tool designed to find faults in the Linux kernel.
  • Splint — an open source evolved version of Lint (C language).

[edit] Commercial products

  • Aivosto Oy's - Project Analyzer - Static code analysis tool for VBA, and VB6/VB.net
  • Armorize Technologies CodeSecure - source code scanning (PHP, J2EE, ASP, etc.)
  • Axivion Bauhaus Suite — a tool for C, C++, Java and Ada code that comprises various analyses such as architecture checking, interface analyses, and clone detection.
  • checKing - monitors the quality of software development process, including violations of coding rules for Java, JSP, Javascript, XML and HTML.
  • Checkmarx CxSuite - a suite of software which helps developers and auditors identify software security vulnerabilities. Company homepage (http://www.checkmarx.com)
  • ClockSharp - checks C# code against the Philips C# coding standard.
  • Compuware DevPartner - static code analyzer for .NET (C#, ASP.NET) with Visual Studio 2005 integration
  • Coverity Prevent — analyzes C, C++ and Java code.
  • DMS Software Reengineering Toolkit — supports custom analysis of C, C++, Java, COBOL, and many other languages.
  • Fortify — helps developers identify software security vulnerabilities in C/C++, Java, JSP, Javascript, ASP.NET, C#, VB.NET, PHP, "Classic" ASP, VB, PL/SQL, T-SQL, XML and other languages.
  • FxCop — static analysis for Microsoft .NET programs based on IL. Standalone and integrated in some Microsoft Visual Studio editions. From Microsoft.
  • Green Hills Software DoubleCheck - static analysis for C and C++ code.
  • HP Code Advisor - A static analysis tool for C and C++ programs
  • Intel Compiler Suite — The Intel compilers Intel C++ Compiler and Intel_Fortran_Compiler both offer static analysis.
  • IntelliJ IDEA — IDE for Java that also provides static code analysis.
  • Klocwork K7 — provides security vulnerability and defect detection as well as architectural and build-over-build trend analysis for C, C++ and Java
  • Lattix, Inc. LDM - Architecture and dependency analysis tool for Ada, C/C++, Java, .NET software systems.
  • LDRA Testbed - A software analysis and testing tool suite for C, C++, Ada83, Ada95 and Assembler (Intel, Freescale, Texas Instruments).
  • M Squared Technologies Resource Standard Metrics - source code analysis and metrics (Java, Javascript, etc.)
  • Microsoft Visual Studio - Visual Studio Team System includes a static code analyzer.
  • MZTools - MZTools 3.0 - Free Static Code Analysis, productivity enhancement tool for VBA.
  • NStatic - deep static analysis of C# code.
  • Ounce Labs — automated source code analysis that enables organizations to identify and eliminate software security vulnerabilities in languages including Java, JSP, C/C++, C#, ASP.NET, and VB.Net.
  • Parasoft - static code analysis and security testing tools for Java, C, C++, C#, .Net, HTML, CSS, JavaScript, VSscript.
  • PC-Lint - A multiplatform static code analysis tool by Gimpel Software for C and C++. Also available for the GNU/Linux and Unix operating systems in the form of FlexeLint.
  • PolySpaceTM code verifiers by The MathWorks - Software verification for C, C++ and Ada
  • QA-C - deep static analysis of C for quality assurance and guideline enforcement.
  • ReSharper - Add-on for Visual Studio 2003/2005 from the creators of IntelliJ IDEA, which also provides static code analysis for C#.
  • SemmleCode — object oriented code queries for static program analysis.
  • SofCheck Inspector — provides static detection of logic errors, race conditions, and redundant code for Java and Ada.
  • Sotoarc/Sotograph - Architecture and quality in-depth analysis and monitoring for Java, C#, C and C++
  • STAN — Structure Analysis for Java. Eclipse integrated visual dependency analysis, quality metrics and reporting.
  • Swat4j — a model based, goal oriented source code auditing tool for Java. Comes as an Eclipse plug-in.
  • Telelogic Logiscope RuleChecker (coding standards checking) and Audit (metrics measurement and ISO 9126-based quality modeling) for C, C++, Ada, Java.
  • TorqueWrench - A static Java bytecode analysis tool by StackFrame, LLC.
  • Understand — analyzes C,C++, Java, Ada, Fortran, Jovial, Delphi — reverse engineering of source, code navigation, and metrics tool.
  • Viva64 — analyzes C, C++ code for detect 64-bit portability issues.
  • Veracode SecurityReview — an outsourced application security testing and remediation, C, C++, Java, .Net and other languages.
  • CodePro Analytix - Static code analysis for Java, integrated with Eclipse.
  • Sparrow - C/C++ memory-bug detecting static analyzer.

반응형
1900 Drag & Drop의 구현

스윙에서의 Drag & Drop 을 구현해 보자. 과정이 꽤 복잡하고 기능상에 약간의 제약은 있으나 한번 구현해 볼 만한 예제라고 생각을 한다. 소스코드는 자바소프트에서 발췌했음을 알아두길 바란다. 중간중간에 풍선도움말을 두겠으니 단풍잎에 마우스를 갖다대면 도움말이 뜨니 참고하길 바란다.

Drag & Drop step
Drag & Drop 을 구현하는 것은 비교적 쉽다. 그렇지만 가장 난해한 것은 모든 과정에 대해서 이해하는 것이다. 다음의 순서를 먼저 익혀두길 바란다.     [ DnD Source Download]

1. Drag source 에 대한 참조를 가진다. - DragSource.getDefaultSource() 나 new DragSource() 를 통해서.
2. Drag gesture recognizer 를 생성한다. - DragSource.createDafaultGestureRecognizer()
3. Drop target 를 생성한다. - 하나의 컴포넌트와 Drop target listener 를 명세한다.
4. Transferable 로 옮겨질 수 있는 데이타를 wrap 한다.
5. Drag 를 초기화한다. - DragSource.startDrag()
6. DropTargetLisenter, DragSource 인터페이스를 구현함으로써 Drop 를 핸들링한다.

Drag & Drop (이하 D&D) 는 하나의 datasource 와 여러개의 droptarget 에 - 흔히 콤포넌트와 연관되어져 있다 - 와 연관되어 이뤄진다. 다음에 나열된 클래스와 인터페이스는 D&D 에서 사용되는 것을 정리한 것이다. 대부분의 것들은 java.awt.dnd 패키지에 있고, 오직 하나 Transferable 은 java.awt.datatransfer 패키지에 있다.

DragGestureRecognizer : 컴포넌트에서 drag 를 수행할려고 할때 이벤트를 발사한다.
DragSource : Drag 와 DragGestureRecognizer 를 초기화한다.
DropTarget : 연관된 컴포넌트 상에서 Drop 이 일어난다.
Transferable ; D&D 를 통해서 전송되어지는 데이타를 위한 Wrapper 이다.
DragGestureListener : DragGestureRecognizer 에 의해 통보를 받고 drag 를 초기화한다.
DragSourceListener : DragSource 이벤트에 반응한다.
DropTargetListener : Drop 포함한 target 이벤트를 핸들링한다.

D&D 는 하나의 기미(Gesture) 즉, 마우스를 내려서 드래깅을 시도할때 초기화된다. 그러면 DragGestureRecognizer 는 이런 기미를 포착하고 이벤트를 발생하는 것이다.
DragSource 는 startDrag() 메소드로 초기화작업을 수행하고, createDragGestureRecognizer() 나 createDafaultDragGestureRecognizer() 를 이용하여 DragGestureRecognizer 를 생성하게 되는 것이다.
DropTarget 은 하나의 컴포넌트와 Listener 객체와 연관되어 있어서 drop target event 가 발생할때 listener 객체가 통보를 받게 된다.
DragGestureListener 는 recognizer 에 의해 drag gesture 를 통보받는데 전형적인 반응예는 DragSource.startDrag() 메소들르 호출하게 되었을 경우이다.
DragSourceListener 는 drag 가 초기화된 후 dragsource 에서 일어나게 된다.

다소 나열적인 설명이었지만 어느 정도 감을 잡기 위해서 중복 설명했다. D&D 하는 과정과 메소드호출, 클래스와 인터페이스의 API 를 꼼꼼하게 살펴보면 이해할 수 있으리라 생각한다. 가장 기본적인 D&D 를 하기 위해서는 반드시 DragSource, DropTarget, DragGestureRecognizer, Transferable 이 반드시 생성이 되어야 하고, Listener 가 구현되어야 한다는 것을 명심하길 바란다. 그러나 실제 구현은 몇가지 객체를 생성하고 데이타를 Wrapping 하고 핸들링하는 것을 빼면 나머지 동작은 프로그래머 재량에 상관없이 자체적으로 구현이 된다.
Adding D&D to Swing Component
여기서도 두가지 방법이 있을 수가 있는데 한가지 방법으로는 Swing Component 를 상속해 객체를 만들어 그것을 DragSource, DropTarget 으로 만들어 사용하는 방법과 제 3의 콤포넌트를 생성해 두가지를 수행하는 방법이 있다.
첫번째 방법으로 수행을 하면 반드시 객체만이 D&D 특성을 가질수가 있고, 표준 Component 는 그런 특성을 공유할 수 없음을 명심하길 바란다. 가령 JList 를 상속한 ListDragSource 객체를 만들어서 D&D 를 추가해 사용한다면 ListDragSource 만이 그런 동작을 할 수 있다는 것을 의미한다.

아래에 있는 그림은 이 프로그램을 실행시켰을때 볼 수 있는 화면이다. 왼쪽은 DragSource 로 JTree 를 이용해 구현했고, 오른쪽은 DropTarget 은 JTextPane 을 이용해 구현했음을 보길 바란다. 이것은 .txt 와 .java 로만 한정되어 있기 때문에 다른 확장자를 가진 파일을 D&D 했을 경우에는 에러창을 발견하게 될 것이다. 그리고 .txt 와 .java 파일은 그 내용을 JTextPane 에서 볼 수 있을 것이다.

 

오른쪽의 파일을 D&D 수행할 수가 있다

 

확장자가 .txt 와 .java 가 아닐 경우에 볼 수 있는 경고창이다.


위의 프로그램은 얼마든지 응용해서 확장할 수 있다고 생각한다. 다른 파일도 볼 수 있게끔 할 수 있고, image 도 가능하리라 생각한다.
다음 장에서는 소스코드 분석에 들어가도록 하겠다. 먼저 해당 API 를 꼼꼼히 살펴본 다음에 코드분석에 임하길 바란다.
  
Source Analysis
Test.java 소스이다. main() 와 기본 인터페이스가 설정돼 있다. 아래의 코드를 살펴보면 알겠지만
Test 생성자는 drop target 을 생성해낸다.
 즉 TextPane 을 drop target component 로 생성하는 것이다.
실제 drop 이 일어났을때 Test.drop() 메소드가 호출이 된다. drop 과 연관된 transferable 은
 String 으로써 데이타를 제공해주며 drop 을 받아들인 후에 readFile() 메소드가 호출이 돼
 file 의 내용을 TextPane 으로 로딩을 하게 된다.
Drop 이 완료된 후 e.dropComplete(true) 가 호출이 돼 실제 drop 이 완료되게 된다.
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;

public class Test extends JFrame implements DropTargetListener {
	private JTextPane textPane = new JTextPane();

	public Test() {
                   super("Drag and Drop With Swing");
                   new DropTarget(textPane,DnDConstants.ACTION_COPY_OR_MOVE,this);
	   JSplitPane splitPane =
                      new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,createTreePanel(),createTextPanel());
	   splitPane.setDividerLocation(250);	
	   splitPane.setOneTouchExpandable(true);
	   getContentPane().add(splitPane, BorderLayout.CENTER);
	}
	public static void main(String args[]) {
	  Test test = new Test();
	  test.setBounds(300,300,850,350);
	  test.setVisible(true);
	  test.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	  test.addWindowListener(new WindowAdapter() {
	  public void windowClosed(WindowEvent e) {
                        System.exit(0);
	    }
	  });
	}
	private JPanel createTreePanel() {
	  JPanel treePanel = new JPanel();
	  DragTree tree = new DragTree();
	  treePanel.setLayout(new BorderLayout());
	  treePanel.add(new JScrollPane(tree), BorderLayout.CENTER); 
	  treePanel.setBorder(BorderFactory.createTitledBorder(
		"Drag source for filenames"));
        	return treePanel;
	}
	private JPanel createTextPanel() {
	  JPanel textPanel = new JPanel();
	  textPanel.setLayout(new BorderLayout());
	  textPanel.add(new JScrollPane(textPane),BorderLayout.CENTER);
	  textPanel.setMinimumSize(new Dimension(375,0));
	  textPanel.setBorder(BorderFactory.createTitledBorder(
	    "Drop target for filenames"));

	  return textPanel;
	}
	private void readFile(final String filename) {
	  EditorKit kit = textPane.getEditorKit();
	  Document document = textPane.getDocument();

          try {
	    document.remove(0,document.getLength());
	    kit.read(new FileReader(filename), document, 0); 
	  }
	  catch(Exception ex) {
	    ex.printStackTrace();
	  }
	}
        
	public void drop(DropTargetDropEvent e) {
	  try {
	   DataFlavor stringFlavor = DataFlavor.stringFlavor;
	   Transferable tr = e.getTransferable();
 public class DataFlavor extends Object implements Externalizable, Cloneable
 
 이 클래스는 D&D 수행할 때 클립보드에 들어가는 데이타의 형태를 제공해주는 클래스이다.
 여기서 사용된 StringFlavor 는 java Unicode String class 을 나타낸다.
 MimeType = "application/x-java-serialized-object" 을 나타내게 된다.
if(e.isDataFlavorSupported(stringFlavor)) { String filename = (String)tr.getTransferData(stringFlavor); e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); // 인자로 넘어온 액션으로 drop 을 받아들인다. readFile(filename); textPane.setCaretPosition(0); // Text 의 첫줄이 TextPane 의 첫줄에 오게끔 설정한다. e.dropComplete(true); } else { e.rejectDrop(); // Drop 을 거절한다. } } catch(IOException ioe) { ioe.printStackTrace(); } catch(UnsupportedFlavorException ufe) { ufe.printStackTrace(); } } // DropTargetListener 메소드를 구현한 부분이다. public void dragEnter(DropTargetDragEvent e) { } public void dragExit(DropTargetEvent e) { } public void dragOver(DropTargetDragEvent e) { } public void dropActionChanged(DropTargetDragEvent e) { } }
< 출처 : http://www.javastudy.co.kr/docs/b612/swing/draganddrop.html >

+ Recent posts