Introducing BDD | Dan North History: This article first appeared in Better Software magazine in March 2006. It has been translated into Japanese by Yukei Wachi, Korean by HongJoo Lee, Italian by Arialdo Martini and French by Philippe Poumaroux and most recently into Spanish by Oscar Zárate, Turkish by Selim Öber and Russian. I had a problem. The deeper I got into TDD, the more I felt that my own journey had been less of a wax-on, wax-off process of gradual mastery than a series of blind alleys. My response is behaviour-driven development (BDD). Test method names should be sentences My first “Aha!” renders something like this: The word “test” is stripped from both the class name and the method names, and the camel-case method name is converted into regular text. Developers discovered it could do at least some of their documentation for them, so they started to write test methods that were real sentences. A simple sentence template keeps test methods focused An expressive test name is helpful when a test fails
Top 10 Websites to Learn Coding (Interactively) Online Gone are the days when programming languages could only be mastered programmers like Bill Gates, who later got to dominate the world by storm. Now everyone holds the same potential, and the chance to learn and even master programming language easily. Today, we will show you 10 interactive websites that will help you do that. That’s right, forget about complicated setups and black, cold command prompts that make you want to quit before you start, and say hi to 10 educational websites with instant and interactive lessons that teach you programming languages like HTML, CSS, PHP, Ruby and even iOS. Recommended Reading: Getting A College Degree Or Self-Learning? Kickstart the beginning of your new path into programming today! Codecademy Codecademy is indisputably the most famous website to teach you to code interactively, thanks to its helpful interface and well-structured courses. Inside each lesson is a panel that explains necessary code and instruction. Code Avengers Code School Treehouse
How To Implement Scrum in 10 Easy Steps When I first encountered agile development, I found it hard to understand. Okay, I might not be the brightest person you’ve ever met! But I’m not stupid either, I think :-) There’s a myriad of different approaches, principles, methods and terms, all of which are characterised as ‘Agile’. And from my perspective, all this ‘noise’ makes agile software development sound far harder, far more scientific, and far more confusing than it really needs to be. For this reason, I favour the Scrum agile methodology. Sure, it’s great to have a deep understanding of the underlying values and principles of agile development. Sure, it’s great to have a thorough understanding of why Scrum works. Sure, it’s great to know lots of case studies where Scrum has been applied and try to relate them to your own individual situation. But, fundamentally, I believe you can implement Scrum without all this knowledge. In these 10 posts, I outline specifically how to implement Scrum in 10 easy steps: Kelly.
Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects that mimic real objects for testing. Most language environments now have frameworks that make it easy to create mock objects. What's often not realized, however, is that mock objects are but one form of special case test object, one that enables a different style of testing. In this article I'll explain how mock objects work, how they encourage testing based on behavior verification, and how the community around them uses them to develop a different style of testing. I first came across the term "mock object" a few years ago in the XP community. Since then I've run into mock objects more and more. But as often as not I see mock objects described poorly. This difference is actually two separate differences. (In the earlier version of this essay I had realized there was a difference, but combined the two differences together. Regular Tests I'll begin by illustrating the two styles with a simple example.
Pseudocode Standard Pseudocode is a kind of structured english for describing algorithms. It allows the designer to focus on the logic of the algorithm without being distracted by details of language syntax. At the same time, the pseudocode needs to be complete. It describe the entire logic of the algorithm so that implementation becomes a rote mechanical task of translating line by line into source code. In general the vocabulary used in the pseudocode should be the vocabulary of the problem domain, not of the implementation domain. Extract the next word from the line (good) set word to get next token (poor) Append the file extension to the name (good) name = name + extension (poor) FOR all the characters in the name (good) FOR character = first to last (ok) Note that the logic must be decomposed to the level of a single loop or decision. Each textbook and each individual designer may have their own personal style of pseudocode. REPEAT-UNTIL is a loop with a simple conditional test at the bottom.
promisedata - Data for reusable SE experiments What is PROMISE? PROMISE= PRedictOr Models In Software Engineering. Mantra= Software management decisions should be based on well-understood and well-supported predictive models. Collecting data from real world software engineering projects is problematic. Frequently asked questions: FAQ1: How to reference this data? T. FAQ2: How to view the data? Just read the on-line files. FAQ3: This repo reports "Sorry, truncated results. View the data via the simpler web-based Subversion interface. e.g. see FAQ4: How to read/write comments on the data? Go to the on-line wiki. FAQ5: How to report a bug with the data? Add an issue. FAQ6: How to contribute new data? Place it on-line somewhere then report new data. FAQ7: How to meet the PROMISE community? Come along to the annual conference on predictive models in SE 2012: co-located with ESEM'12
Get started with testing from top to bottom Image via foldedstory.com We are regularly talking to teams who are just starting out with testing their application. Some of them have a few tests, but don’t know where to go next. Others don’t test at all and need help to get started. One team mentioned they felt overwhelmed as there is so much they could test. By starting to test your application from top to bottom you can get over this easily. Start from the top By testing your application you can always be sure the most important steps users can take in your application work. As easy as this sounds we’ve seen teams struggle with coming to that conclusion and then following through. You should start by defining what the most important steps in your product are. Get everyone in your team to write down 8 scenarios they think are the most important ones in your application. All of them should be structured with Given, When and Then steps. Another example would be And one more This should only be the beginning of testing your application.
ch02 An algorithm is a set of rules that can be obeyed to solve a problem, and computer scientists tend to talk of executing an algorithm or a program to effect that solution. In elementary computing, these rules have some important restrictions placed on them: the set of rules must be finite; the rules must be followed in some definite sequence, until a satisfactory result is achieved; the rules must cover any awkward situations that arise; only one rule may be obeyed (that is, only one operation may be performed) at a time. Achieving self-consistency in this respect is sometimes fairly tricky! In fairness it should be pointed out that algorithms - as with so much else in science - are designed to operate within a model of reality which is often restricted and simplified. This chapter aims to expose you to a semi-formal way of developing algorithms in a way that leads slowly but naturally towards computer coding in a language like Java. 2.1 Sequential algorithms /* This is a comment */
Estimation is at the root of most software project failures | Rob Bowley I believe estimation, and the way it’s regularly misused, is at the root of the majority of software project failures. In this article I will try to explain why we’re so bad at it and also why, once you’ve fallen into the trap of trying to do anything but near future estimation, no amount of TDD, Continuous Delivery or *insert your latest favourite practice here* will help. The simple truth is we’ll never be very good at estimation, mostly for reasons outside of our control. However many prominent people in the Agile community still talk about estimation as if it’s a problem we can solve and whilst some of us are fortunate to work in organisations who appreciate the unpredictable nature of software development, most are not. I recently tweeted something which clearly resonated with a lot of people: It was in response to this article Mike Cohn posted proposing a technique for providing estimates for a full backlog of 300(!) Right? Wrong. 1. 2. Estimates are rarely ever just estimates