4. Software Engineering - development tools
-
Upload
telerik-academy -
Category
Technology
-
view
2.162 -
download
0
Transcript of 4. Software Engineering - development tools
![Page 1: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/1.jpg)
Tools for DevelopersIntegrated Development Environments, Source Control Repositories,
Automated Testing tools, Bug Tracking, Code Analysis Tools, Build Tools, Project Hosting Sites, Deployment in the Cloud
Svetlin Nakov
Telerik Software Academyacademy.telerik.com
Manager Technical Traininghttp://www.nakov.com
academy.telerik.com/.../software-engineering
![Page 2: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/2.jpg)
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
![Page 3: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/3.jpg)
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 Clouds3
![Page 4: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/4.jpg)
Integrated Development
Environments (IDEs)Visual Studio, Eclipse, IntelliJ IDEA, Netbeans, JDeveloper, Code::Blocks,
Bloodshed Dev-C++
![Page 5: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/5.jpg)
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
![Page 6: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/6.jpg)
Visual Studio – Screenshot
6
![Page 7: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/7.jpg)
Visual StudioLive Demo
7
![Page 8: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/8.jpg)
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
![Page 9: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/9.jpg)
Eclipse – Screenshot
9
![Page 10: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/10.jpg)
EclipseLive Demo
![Page 11: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/11.jpg)
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
![Page 12: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/12.jpg)
Source Control SystemsSubversion (SVN), Team Foundation
Server (TFS), CVS, Git, Mercurial, Perforce, …
![Page 13: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/13.jpg)
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
![Page 14: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/14.jpg)
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 don't need concurrency
Basic commands: check out, check-in
Implemented in: Visual SourceSafe, (TFS, SVN)
14
![Page 15: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/15.jpg)
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
![Page 16: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/16.jpg)
Subversion (SVN) Subversion (SVN)
The most popular and well established system
Free, open-source, very large community
TortoiseSVN – the most popular client
16
![Page 17: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/17.jpg)
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/
![Page 18: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/18.jpg)
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
![Page 19: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/19.jpg)
TortoiseSVN
TortoiseSVN Open
source GUI client for Subversion
Integrated in Windows Explorer
http://tortoisesvn.tigris.org/
![Page 20: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/20.jpg)
SubversionLive Demo
![Page 21: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/21.jpg)
Team Foundation Server
Microsoft Team Foundation Server (TFS) Works best with Visual Studio
Many problems outside of it Commercial license
21
![Page 22: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/22.jpg)
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
![Page 23: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/23.jpg)
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
![Page 24: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/24.jpg)
Application Lifecycle Management
24
![Page 25: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/25.jpg)
Code Generation ToolsVisual Studio T4 Engine, CodeSmith,
AndroMDA
![Page 26: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/26.jpg)
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
![Page 27: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/27.jpg)
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
![Page 28: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/28.jpg)
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
![Page 29: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/29.jpg)
T4 Template Engine – Architecture
29
![Page 30: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/30.jpg)
Visual Studio T4 Template
EngineLive Demo
![Page 31: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/31.jpg)
Logging ToolsLog4J, Log4Net
![Page 32: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/32.jpg)
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
![Page 33: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/33.jpg)
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
![Page 34: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/34.jpg)
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
![Page 35: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/35.jpg)
Hello Log4Net – Example
Output from Log4NetExample
35
class Log4NetExample{ private static readonly ILog log = LogManager.GetLogger(typeof(Log4NetExample)); static void Main() { log.Debug("Debug msg"); log.Error("Error msg"); }}
2010-12-16 23:25:08 DEBUG Log4NetExample – Debug msg2010-12-16 23:25:08 ERROR Log4NetExample – Error msg…
![Page 36: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/36.jpg)
Log4NetLive Demo
![Page 37: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/37.jpg)
Unit Testing ToolsJUnit, NUnit, CppUnit, TestNG, JsUnit, …
![Page 38: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/38.jpg)
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
![Page 39: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/39.jpg)
Unit Test – Example
39
int 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");}
![Page 40: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/40.jpg)
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 JavaScript40
![Page 41: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/41.jpg)
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
![Page 42: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/42.jpg)
Unit Testing and Code Coverage with
VSTTLive Demo
![Page 43: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/43.jpg)
Automated Testing ToolsSelenium, Microsoft UI Automation
Framework, Telerik Test Studio, IBM Rational Functional Tester,
AutomatedQA TestComplete, JMeter, …
![Page 44: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/44.jpg)
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
![Page 45: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/45.jpg)
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
![Page 46: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/46.jpg)
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, JMS46
![Page 47: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/47.jpg)
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
![Page 48: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/48.jpg)
Selenium RCLive Demo
![Page 49: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/49.jpg)
Bug Tracking / Issue Tracking
SystemsTRAC, Bugzilla, JIRA, TFS, SourceForge, Google Code, CodePlex, Project Locker
![Page 50: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/50.jpg)
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
![Page 51: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/51.jpg)
TRACLive Demo
51
![Page 52: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/52.jpg)
Code Analysis ToolsFxCop, StyleCop, Checkstyle,
devAdvantage, FindBugs, BoundsChecker, …
![Page 53: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/53.jpg)
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
![Page 54: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/54.jpg)
FxCop & StyleCopLive Demo
54
![Page 55: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/55.jpg)
Code Decompilation Tools
.NET Reflector, Java Decompilers
![Page 56: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/56.jpg)
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
![Page 57: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/57.jpg)
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
![Page 58: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/58.jpg)
.NET Reflector
58
![Page 59: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/59.jpg)
.NET ReflectorLive Demo
![Page 60: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/60.jpg)
Code ObfuscatorsMaking Reverse Engineering Difficult
![Page 61: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/61.jpg)
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
![Page 62: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/62.jpg)
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
![Page 63: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/63.jpg)
Obfuscation – Example Original source code in C++ – finds
the prime numbers in the interval [1 .. 50]:
63
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);}
![Page 64: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/64.jpg)
Obfuscation – Example (2)
Obfuscated source code – does the same but the code is made almost unreadable:
64
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("%d\t",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);}
![Page 65: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/65.jpg)
Obfuscation – Example (3)
Obfuscated source code – does the same but the code is made really horrible:
65
void _(int __,int ___ ,int ____,int _____){((
___/__)<=_____)? _(__,___+_____,____,_____ ):!
(___ % __) ? _(__,___+_____,___ % __, _____):(
(___ % __)==(___ / __) && !____)?(printf("%d "
,(___ / __)),_(__,___+_____,____,_____)):((___
%__)>_____ &&(___ % __) < (___ / __))?_(
__,___+_____,____+!((___ / __)%(___ % __)),
_____):(___ <__*__)?_(__, ___+_____,
____,_____):0;} int main(void){_(50,0,0,1 );}
![Page 66: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/66.jpg)
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 product66
![Page 67: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/67.jpg)
Code ProfilersANTS Profiler for .NET, YourKit Profiler
for .NET, Netbeans Profiler for Java, JProfiler, JProbe
![Page 68: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/68.jpg)
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
![Page 69: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/69.jpg)
Netbeans Profiler
69
![Page 70: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/70.jpg)
Netbeans ProfilerLive Demo
70
![Page 71: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/71.jpg)
Refactoring ToolsJustCode, ReSharper, IntelliJ IDEA, Visual Studio, Eclipse, Netbeans,
JDeveloper
![Page 72: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/72.jpg)
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
![Page 73: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/73.jpg)
Refactoring in Visual Studio
73
![Page 74: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/74.jpg)
Refactoring in Visual Studio
with / without JustCodeLive Demo
![Page 75: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/75.jpg)
Automated Build ToolsCMake, Ant, Maven, MSBuild
![Page 76: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/76.jpg)
Software Builds What means to build software?
The process of compiling and assembling the system's 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
![Page 77: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/77.jpg)
Sample C++ makefile on Linux
77
CC = 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)
![Page 78: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/78.jpg)
Sample Ant Build File
78
<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>
![Page 79: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/79.jpg)
AntLive Demo
![Page 80: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/80.jpg)
Continuous Integration ToolsCruiseControl,
CruiseControl.NET, Hudson, Team Foundation Server
![Page 81: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/81.jpg)
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
![Page 82: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/82.jpg)
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
![Page 83: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/83.jpg)
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
![Page 84: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/84.jpg)
CI Systems Comparison Matrix
Continuous integration systems – comparison: http://confluence.public.thoughtwor
ks.org/display/CC/CI%2BFeature%2BMatrix
84
![Page 85: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/85.jpg)
Continuous Integration with
TFSLive Demo
![Page 86: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/86.jpg)
Documentation GeneratorsJavadoc, Sandcastle, Doxygen, JSDoc
![Page 87: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/87.jpg)
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
![Page 88: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/88.jpg)
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 JavaScript88
![Page 89: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/89.jpg)
Javadoc Documentation:java.lang.String
Live Demo
![Page 90: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/90.jpg)
Project Planning and Management Tools
TRAC, Microsoft Project, JIRA
![Page 91: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/91.jpg)
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
![Page 92: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/92.jpg)
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
![Page 93: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/93.jpg)
Project Hosting and Team Collaboration
SitesSourceForge, Google Code, CodePlex, Project
Locker
![Page 94: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/94.jpg)
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
![Page 95: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/95.jpg)
Project Hosting Sites (2)
CodePlex – http://www.codeplex.com Microsoft's 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
![Page 96: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/96.jpg)
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
![Page 97: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/97.jpg)
Google CodeLive Demo
![Page 98: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/98.jpg)
Project Deploymentin the Public Clouds
AWS, GAE, Azure, AppHarbor, PHPFog, …
Public Clouds
![Page 99: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/99.jpg)
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
![Page 100: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/100.jpg)
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
![Page 101: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/101.jpg)
AppHarbor .NET CloudLive Demo
![Page 102: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/102.jpg)
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезанияASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET
курсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGapfree C# book, безплатна книга C#, книга Java, книга C# Дончо Минков - сайт за програмиране
Николай Костов - блог за програмиранеC# курс, програмиране, безплатно
?? ? ?
??? ?
?
? ?
??
?
?
? ?
Questions?
?
Development Tools
http://academy.telerik.com
![Page 103: 4. Software Engineering - development tools](https://reader035.fdocuments.net/reader035/viewer/2022070523/58ed61c31a28ab5a0f8b46ef/html5/thumbnails/103.jpg)
Free Trainings @ Telerik Academy
“Software Engineering" course @ Telerik Academy academy.telerik.com/.../software-engin
eering Telerik Software Academy
academy.telerik.com Telerik Academy @ Facebook
facebook.com/TelerikAcademy Telerik Software Academy Forums
forums.academy.telerik.com