Tools for Developers    Integrated Development Environments, Source Control Repositories,  Automated Testing tools, Bug Tr...
Table of Contents Integrated Development Environments (IDEs) Source Control Systems Code Generation Tools Logging Tool...
Table of Contents (2) Code Obfuscators Code Profilers Refactoring Tools Automated Build Tools Continuous Integration ...
Integrated Development   Environments (IDEs)Visual Studio, Eclipse, IntelliJ IDEA, Netbeans,JDeveloper, Code::Blocks, Bloo...
Visual Studio Visual Studio is official .NET development tool from Microsoft   Multiple languages: C#, VB.NET, C++, …  ...
Visual Studio – Screenshot                             6
Visual Studio   Live Demo
Eclipse Eclipse is the #1 Java IDE   Supports multiple languages and platforms:    Java, Java EE, C++, PHP, Python, Ruby...
Eclipse – Screenshot                       9
EclipseLive Demo
Other IDEs Other Java IDEs  Netbeans    Supports latest Java technologies    Nice GUI designer for Swing and JSF  Int...
Source Control SystemsSubversion (SVN), Team Foundation Server (TFS),        CVS, Git, Mercurial, Perforce, …
What is Source Control System? Source control systems(version control systems, source control repositories)  Hold the so...
Lock-Modify-Unlock Model The lock-modify-unlock model needs locking files before modification  One file is modified by a...
Copy-Modify-Merge Model Copy-modify-merge model does not hold locks during the source code modification  The same file c...
Subversion (SVN) Subversion (SVN)  The most popular and well established system  Free, open-source, very large communit...
Subversion (SVN) (2) Subversion (SVN)   Official web site:    http://subversion.tigris.org/   Runs on UNIX, Linux, Win...
Subversion Features   Versioning of the directory structure   Complete change log     Deletion of files and directories...
TortoiseSVN TortoiseSVN  Open source   GUI client for   Subversion  Integrated in   Windows   Explorer  http://tortois...
Subversion  Live Demo
Team Foundation Server Microsoft Team Foundation Server (TFS)  Works best with Visual Studio    Many problems outside o...
Other Source Control Systems CVS   Was extremely popular in the past    Now it is obsolete   Open source, mostly used ...
SCM and ALM Systems Software Configuration Management (SCM systems (e.g. Rational ClearCase, StarTeam)  Change managemen...
Application Lifecycle Management                                   24
Code Generation ToolsVisual Studio T4 Engine, CodeSmith, AndroMDA
Code Generators – Concepts Source code generation  Template based    Build data access layer by given database schema  ...
Code Generation Tools Microsoft T4 Engine, CodeSmith  Template based code generators  Can generate classes, Web pages a...
Microsoft T4 Template Engine Visual Studio T4 Engine   T4 == Text Template Transformation Toolkit   Integral part of Vi...
T4 Template Engine – Architecture                                    29
Visual Studio T4Template Engine     Live Demo
Logging Tools  Log4J, Log4Net
Logging Logging is chronological                         and systematic record of data processing events in a program   ...
Log4J / Log4Net Log4J / Log4Net are a popular logging frameworks for Java / .NET   Designed to be reliable, fast and ext...
Log4j / Log4Net Architecture Log4j has three main components: loggers, appenders and layouts  Loggers    Channels for p...
Hello Log4Net – Example class Log4NetExample {   private static readonly ILog log =     LogManager.GetLogger(typeof(Log4Ne...
Log4Net Live Demo
Unit Testing ToolsJUnit, NUnit, CppUnit, TestNG, JsUnit, …
Unit Testing Unit test is a program   that tests pieces of code   Test a single method, class or component   Implement ...
Unit Test – Exampleint sum(int[] array) {  int sum = 0;  for (int i=0; i<array.length; i++)    sum += array[i];  return su...
Unit Testing Frameworks / Tools Unit testing frameworks  Simplify design, implementation and execution   of unit tests ...
Code Coverage & Mocking Tools Code coverage tools  Code coverage tools check what portion of the   source code is covere...
Unit Testing and CodeCoverage with VSTT       Live Demo
Automated Testing Tools Selenium, Microsoft UI Automation Framework,Telerik Test Studio, IBM Rational Functional Tester,  ...
Test Automation Test automation  Replaces manual tests (performed by people)   with automated tests (performed by script...
Functional Testing Tools Functional testing tools   Test whether the product behaves as expected   Selenium, Telerik We...
Performance Testing Tools Performance testing tools   HP Load Runner    Load testing for Web, SOA, Java, .NET, etc.,   ...
Automated Testing Suites HP Quality Center   Includes requirements management, test planning,    test execution, bug tra...
Selenium RC  Live Demo
Bug Tracking / Issue   Tracking SystemsTRAC, Bugzilla, JIRA, TFS, SourceForge,Google Code, CodePlex, Project Locker
Bug Tracking Systems Bug tracking / issue tracking      systems   Track bugs / issues related to software    development...
TRACLive Demo
Code Analysis ToolsFxCop, StyleCop, Checkstyle, devAdvantage,       FindBugs, BoundsChecker, …
Code Analysis Tools Code analysis   tools   Analyze the source code for bad coding style /    unwanted coding practices...
FxCop & StyleCop     Live Demo
Code Decompilation Tools   .NET Reflector, Java Decompilers
Code Decomplation Code decomplator / code disassembler  Reconstructs the source code (to some extent)   from the compile...
Code Decomplation Tools Code decompilers  .NET    JustDecompile – free, powerful .NET decompiler    .NET Reflector – p...
.NET Reflector                 58
.NET Reflector    Live Demo
Code ObfuscatorsMaking Reverse Engineering Difficult
Code Obfuscation Code obfuscation  Transform the source code or compiled .NET /   Java code into a difficult to understa...
Code Obfuscation Techniques Rewrite for-loops as   while-loops followed by  a series of cascading if-else statements Cha...
Obfuscation – Example   Original source code in C++ – finds the prime    numbers in the interval [1 .. 50]:    void prime...
Obfuscation – Example (2)   Obfuscated source code – does the same but the    code is made almost unreadable:    void pri...
Obfuscation – Example (3)   Obfuscated source code – does the same but the    code is made really horrible:        void _...
Obfuscation Tools .NET obfuscators   Eazfuscator.NET – free   {smartassembly} – commercial license, very    powerful – ...
Code ProfilersANTS Profiler for .NET, YourKit Profiler for .NET,  Netbeans Profiler for Java, JProfiler, JProbe
Profilers Profilers         are tools for gathering performance data and finding performance bottlenecks   Implemented b...
Netbeans Profiler                    69
Netbeans Profiler     Live Demo
Refactoring ToolsJustCode, ReSharper, IntelliJ IDEA, Visual  Studio, Eclipse, Netbeans, JDeveloper
Refactoring Refactoring   Improving the design of the existing code    without changing its behavior Typical refactorin...
Refactoring in Visual Studio                               73
Refactoring in Visual Studio with / without JustCode          Live Demo
Automated Build Tools  CMake, Ant, Maven, MSBuild
Software Builds What means to build       software?  The process of compiling and assembling the   systems modules to ob...
Sample C++ makefile on LinuxCC = ccCFLAGS = -O3 -I /usr/local/lib/sprng/include -I /usr/local/lib/pgplot -gOBJECTS = monte...
Sample Ant Build File<project name="MyProject" basedir="."> <property name="src" location="src"/> <property name="build" l...
AntLive Demo
Continuous Integration Tools    CruiseControl, CruiseControl.NET,    Hudson, Team Foundation Server
Continuous Integration (CI) Continuous integration (CI)   Automating the build and integration process   Build the enti...
Components of the CI System Build server – separate machine (or pool) Source control repository   Subversion, Team Foun...
Continuous Integration Systems CruiseControl   Very popular, powerful, open source CI tool   Extensible, plug-in based,...
CI Systems Comparison Matrix Continuous integration systems   – comparison:  http://confluence.public.thoughtworks.org/d...
ContinuousIntegration with TFS       Live Demo
Documentation Generators  Javadoc, Sandcastle, Doxygen, JSDoc
Documentation Frameworks The best source code documentation is the code itself Special types of comments are used in man...
Documentation Generators   Javadoc     Transforms Javadoc comments used in Java into      HTML documentation   Sandcast...
Javadoc Documentation:  java.lang.String        Live Demo
Project Planning and Management Tools TRAC, Microsoft Project, JIRA
Project Planning /                          Management Tools TRAC   Open source tool for project / issue tracking   Hig...
Project Planning /                          Management Tools Zoho Projects   Online project management platform   Hoste...
Project Hosting and Team   Collaboration Sites    SourceForge, Google Code,     CodePlex, Project Locker
Project Hosting Sites SourceForge – http://www.sourceforge.net  Source control (SVN, Git, …), web hosting, tracker,   wi...
Project Hosting Sites (2) CodePlex – http://www.codeplex.com  Microsofts open source projects site  Team Foundation Ser...
Project Hosting Sites (3) Assembla – http://www.assembla.com   Source control (SVN, Git), issue tracker, wiki,    chats,...
Google Code  Live Demo
Project Deployment  in the Public CloudsAWS, GAE, Azure, AppHarbor, PHPFog, …
What is Cloud? Cloud ≈ multiple hardware                         machines combine computing power and resources   Share ...
AppHarbor   AppHarbor – cloud platform for .NET apps     Supports a classical .NET development stack       C#, .NET Fra...
AppHarbor .NET Cloud       Live Demo
Development Tools    курсове и уроци по програмиране, уеб дизайн – безплатно     BG Coder - онлайн състезателна система - ...
Free Trainings @ Telerik Academy “Software Engineering" course    @ Telerik Academy       academy.telerik.com/.../softwa...
Upcoming SlideShare
Loading in...5
×

4. Software Engineering - development tools

1,499

Published on

Development Tools
Telerik Software Academy: http://academy.telerik.com/school-academy/meetings/details/2011/09/27/software-engineering
The website and all video materials are in Bulgarian

Integrated Development Environments (IDEs);
Source Control Systems;
Code Generation Tools;
Logging Tools;
Unit Testing Tools;
Automated Testing Tools;
Bug Tracking / Issue Tracking Systems;
Code Analysis Tools;
Code Decompilation Tools;
Code Obfuscators;
Code Profilers;
Refactoring Tools;
Automated Build Tools;
Continuous Integration Tools;
Documentation Generators;
Project Planning and Management Tools;
Project Hosting and Team Collaboration Sites;
Deployment in the Public Clouds

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,499
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
67
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

4. Software Engineering - development tools

  1. 1. Tools for Developers Integrated Development Environments, Source Control Repositories, Automated Testing tools, Bug Tracking, Code Analysis Tools, Build Tools, Project Hosting Sites, Deployment in the CloudSvetlin NakovManager TechnicalTraininghttp://www.nakov.comTelerik Software Academyacademy.telerik.com
  2. 2. Table of Contents Integrated Development Environments (IDEs) Source Control Systems Code Generation Tools Logging Tools Unit Testing Tools Automated Testing Tools Bug Tracking / Issue Tracking Systems Code Analysis Tools Code Decompilation Tools 2
  3. 3. Table of Contents (2) Code Obfuscators Code Profilers Refactoring Tools Automated Build Tools Continuous Integration Tools Documentation Generators Project Planning and Management Tools Project Hosting and Team Collaboration Sites Deployment in the Public Clouds 3
  4. 4. Integrated Development Environments (IDEs)Visual Studio, Eclipse, IntelliJ IDEA, Netbeans,JDeveloper, Code::Blocks, Bloodshed Dev-C++
  5. 5. Visual Studio Visual Studio is official .NET development tool from Microsoft  Multiple languages: C#, VB.NET, C++, …  Multiple technologies and platforms: ASP.NET, WPF, Silverlight, WWF, WCF, Windows Mobile  Very powerful and feature rich  Write, compile, model, design GUI, forms, data, build, execute, debug, test, deploy, refactor, …  Commercial product, has free editions 5
  6. 6. Visual Studio – Screenshot 6
  7. 7. Visual Studio Live Demo
  8. 8. Eclipse Eclipse is the #1 Java IDE  Supports multiple languages and platforms: Java, Java EE, C++, PHP, Python, Ruby, mobile development, embedded development, …  Very powerful and feature rich  Write, compile, build, execute, debug, test, deploy, refactor, …  Thousands of plug-ins  Free, open-source product, very big community 8
  9. 9. Eclipse – Screenshot 9
  10. 10. EclipseLive Demo
  11. 11. Other IDEs Other Java IDEs  Netbeans  Supports latest Java technologies  Nice GUI designer for Swing and JSF  IntelliJ IDEA – very powerful refactoring  JDeveloper – feature rich, supports UML Other C++ IDEs  Code::Blocks  Bloodshed Dev-C++ 11
  12. 12. Source Control SystemsSubversion (SVN), Team Foundation Server (TFS), CVS, Git, Mercurial, Perforce, …
  13. 13. What is Source Control System? Source control systems(version control systems, source control repositories)  Hold the source code and project assets during the development process  Allow simultaneous changes in the source code and conflict resolution  Keep version history of the project assets Two versioning models:  Lock-Modify-Unlock and Copy-Modify-Merge 13
  14. 14. Lock-Modify-Unlock Model The lock-modify-unlock model needs locking files before modification  One file is modified by at most one person in any given moment  No conflicts, no need of merge  Suitable for small teams  When changes almost dont need concurrency  Basic commands: check out, check-in  Implemented in: Visual SourceSafe, (TFS, SVN) 14
  15. 15. Copy-Modify-Merge Model Copy-modify-merge model does not hold locks during the source code modification  The same file could be simultaneously edited by multiple developers  Sometimes requires conflict resolution  Suitable for large teams and projects  High concurrency of source code modifications  Basic commands: update, commit  Implemented in: SVN, CVS, Git, Mercurial, TFS 15
  16. 16. Subversion (SVN) Subversion (SVN)  The most popular and well established system  Free, open-source, very large community  TortoiseSVN – the most popular client 16
  17. 17. Subversion (SVN) (2) Subversion (SVN)  Official web site:  http://subversion.tigris.org/  Runs on UNIX, Linux, Windows Console client  svn GUI client  TortoiseSVN – http://tortoisesvn.tigris.org/
  18. 18. Subversion Features Versioning of the directory structure Complete change log  Deletion of files and directories  Renaming of files and directories  Saving of files or directories Can work on it’s own or integrated with Apache as a module Works effectively with tags and branching
  19. 19. TortoiseSVN TortoiseSVN  Open source GUI client for Subversion  Integrated in Windows Explorer  http://tortoise svn.tigris.org/
  20. 20. Subversion Live Demo
  21. 21. Team Foundation Server Microsoft Team Foundation Server (TFS)  Works best with Visual Studio  Many problems outside of it  Commercial license 21
  22. 22. Other Source Control Systems CVS  Was extremely popular in the past  Now it is obsolete  Open source, mostly used in UNIX / Linux Git and Mercurial  Fast, distributed, open source Perforce  Very powerful and scalable (pentabytes of code)  Commercial product (used by SAP) 22
  23. 23. SCM and ALM Systems Software Configuration Management (SCM systems (e.g. Rational ClearCase, StarTeam)  Change management for requirements, documents, source code, etc.  Tools, policies, workflow, etc. Application Lifecycle Management (ALM) systems (e.g. VSTS + TFS, StarTeam, Polarion)  Covers the entire development process  Requirements, planning, project management, architecture, build, QA, test, integration, etc. 23
  24. 24. Application Lifecycle Management 24
  25. 25. Code Generation ToolsVisual Studio T4 Engine, CodeSmith, AndroMDA
  26. 26. Code Generators – Concepts Source code generation  Template based  Build data access layer by given database schema  E.g. Visual Studio Data Designer for LINQ-to-SQL  Build Web application by database schema  E.g. Django (Python based Web application platform)  Model based  Build entire application by high-level model 26
  27. 27. Code Generation Tools Microsoft T4 Engine, CodeSmith  Template based code generators  Can generate classes, Web pages and other project assets by set of templates  E.g. data access layer based on database schema AndroMDA  Application generator framework  Transforms UML models to Java EE applications based on Spring, Hibernate and JSF 27
  28. 28. Microsoft T4 Template Engine Visual Studio T4 Engine  T4 == Text Template Transformation Toolkit  Integral part of Visual Studio  ASP.NET-like syntax T4 templates consist of:  Processing directives (e.g. include template)  Text blocks (static text)  Code blocks (in C#, VB.NET)  Compiled to C# and then to .NET assemblies 28
  29. 29. T4 Template Engine – Architecture 29
  30. 30. Visual Studio T4Template Engine Live Demo
  31. 31. Logging Tools Log4J, Log4Net
  32. 32. Logging Logging is chronological and systematic record of data processing events in a program  E.g. the Windows Event Log Logs can be saved to a persistent medium to be studied at a later time Use logging in the development phase:  Logging can help you debug the code Use logging in the production environment:  Helps you troubleshoot problems 32
  33. 33. Log4J / Log4Net Log4J / Log4Net are a popular logging frameworks for Java / .NET  Designed to be reliable, fast and extensible  Simple to understand and to use API  Allows the developer to control which log statements are output with arbitrary granularity  Fully configurable at runtime using external configuration files 33
  34. 34. Log4j / Log4Net Architecture Log4j has three main components: loggers, appenders and layouts  Loggers  Channels for printing logging information  Appenders  Output destinations (e.g. XML file, database, …)  Layouts  Formats that appenders use to write their output 34
  35. 35. Hello Log4Net – Example class Log4NetExample { private static readonly ILog log = LogManager.GetLogger(typeof(Log4NetExample)); static void Main() { log.Debug("Debug msg"); log.Error("Error msg"); } } Output from Log4NetExample 2010-12-16 23:25:08 DEBUG Log4NetExample – Debug msg 2010-12-16 23:25:08 ERROR Log4NetExample – Error msg … 35
  36. 36. Log4Net Live Demo
  37. 37. Unit Testing ToolsJUnit, NUnit, CppUnit, TestNG, JsUnit, …
  38. 38. Unit Testing Unit test is a program that tests pieces of code  Test a single method, class or component  Implement a common use case scenario  Confirm that the code works as expected  Or signal that the code is broken Unit tests should have high code coverage, e.g. 70-80%  Executed in the continuous integration process Unit tests dramatically decrease the number of defects in the code 38
  39. 39. Unit Test – Exampleint sum(int[] array) { int sum = 0; for (int i=0; i<array.length; i++) sum += array[i]; return sum;}void testSum() { if (sum(new int[]{1,2}) != 3) throw new TestFailedException("1+2 != 3"); if (sum(new int[]{-2}) != -2) throw new TestFailedException("-2 != -2"); if (sum(new int[]{}) != 0) throw new TestFailedException("0 != 0");} 39
  40. 40. Unit Testing Frameworks / Tools Unit testing frameworks  Simplify design, implementation and execution of unit tests Popular unit testing frameworks  JUnit, TestNG – classical unit testing frameworks for Java  Visual Studio Team Test (VSTT), NUnit, MbUnit – for .NET development  cppUnit, UnitTest++ – for C++ developers  jsUnit – for JavaScript 40
  41. 41. Code Coverage & Mocking Tools Code coverage tools  Code coverage tools check what portion of the source code is covered by the unit tests  CodeCover for Eclipse – for Java  Visual Studio Team Suite – for C#  CoverageMeter – for C++ Mocking tools  Allow testing functionality that is still not implemented9, e.g. through its interface  Moq, TypeMock, Rhino Mock, JustMock 41
  42. 42. Unit Testing and CodeCoverage with VSTT Live Demo
  43. 43. Automated Testing Tools Selenium, Microsoft UI Automation Framework,Telerik Test Studio, IBM Rational Functional Tester, AutomatedQA TestComplete, JMeter, …
  44. 44. Test Automation Test automation  Replaces manual tests (performed by people) with automated tests (performed by script)  Automatically run test scenarios and compare the actual outcomes to predicted outcomes Automated testing tools  Record and replay test scenarios Automated testing frameworks  Allow programmatically simulate user activity 44
  45. 45. Functional Testing Tools Functional testing tools  Test whether the product behaves as expected  Selenium, Telerik WebUI Test Studio, IBM Rational Functional Tester, AutomatedQA TestComplete Functional testing frameworks  Microsoft UI Automation Framework – provides programmatic access to the UI elements  java.awt.Robot – generate native system input events (mouse and keyboard) 45
  46. 46. Performance Testing Tools Performance testing tools  HP Load Runner  Load testing for Web, SOA, Java, .NET, etc.,  Commercial tool  OpenSTA  HTTP load tests – free tool  JMeter  Free Java-based tool  Load testing for Web, SOA, databases, JMS 46
  47. 47. Automated Testing Suites HP Quality Center  Includes requirements management, test planning, test execution, bug tracking – commercial tool Mercury Quick Test Professional (QTP)  UI test automation tool – commercial tool TestLink  Test planning and execution – open-source tool Visual Studio Test Tools  Functional testing and performance testing 47
  48. 48. Selenium RC Live Demo
  49. 49. Bug Tracking / Issue Tracking SystemsTRAC, Bugzilla, JIRA, TFS, SourceForge,Google Code, CodePlex, Project Locker
  50. 50. Bug Tracking Systems Bug tracking / issue tracking systems  Track bugs / issues related to software development, called tickets Tickets consist of:  Category: bug / feature request / task  State: new  assigned  fixed  closed  Priority: critical / high / low / etc.  Owner / responsible person  Summary, description, attachments 50
  51. 51. TRACLive Demo
  52. 52. Code Analysis ToolsFxCop, StyleCop, Checkstyle, devAdvantage, FindBugs, BoundsChecker, …
  53. 53. Code Analysis Tools Code analysis tools  Analyze the source code for bad coding style / unwanted coding practices Static analysis  Examine the source code at compile-time  Could work with the source code or with the compiled assemblies / JAR archives Dynamic analysis  Analyses the code at runtime (usually done by code instrumentation) 53
  54. 54. FxCop & StyleCop Live Demo
  55. 55. Code Decompilation Tools .NET Reflector, Java Decompilers
  56. 56. Code Decomplation Code decomplator / code disassembler  Reconstructs the source code (to some extent) from the compiled code  .NET assembly  C# / VB.NET source code  JAR archive / .class file  Java source code  .EXE file  C / C++ / Assembler code Reconstructed code  Is not always 100% compilable  Loses private identifier names and comments 56
  57. 57. Code Decomplation Tools Code decompilers  .NET  JustDecompile – free, powerful .NET decompiler  .NET Reflector – powerful, great usability, paid  Java  DJ Java Decompiler  JD (JD-Core / JD-GUI / JD-Eclipse)  .EXE file  Boomerang Decompiler  outputs C source code  IDA Pro – powerful disassembler / debugger 57
  58. 58. .NET Reflector 58
  59. 59. .NET Reflector Live Demo
  60. 60. Code ObfuscatorsMaking Reverse Engineering Difficult
  61. 61. Code Obfuscation Code obfuscation  Transform the source code or compiled .NET / Java code into a difficult to understand form  Obfuscated code has the same behavior  Sometimes is a bit slower due to changes and additions in the control logic  Obfuscated code is the opposite of the high- quality code  Obfuscation is a form of security through obscurity 61
  62. 62. Code Obfuscation Techniques Rewrite for-loops as while-loops followed by a series of cascading if-else statements Change iteration into recursion Obfuscate programming constructs (e.g. turn if-else statements into ?: operators) Introduce meaningless identifier names Remove intermediate variables and literals by repeating them as expressions in the code Remove literals (e.g. 0 and 1) – use expressions Randomize code formatting 62
  63. 63. Obfuscation – Example Original source code in C++ – finds the prime numbers in the interval [1 .. 50]: void primes(int max) { for (int num = 2; num < max; num++) { int composite = 0; for (int div = 2; div * div <= num; div++) composite += !(num % div); if (!composite) printf("%d ", num); } } void main() { primes(50); } 63
  64. 64. Obfuscation – Example (2) Obfuscated source code – does the same but the code is made almost unreadable: void primes(int m, int t, int c) { int i = t / m; int j = t % m; (i <= 1) ? primes(m,t+1,c) : (!j) ? primes(m,t+1,j) : (j == i && !c) ? (printf("%dt",i), primes(m,t+1,c)) : (j > 1 && j < i) ? primes(m,t+1,c + !(i % j)) : (t < m * m) ? primes(m,t+1,c) : 0; } void main() { primes(50, 0, 0); } 64
  65. 65. Obfuscation – Example (3) Obfuscated source code – does the same but the code is made really horrible: void _(int __,int ___ ,int ____,int _____){(( ___/__)<=_____)? _(__,___+_____,____,_____ ):! (___ % __) ? _(__,___+_____,___ % __, _____):( (___ % __)==(___ / __) && !____)?(printf("%d " ,(___ / __)),_(__,___+_____,____,_____)):((___ %__)>_____ &&(___ % __) < (___ / __))?_( __,___+_____,____+!((___ / __)%(___ % __)), _____):(___ <__*__)?_(__, ___+_____, ____,_____):0;} int main(void){_(50,0,0,1 );} 65
  66. 66. Obfuscation Tools .NET obfuscators  Eazfuscator.NET – free  {smartassembly} – commercial license, very powerful – assembly obfuscation + compression Java obfuscators  ProGuard – free, open-source  yGuard – free, open source C++ obfuscators  Stunnix C++ Obfuscator – commercial product 66
  67. 67. Code ProfilersANTS Profiler for .NET, YourKit Profiler for .NET, Netbeans Profiler for Java, JProfiler, JProbe
  68. 68. Profilers Profilers are tools for gathering performance data and finding performance bottlenecks  Implemented by code instrumentation or based on built-in platform debugging / profiling APIs  Gather statistics for method calls, uses of classes, objects, data, memory, threads, etc. CPU profilers  Find performance bottlenecks Memory profilers  Find memory allocation problems 68
  69. 69. Netbeans Profiler 69
  70. 70. Netbeans Profiler Live Demo
  71. 71. Refactoring ToolsJustCode, ReSharper, IntelliJ IDEA, Visual Studio, Eclipse, Netbeans, JDeveloper
  72. 72. Refactoring Refactoring  Improving the design of the existing code without changing its behavior Typical refactoring patterns  Rename variable / class / method / member  Extract method  Extract constant  Extract interface  Encapsulate field 72
  73. 73. Refactoring in Visual Studio 73
  74. 74. Refactoring in Visual Studio with / without JustCode Live Demo
  75. 75. Automated Build Tools CMake, Ant, Maven, MSBuild
  76. 76. Software Builds What means to build software?  The process of compiling and assembling the systems modules to obtain the final product  Build activities can also include:  Getting the latest version from the source control repository  Linking external resources  Executing unit tests  Creating installation packages 76
  77. 77. Sample C++ makefile on LinuxCC = ccCFLAGS = -O3 -I /usr/local/lib/sprng/include -I /usr/local/lib/pgplot -gOBJECTS = monte_pi_sprng.o plot.oLIBS = -L/usr/local/lib/sprng/lib -llcg -L/usr/local/lib/pgplot -lcpgplot-lX11 -lftn -lm# --- build targetsall: monte_pi_sprngmonte_pi_sprng: $(OBJECTS) $(CC) -o monte_pi_sprng $(OBJECTS) $(LIBS)monte_pi_sprng.o: /usr/local/lib/sprng/include/sprng.h/usr/local/lib/pgplot/cpgplot.h monte_pi_sprng.c $(CC) $(CFLAGS) -c monte_pi_sprng.cplot.o: /usr/local/lib/pgplot/cpgplot.h plot.c $(CC) $(CFLAGS) -c plot.c# --- remove binary and executable filesclean: rm -f monte_pi_sprng $(OBJECTS) 77
  78. 78. Sample Ant Build File<project name="MyProject" basedir="."> <property name="src" location="src"/> <property name="build" location="build"/> <target name="init"> <!-- Create directory structure used by compile --> <mkdir dir="${build}"/> </target> <target name="compile" depends="init"> <!-- Compile the code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> </target> <target name="clean" description="clean up" > <!-- Delete the ${build} directory tree --> <delete dir="${build}"/> </target></project> 78
  79. 79. AntLive Demo
  80. 80. Continuous Integration Tools CruiseControl, CruiseControl.NET, Hudson, Team Foundation Server
  81. 81. Continuous Integration (CI) Continuous integration (CI)  Automating the build and integration process  Build the entire system each time any new code is checked in the source control repository  Run all the automated tests for each build What does "continuous" mean?  Ideally – build it after every check-in  Practically – for larger systems, every 1-2 hours  Or at least a couple of times a day 81
  82. 82. Components of the CI System Build server – separate machine (or pool) Source control repository  Subversion, Team Foundation Server (TFS), etc. Automated build system  Ant, NAnt, MSBuild, Cruise Control, TFS, etc. Status indicators/ notifications to make problems visible right away  Email notifications / tray build notify utilities  Public build status monitors 82
  83. 83. Continuous Integration Systems CruiseControl  Very popular, powerful, open source CI tool  Extensible, plug-in based, large community CruiseControl.NET  .NET cloning of CruiseControl Hudson  Powerful Java based CI server, open source Team Foundation Server (TFS)  TFS provides build-in continuous integration 83
  84. 84. CI Systems Comparison Matrix Continuous integration systems – comparison:  http://confluence.public.thoughtworks.org/disp lay/CC/CI%2BFeature%2BMatrix 84
  85. 85. ContinuousIntegration with TFS Live Demo
  86. 86. Documentation Generators Javadoc, Sandcastle, Doxygen, JSDoc
  87. 87. Documentation Frameworks The best source code documentation is the code itself Special types of comments are used in many platforms  Used to document the code classes, methods, parameters, return types, exceptions, etc.  Javadoc comments in Java  XML documentation in .NET  Doxygen-style documentation for C, C++, PHP, Python, Java, C#, etc. 87
  88. 88. Documentation Generators Javadoc  Transforms Javadoc comments used in Java into HTML documentation Sandcastle  Transforms the XML comments used .NET into CHM, HTML, PDF and other formats Doxygen  Transforms Doxygen comments into HTML JSDoc  Javadoc cloning for JavaScript 88
  89. 89. Javadoc Documentation: java.lang.String Live Demo
  90. 90. Project Planning and Management Tools TRAC, Microsoft Project, JIRA
  91. 91. Project Planning / Management Tools TRAC  Open source tool for project / issue tracking  Highly customizable, lots of plug-ins  Large community Microsoft Project / Project Server  Commercial tool JIRA  Very feature-rich and highly usable tool  Commercial product, free for non-profit project 91
  92. 92. Project Planning / Management Tools Zoho Projects  Online project management platform  Hosted solution, has free and paid editions dotProject  Open-source online project management tool  Installed on your server (not hosted) ComindWork  Hosted online project management tool  Provides free and paid versions 92
  93. 93. Project Hosting and Team Collaboration Sites SourceForge, Google Code, CodePlex, Project Locker
  94. 94. Project Hosting Sites SourceForge – http://www.sourceforge.net  Source control (SVN, Git, …), web hosting, tracker, wiki, blog, mailing lists, file release, statistics, etc.  Free, all projects are public and open source Google Code – http://code.google.com  Source control (SVN), file release, wiki, issue tracker  Very simple, basic functions only, not feature-rich  Free, all projects are public and open source  1-minute signup, without heavy approval process 94
  95. 95. Project Hosting Sites (2) CodePlex – http://www.codeplex.com  Microsofts open source projects site  Team Foundation Server (TFS) infrastructure  Source control (TFS), issue tracker, downloads, discussions, wiki, etc.  Free, all projects are public and open source Project Locker – http://www.projectlocker.com  Source control (SVN), TRAC, CI system, wiki, etc.  Private projects (not open source)  Free and paid editions 95
  96. 96. Project Hosting Sites (3) Assembla – http://www.assembla.com  Source control (SVN, Git), issue tracker, wiki, chats, files, messages, time tracking, etc.  Private / public projects, free and paid editions Bitbucket – http://bitbucket.org  Source control (Mercurial), issue tracker, wiki, management tools  Private projects, free and paid editions Others: Github, Unfuddle, XP-Dev, Beanstalk 96
  97. 97. Google Code Live Demo
  98. 98. Project Deployment in the Public CloudsAWS, GAE, Azure, AppHarbor, PHPFog, …
  99. 99. What is Cloud? Cloud ≈ multiple hardware machines combine computing power and resources  Share them between multiple applications  To save costs and use resources more efficiently Public clouds  Provide computing resources on demand  Publicly in Internet  Paid or free of charge (to some limit)  Azure, Amazon AWS, Google App Engine, AppHarbor, Rackspace, Heroku, … 99
  100. 100. AppHarbor AppHarbor – cloud platform for .NET apps  Supports a classical .NET development stack  C#, .NET Framework, ASP.NET (Web Forms and MVC), WCF, WWF, ADO.NET Entity Framework, …  Deployment through Git / SVN / TFS  Automated build process (compilation + unit tests)  Build-in load balancing  Rich set of add-on services 100
  101. 101. AppHarbor .NET Cloud Live Demo
  102. 102. Development Tools курсове и уроци по програмиране, уеб дизайн – безплатно BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране – Телерик академия форум програмиране, форум уеб дизайн уроци по програмиране и уеб дизайн за ученици ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET http://academy.telerik.com програмиране за деца – безплатни курсове и уроци ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC безплатен SEO курс - оптимизация за търсачки алго академия – състезателно програмиране, състезаниякурсове и уроци по програмиране, книги – безплатно от Наков курс мобилни приложения с iPhone, Android, WP7, PhoneGap уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop Дончо Минков - сайт за програмиране free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране безплатен курс "Качествен програмен код" безплатен курс "Разработка на софтуер в cloud среда" C# курс, програмиране, безплатно
  103. 103. Free Trainings @ Telerik Academy “Software Engineering" course @ Telerik Academy  academy.telerik.com/.../software-engineering Telerik Software Academy  academy.telerik.com Telerik Academy @ Facebook  facebook.com/TelerikAcademy Telerik Software Academy Forums  forums.academy.telerik.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×