|
NEW!!! TOOOO Many results in general search?!! Try this customized search engine for searching online books
|
|
Must Software Research Stand Divided? A not-so-subtle divide separates empirical and constructionist software research. Constructionists maintain that software research should be about creating technologies, devising new methods. Empiricists are interested in studying and understanding existing approaches. The antagonism between the two camps does not serve our industry well?it needs both modes of research.
 |
How Do We Build Trust into E-commerce Web Sites? Trust is a subjective, user-centric, context-dependent concept, and is thus difficult to define universally. On the Internet, several factors make trust more difficult to build, explaining why some successful brick-and-mortar retail chains have been unable to translate their reputation to the virtual platform the Web offers. Researchers in many fields have been interested in how to build trust in e-commerce sites. To address this issue, the authors reviewed the available literature on the topic, examining 28 relevant publications in depth to identify relationships among factors that impact trust.
 |
|
|
The Biological Half-Life of Software Engineering Ideas The first installment of this new column on professional development discusses how some software engineering ideas have a half-life. The author conjectures that this half-life is roughly five years, and outlines the need for software engineers to thus stay abreast of new technologies.
 |
Developing Flexible Software Using Agent-Oriented Software Engineering Software agents are associated with modern industrial software. In various application fields such as e-business, telecommunications, logistics, and industrial automation, software based on agents seems to make the challenges in modern applications easier to overcome. However, it's often unclear what a software agent is and why problems can be better solved with it. Is it concerning a technology, an architecture, or a programming concept? This article presents a general introduction to software agent concepts from the software engineer's perspective, explaining the theoretical basis and clarifying to which type of problem software agents might represent a reasonable approach.
 |
In or Out? Many people do great work but still can't satisfy their customers. When this happens to you, either learn to live with the results or take the reins and change them. Whichever path you choose, commit to it.
 |
Where's My Jetpack? Software development tools often fail to deliver on inflated promises. Rather than the predicted progression toward ever-increasing levels of abstraction, two simple trends have driven the evolution of currently available software development tools: integration at the source-code level and a focus on quality. Thus source code has become the bus that tools tap into for communicating with other tools. Also, focus has shifted from defect removal in the later phases to defect prevention in the earlier phases. In the future, tools are likely to support higher levels of abstraction, perhaps in the form of domain-specific languages communicated using XML.
 |
Using Static Analysis to Find Bugs Static analysis examines code in the absence of input data and without running the code. It can detect potential security violations (SQL injection), runtime errors (dereferencing a null pointer) and logical inconsistencies (a conditional test that can't possibly be true). Although a rich body of literature exists on algorithms and analytical frameworks used by such tools, reports describing experiences in industry are much harder to come by. The authors describe FindBugs, an open source static-analysis tool for Java, and experiences using it in production settings. FindBugs evaluates what kinds of defects can be effectively detected with relatively simple techniques and helps developers understand how to incorporate such tools into software development.
 |
|
|
Automating Software Testing Using Program Analysis During the last 10 years, code inspection for standard programming errors has largely been automated with static code analysis. During the next 10 years, we expect to see similar progress in automating testing, and specifically test generation, thanks to advances in program analysis, efficient constraint solvers, and powerful computers. Three new tools from Microsoft combine techniques from static program analysis, dynamic analysis, model checking, and automated constraint solving while targeting different application domains.
 |
Refactoring Tools: Fitness for Purpose Refactoring tools can improve the speed and accuracy with which developers create and maintain software?but only if they are used. In practice, tools are not used as much as they could be; this seems to be because sometimes they do not align with the refactoring tactic preferred by most programmers, a tactic the authors call "floss refactoring." They propose five principles that characterize successful floss-refactoring tools?principles that can help programmers to choose the most appropriate refactoring tools and also help toolsmiths to design tools that fit the programmer's purpose.
 |
Code Conjurer: Pulling Reusable Software out of Thin Air Accelerating the software development process by assembling new applications from existing software assets has been a goal of the IT industry for many years. However, most of today's systematic software reuse uses heavyweight approaches such as product-line engineering. Now, with the explosion in open source software repositories and the advent of a new generation of powerful software search engines, this is set to change. Code Conjurer is an Eclipse plug-in that extracts interface and test information from a developer's coding activities and uses this information to issue test-driven searches to a code-search engine. It presents components matching the developer's needs as reuse recommendations without disturbing the development work. Automated dependency resolution then allows selected components to be woven into the current project with minimal manual effort.
 |
Volta: Developing Distributed Applications by Recompiling Mainstream languages and tools are tailored for sequential, nondistributed applications, with support for distributed computing provided only in library APIs. Such programming environments force developers to make decisions early in the application life cycle about where the code should run, structuring the entire application around partitioning decisions. Performance measurement might reveal that the original partitioning was wrong, but redistributing the application is expensive because redistributing is restructuring. This article describes a new kind of tool suite that recompiles executables into a distributed form on the basis of declarative user annotations, inserting most of the necessary remoting and synchronization boilerplate code and facilitating post hoc instrumentation to drive quantitative redistribution. Because the tools operate on the intermediate language CIL (.NET Common Intermediate Language), they're compatible with a wide variety of .NET programming languages and eventual execution environments, even those that don't support CIL directly, such as JavaScript.
 |
Tool Support for Continuous Quality Control Over time, software systems suffer gradual quality decay and therefore costs can rise if organizations fail to take proactive countermeasures. Quality control is the first step to avoiding this cost trap. Continuous quality assessments help users identify quality problems early, when their removal is still inexpensive; they also aid decision making by providing an integrated view of a software system's current status. As a side effect, continuous and timely feedback helps developers and maintenance personnel improve their skills and thereby decreases the likelihood of future quality defects. To make regular quality control feasible, it must be highly automated, and assessment results must be presented in an aggregated manner to avoid overwhelming users with data. This article offers an overview of tools that aim to address these issues. The authors also discuss their own flexible, open-source toolkit, which supports the creation of dashboards for quality control.
 |
|
|
Theater Improvisers Know the Requirements Game This article introduces improvisational theater, or improv, to support team-based innovation in requirements processes. It proposes improv to help workshop participants develop requirements soft skills through practice and play. The authors describe and demonstrate different improv techniques with simple examples, then advise readers on how to introduce them into requirements projects.
 |
Enabling Change Enabling continued, steady change requires that we integrate design corrections and adjustments into the natural course of development.
 |
Consider Multiple Solutions Design teams rarely consider multiple solution ideas before committing to one. They often forget that an even better idea could be just around the corner, and consider alternative ideas only when they don't like the current one. Using sketchboarding, design studio, or a combination of these two techniques can let teams quickly ideate over many solutions. They then have a chance to arrive at a solution that no one individual had thought of.
 |
Achievements and Challenges in Cocomo-Based Software Resource Estimation This article summarizes major achievements and challenges of software resource estimation over the last 40 years, emphasizing the Cocomo suite of models. Critical issues that have enabled major achievements include the development of good model forms, criteria for evaluating models, methods for integrating expert judgment and statistical data analysis, and processes for developing new models that cover new software development approaches. The article also projects future trends in software development and evolution processes, along with their implications and challenges for future software resource estimation capabilities.
 |
A Replicated Survey of IT Software Project Failures Despite various industry reports about the failure rates of software projects, there's still uncertainty about the actual figures. Researchers performed a global Web survey of IT departments in 2005 and 2007. The results suggest that the software crisis is perhaps exaggerated and that most software projects deliver. However, the overall project failure rate, including cancelled and completed but poorly performing projects, remains arguably high for an applied discipline.
 |
Inventive Tool Use to Comprehend Big Code Software developers often need to understand a large body of unfamiliar code with little or no documentation, no experts to consult, and little time to do it. A post appeared in January 2008 on Slashdot, a technology news Web site, asking for tools and techniques that could help. This article analyzes 301 often passionate and sometimes articulate responses to this query, including the themes and the associated tool recommendations. The most common suggestions were to use a code navigation tool, use a design recovery tool, use a debugger to step through the code, create a runtime trace, use problem-based learning, ask people for help, study the code from top down, and print out all the code. This analysis presents an intriguing snapshot of how software developers in industry go about comprehending big code.
 |
Nine Things You Can Do with Old Software Every new line of code quickly becomes legacy. When that legacy mounts, it forms a significantly massive pile of software, which cannot be ignored. This article discusses what we can do intentionally with such piles, from abandonment to evolution and many things in between.
 |
Negative Productivity and What to Do about It Three anecdotes show how one member of a work team can decrease the whole team's productivity.
 |
|
|
|
ONLINE FORUM
|
|
|