3
0740-7459/14/$31.00 © 2014 IEEE NOVEMBER/DECEMBER 2014 | IEEE SOFTWARE 21 Editor: Diomidis Spinellis Athens University of Economics and Business, [email protected] TOOLS OF THE TRADE Software Development Tooling Information, Opinion, Guidelines, and Tools Diomidis Spinellis and Stephanos Androutsellis-Theotokis THIS COLUMN MARKS the end of a 10- year period over which the Tools of the Trade department has been appearing in IEEE Software. As of the next issue, its editor will be writing a department nearer to the magazine’s front page, so it seemed like a good opportunity to summarize what this column has presented over the years. This was done by first organizing the material into a mind map and then laying out the results in the two figures that appear in the following pages. Both figures also appear on the column’s blog (www.spinellis.gr/tools) with hyperlinks to each column’s text and in a format that can be printed as a poster. Figure 1 categorizes the major points of each column into information, opin- ion, and prescriptive guidelines. The information and opinion elements are grouped into eight broad themes: design, writing code, building, tooling, opera- tions, working with others, professional advancement, and software process. The presented guidelines add debug- ging, performance, and avoiding errors into the mix. Many columns offer addi- tional guidelines, often in a “Best Prac- tices” section. The titles appearing at the figure’s center end with the issue and volume number in which the column appeared. Figure 2 associates specific indica- tive tools with corresponding elements (such as “Continuous integration”). Search the Web for the names of a few tools appearing together, and you’ll find comparisons, extensive lists, and more related material. Not all tools appearing in the figure were mentioned in the col- umns, and many tools deserving a listing are missing. Nevertheless, if none of the tools in a specific category rings a bell, read the corresponding column to see how you can benefit from them. Back in 2005, the first column in this series lamented our industry’s under- spending on tool development. Ten years and 60 installments later, it seems that the first column was overly pessimistic. We’re blessed with many powerful tools that can enhance our work’s quality and our own productivity. The real challenge is getting to use them. Post your comments online by visiting the column’s blog: www.spinellis.gr/tools

Software Development Tooling - IEEE Computer Society · Software Development Tooling Information, Opinion, ... THIS COLUMN MARKS the end of a 10- ... the material into a mind map

Embed Size (px)

Citation preview

Page 1: Software Development Tooling - IEEE Computer Society · Software Development Tooling Information, Opinion, ... THIS COLUMN MARKS the end of a 10- ... the material into a mind map

0 7 4 0 - 7 4 5 9 / 1 4 / $ 3 1 . 0 0 © 2 0 1 4 I E E E NOVEMBER/DECEMBER 2014 | IEEE SOFTWARE 21

Editor: Diomidis SpinellisAthens University of Economics and Business, [email protected]

TOOLS OF THE TRADE

Software Development Tooling Information, Opinion, Guidelines, and Tools

Diomidis Spinellis and Stephanos Androutsellis-Theotokis

THIS COLUMN MARKS the end of a 10-year period over which the Tools of the Trade department has been appearing in IEEE Software. As of the next issue, its editor will be writing a department nearer to the magazine’s front page, so it seemed like a good opportunity to summarize what this column has presented over the years. This was done by � rst organizing the material into a mind map and then laying out the results in the two � gures that appear in the following pages. Both � gures also appear on the column’s blog (www.spinellis.gr/tools) with hyperlinks to each column’s text and in a format that can be printed as a poster.

Figure 1 categorizes the major points of each column into information, opin-ion, and prescriptive guidelines. The information and opinion elements are grouped into eight broad themes: design, writing code, building, tooling, opera-tions, working with others, professional advancement, and software process. The presented guidelines add debug-ging, performance, and avoiding errors into the mix. Many columns offer addi-

tional guidelines, often in a “Best Prac-tices” section. The titles appearing at the � gure’s center end with the issue and volume number in which the column appeared.

Figure 2 associates speci� c indica-tive tools with corresponding elements (such as “Continuous integration”). Search the Web for the names of a few tools appearing together, and you’ll � nd comparisons, extensive lists, and more related material. Not all tools appearing in the � gure were mentioned in the col-umns, and many tools deserving a listing are missing. Nevertheless, if none of the tools in a speci� c category rings a bell, read the corresponding column to see how you can bene� t from them.

Back in 2005, the � rst column in this series lamented our industry’s under-spending on tool development. Ten years and 60 installments later, it seems that the � rst column was overly pessimistic. We’re blessed with many powerful tools that can enhance our work’s quality and our own productivity. The real challenge is getting to use them.

Post your comments online by visiting the column’s blog:

www.spinellis.gr/tools

s6too.indd 21 10/3/14 1:41 PM

Page 2: Software Development Tooling - IEEE Computer Society · Software Development Tooling Information, Opinion, ... THIS COLUMN MARKS the end of a 10- ... the material into a mind map

TOOLS OF THE TRADE

22 IEEE SOFTWARE | W W W.COMPUTER.ORG/SOFT WARE | @IEEESOFT WARE

AcknowledgmentsThe column editor gratefully acknowl-edges the support of the following people, who have contributed informal reviews and insightful feedback over the past 10 years: Yiorgos Adamopoulos, Achilleas Anagnostopoulos, Dimitris Andreadis, Phillip G. Armour, Giovanni Asproni, Steve Berczuk, Grady Booch, Christian Brueffer, Wilko Bulte, Bryan Cantrill, Damianos Chatziantoniou, Konstanti-

nos Christidis, Al Davis, Theodore Dou-nas, Julian Elischer, Ruslan Ermilov, Martin Fowler, Marios Fragkoulis, Jian-nis Georgiadis, Robert Glass, Dimitris Glezos, Georgios Gousios, Junio C. Ha-mano, Poul-Henning Kamp, Panagiotis Kanavos, Vassilios Karakoidas, Isidor Kouvelas, George Kyriazis, Panagiotis Louridas, Christos KK Loverdos, Dimi-tris Mitropoulos, Marcel Moolenaar,

Mark Murray, George V. Neville-Neil, Ioannis Nikolaou, Panos Papadopoulos, Colin Percival, Wes Peters, Nancy Pou-loudi, Vassilis Prevelakis, Linda Rising, Greg Schueler, Hellen C. Sharp, Dag-Erling Smørgrav, Henry Spencer, Kostas Stroggylos, Alexandra Vassiliou, Rob-ert N.M. Watson, Greg Wilson, Rebecca Wirfs-Brock, Alexios Zavras, and George M. Zouganelis. In addition, the column

GuidelinesDear Editor 22(2)

The Way We Program 25(4)Inventive Tool Use to Comprehend Big Code 25(5)

Code Documentation 27(4)Start with the Most Dif­cult Part 26(2)

Getting the Most Out of the Web 28(1)elytS edoC 28(2)

Refactoring on the Cheap 29(1)Systems Software 30(3)

Tool Writing: A Forgotten Art? 22(4)

Working with Unix Tools 22(6)Sometimes the Old Ways Are Best 25(6)

Using and Abusing XML 25(2)Project Asset Portability 23(1)

The Tools We Use 24(4)

Drawing Tools 26(3)Virtualize Me 29(5)

The Frictionless DevelopmentEnvironment Scorecard 30(6)Bespoke Infrastructures 31(1)

Developing in the Cloud 31(2)

The Gatekeeper's Guide, or How to Kill a Tool 23(6)

Tool Building on the Shoulders of Others 26(1)

Version Control Systems 22(5)Git 29(3)

Basic Etiquette of Technical Communication 26(6)

Bug Busters 23(2)Software Tracks 27(2)

Debuggers and Logging Frameworks 23(3)

I Spy 24(2)Differential Debugging 30(5)

Choosing a Programming Language 23(4)It's About Time to Take Javascript (More) Seriously 27(3)

Java Makes Scripting Languages Irrelevant? 22(3)

Abstraction and Variation 24(5)

Lessons from Space 28(6)The Importance of Being Declarative 30(1)

On Paper 24(6)

Rational Metaprogramming 25(1)

Cracking Software Reuse 24(1)Choosing an Open Source License 27(1)

Choosing and Using Open Source Components 28(3)Package Management Systems 29(2)

APIs, Libraries, and Code 29(6)

A Pedagogical Framework forDomain-Speci­c Languages 26(4)

Silver Bullets and Other Mysteries 24(3)

UML, Everywhere 27(5)Faking It 28(5)

Portability: Goodies vs. the Hair Shirt 30(4)

First, Do No Harm 31(5)

Open Source and Professional Advancement 23(5)Job Security 26(5)

Farewell to Disks 27(6)

Software Builders 25(3)Continuous Integration and Its Tools 31(3)

Don't Install Software by Hand 29(4)Virtualize Me 29(5)

Service Orchestration with Rundeck 31(4)

Agility Drivers 28(4)

Avoidingerrors

Debugging

Performance

Writing code

Tooling

Softwareprocess

Design

Professionaladvancement

Writing code

Tooling

Workingwith others

Design

Professionaladvancement

Building

Operations

Softwareprocess

Effective code editingHow to understand code

Commenting guidelines

Ef­cient use of the WebRefactoring on the cheap

How to writesystems software

The importanceof identi­ers

Unix tools

XMLNeed for high-level tools

Declarative drawingVirtualization

Bespoke infrastructures

Cloud-based tools

Tools requiremanagement support

Build on theshoulders of others

Version control systemsEtiquette of technical

communication

Scripting languagesRational

metaprogrammingCode portability

AbstractionVariation

Modularity

Declarative approaches

Reuse and opensource components

Domain-speci­clanguages

Easy parallelism

Unmaintainable codewon't get you job security

Build toolsContinuous integration

System con­gurationmanagement tools

VirtualizationService

orchestration tools

Deployment advice

Agility driversTesting

Information & Opinion

Tools of the Trade: A Ten-Year Recap

Start with the most dif�cult partFollow style guidelines

Use simple interfaces

Use �at text-based �lesBeware of vendor lock-inAvoid friction

Use a high-level language

Utilize compiler options

Perform static analysis

Use assertions

Set library �agsIntroduce typesUse domain-speci�c languagesStructure aroundextensible architecturesBuild process support

Start bottom-upWork top-downLook at the generated codePlace code and data breakpointsUse remote debuggingPerform post-mortem debuggingAdd logging statements

Compare differences

Choose appropriateprogramming languagesDraw on paperScrap unmaintainable code

Keep code that works

Go for 80%

Leave safety margins

Standardize on UML

Preserve architectural properties

Maintain backward compatibility

Contribute to opensource software

Run under a pro�lerUse tracing toolsConsider main-memoryapproaches

Perform code and design reviews

Be polite Workingwith others

Check error returns

Invest in deployingand learning toolsThe Tools at Hand 22(1)

FIGURE 1. Major points of each Tools of the Trade column. The information and opinion elements are grouped into eight broad

themes: design, writing code, building, tooling, operations, working with others, professional advancement, and software process.

s6too.indd 22 10/3/14 1:41 PM

Page 3: Software Development Tooling - IEEE Computer Society · Software Development Tooling Information, Opinion, ... THIS COLUMN MARKS the end of a 10- ... the material into a mind map

TOOLS OF THE TRADE

NOVEMBER/DECEMBER 2014 | IEEE SOFTWARE 23

would not have been possible without the dedication and support of the IEEE Com-puter Society staff, in particular, Brian Brannon, Brooke Miner, Crystal Shif, Jennifer Stout, Dale Strok, Dennis Tay-lor, and Jennie Zhu-Mai. Finally, the edi-tor wholeheartedly thanks Warren Harri-son for providing him the opportunity to write this column, as well as Hakan Er-dogmus and Forrest Schull for supporting

it through their terms as the magazine’s editor in chief.

DIOMIDIS SPINELLIS is a professor in the Department of Management Science and Tech-nology at the Athens University of Economics and Business and the author of the books Code Reading and Code Quality: The Open Source Per-spective (Addison-Wesley, 2003, 2006). Contact him at [email protected].

STEPHANOS ANDROUTSELLIS- THEOTOKIS studied at Imperial College Lon-don, Johns Hopkins University, and the Athens University of Economics and Business. He is a software engineer.

Tools you want to be aware of

Unix tools

Virtualization

Cloud-based tools (one from each category)

Writing code and building it

Working with others

Version control systems

Debugging & improving your code

Before you start coding

Operations

System con�guration management tools

Service orchestration

Draw on paper Easy parallelism XMLReuse and open source components Declarative drawing

(Information, Opinion, Guidelines)

Effective code editing

Ef�cient use of the Web

Refactoring on the cheap

How to write systems software

Scripting languages Build tools

Continuous integration

Compare differences

Add logging statements Use tracing toolsPerform static analysis

Perform code and design reviews

- Vagrant- Docker- VMware- VirtualBox

- grep- head- jar- javap- jot- less- more- nm- sed- sort

- strings- tail- tar- uniq- wc- wget- xargs- yes- Cygwin- Outwit

- ar- awk- comm- cut- dd- diff- dumpbin- fgrep- �nd- fmt

- BitKeeper- ClearCase- Git- Bazaar

- Ansible- Boxen- Chef- CFEngine

- Capistrano- Fabric- Func- Knife

- Paper- Pencil- Eraser- Color markers- Highlighters

- Shell pipelines- GNU parallel- xargs -P- sgsh- make -j

Unix tools:- ATLAS- Framewave- Intel IPP- NAG Library for SMP- QtConcurrent

Libraries: - XMLStarlet- xgawk- xsltproc

- Apache- BSD- GPL- LGPL- MIT

Licenses:- RPM- Debian packages- Maven- Portage- FreeBSD Ports

Package management systems:- CPAN- MacPorts- Pkgsrc- CRAN- NuGet

Graphviz . dot . neato . circo . twopi

- pic- gnuplot- GMT- UMLGraph- Inkscape

- netpbm- PGF/TikZ- ImageMagick- D3.js- processing.org

- R Project: . ggplot2 . graphics

- Bitbucket- GitHub

Version control:

Remote application monitoring:-BugSense-Crittercism-Exceptional-New Relic-Sentry

- Box- DropBox- Google Drive- SkyDrive

Collaborative editing:

File sharing:

- Etherpad- Google Docs- Stypi- Microsoft Of�ce 365

Store fronts:- Google Play Store- Mac App Store- Windows Store

Payment processing:- Braintree- Chargify- PayPal- Stripe

- Pootle- Transifex- WebTranslateIt

Localization:

Real-time communication:- Google Hangouts- Grove.io- HipChat- Skype- sqwiggle

Issue tracking, project management, & collaboration:-Asana-Basecamp-FogBugz-GitHub-JIRA-Pivotal Tracker-Redmine-Trello-YouTrack

- Gmail- Outlook.com- Yahoo! Mail

Email:

Wiki work:- Con�uence- Bitbucket- GitHub

- Cloud9- VS Cloud

Programming:IT support:- Desk.com- Helpscout- Zendesk

- CampaignMonitor- Mailchimp- mailgun- SendgridA/B testing:

Bulk email campaigns:

- Optimizely

Deployment servers:- AWS- Google App Engine- Heroku- Microsoft Azure- Nodejitsu- Rackspace

Continuous integration:- Bamboo- Cloudbees- Codeship

- vim- Emacs- Your IDE

- Stack Exchange- (Stack Over�ow)- Google- Delicious- Wikipedia

How to understand code

- Eclipse Java Browsing Perspective- Understand C++- etags- Rational Rose

- Tracing tools- Pro�lers- Printouts

- sed -i- Edit - replace

- �nd | sed | sh

- select- poll- readv / writev- mmap- Logging

- JavaScript- Perl- Python- Ruby

- Ant- make- Maven

- Jenkins- TeamCity- Bamboo- CloudBees- Travis CI

- md5sum- dumpbin- nm- md5sum- ldd- diff- git bisect

- syslog- util.logging- log4j- Boost.Log- print

- ktrace- ltrace- NProf- strace- SystemTap- tcpdump- TracePlus

- APIS32- Application Veri�er- DTrace- EJP- gcov- gprof

- JConsole- truss- valgrind- Wireshark

- CheckStyle- Clang- Coverity Code Advisor- devAdvantage- ESC/Java2- Eclipse Codan

- ITS4- JLint- Lint4J- PC-Lint- PMD- PVS-Studio

- FindBugs- Flaw�nder- Frama-C- FxCop- HP Fortify- Intel Inspector

- Pylint- RATS- Rational AppScan- Splint

- Crucible- Differential (Phabricator)- Gerrit- Kiln- Review Board- Rietveld

- AWS EC2 - Subversion- Vault- Visual SourceSafe

- CTAN- MiKTeX- Cygwin

- OpenMP- Scala- Haskell- F#

Language-based:- Clojure- R/parallel- Erlang

- Darcs- Mercurial- Monotone- Perforce

- MCollective- Rundeck

- Puppet- Salt

- Xen- KVM- QEMU- SUSE Studio

- Source Insight- UMLGraph- Debugger- Enterprise Architect

FIGURE 2. Themes and tools. Not all tools appearing in the � gure were mentioned in the columns, and many tools deserving a

listing are missing.

See www.computer.org/software-multimedia for multimedia content related to this article.

www.computer.org/software-multimediacontent related to this article.

s6too.indd 23 10/3/14 1:41 PM