Software Development Tooling - IEEE Computer Society · Software Development Tooling Information,...
-
Upload
nguyenquynh -
Category
Documents
-
view
218 -
download
1
Transcript of Software Development Tooling - IEEE Computer Society · Software Development Tooling Information,...
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
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 Difcult 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-Specic 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
Efcient use of the WebRefactoring on the cheap
How to writesystems software
The importanceof identiers
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-speciclanguages
Easy parallelism
Unmaintainable codewon't get you job security
Build toolsContinuous integration
System congurationmanagement 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
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