Easy task estimation with Three-point estimation technique

Agile, Project Management
Among many tasks performed during the project life cycle, one thing that simply cannot be avoided is the task estimation. Accurate time estimation is a crucial skill in project management, and it affects all the other phases of the project. The project planning is depending on accurate estimation and Stakeholders often judge if a project was successful or not depending on whether it has been delivered on time and on budget. Task List To get to the estimation, we would typically start with defining a task list. In Agile Methodology a task list is called Product or Sprint Backlog, while in general Project Management is known as Work breakdown structure (WBS). Work breakdown structure is a list of tasks that, if completed, will produce the final product. The way the work is…
Read More

Introduction to Test Driven Development (TDD) by TypeMock

Agile, Programming, Uncategorized
TypeMock is offering a free Webinar around Test Driven Development. Everyone can register by following this url: http://www.typemock.com/test-driven-development-sept. Registration is closing on 12th of September 2012, so hurry up. In case you are not able to register you may follow this link http://www.typemock.com/webinars/ for an offline view. Learn: The difference between unit testing and Test Driven Development (TDD) Benefits of TDD Problems and Pitfalls and How to Overcome Them Principles of TDD How to test both new and complicated legacy code with TDD
Read More

Agile software development tools and techniques – introduction

Agile, Programming, Project Management, Software Architecture
I've started adopting what I could call "agile" way of developing software only in 2007-2008. Since then I've become a Certified Scrum Master and trying to adopt as much techniques and methodologies to make the process of developing software in my team as much as possible. I am sure that I am still far from saying that it is perfect and there is always room for improvement :). Agile for me is definitively the way to go, but be aware, it is not a silver bullet. There is really a lot to say about agile, and internet is full of articles related to its various topics. I wanted to honor it with this short article putting what I believe are the most important parts of agile that I came across…
Read More

Mocking with Moq

Agile, Programming
In object oriented programming, mock objects are simulated objects that mimic the behavior of real objects. Mock objects are usually used in Unit Testing. Mock objects are exactly created to test the behavior of some other (real) object. Therefore, mocking is all about faking the real object and doing some operations in a controlled way so that the returned (test) result is always valid. The first question that is asked is "Why to use mock objects?", and there are several reasons for this. imagine you have a real object with the following characteristics (the list is taken from Wikipedia): the object supplies non-deterministic results (e.g., the current time or the current temperature); has states that are not easy to create or reproduce (e.g., a network error); is slow (e.g., a complete database, which…
Read More

List of Visual Studio Code Refactoring tools

Agile, Programming
By continuously improving the design of code, we make it easier and easier to work with. This is in sharp contrast to what typically happens: little refactoring and a great deal of attention paid to expediently adding new features. If you get into the hygienic habit of refactoring continuously, you'll find that it is easier to extend and maintain code. —Joshua Kerievsky, Refactoring to Patterns[2] [caption id="attachment_1054" align="alignleft" width="300"] Code Refactoring[/caption] Refactoring is one of the main pin-points of the agile programming (I have previously written an article about Refactoring with Composed Method pattern) and should be supported by the great tools. The following list contains the Code Refactoring tools for Visual Studio known to me at the time of writing. I am just presenting the list and I am…
Read More

AOP – Method interception with Spring.NET

Agile, Programming
Spring.NET is a great open-source framework with rich capabilities and a large amount of "plugins" or services that are implemented around the Spring Core. In this post I am going to discuss the same content discussed in one of the earlier posts (applied to PostSharp framework), which is about how to apply Aspect Oriented Programming specifically the method interception but this time in Spring.NET. I am using the Spring.AOP that can be easily referenced in the project via nuget. In order to start lets check the Spring.NET AOP naming convention. AOP terminology in Spring.NET The text in this section is taken from the http://www.springframework.net/doc-latest/reference/html/aop.html#aop-introduction-advice-types page. All credits to the author of the text. Let us begin by defining some central AOP concepts. These terms are not Spring.NET-specific. Unfortunately, AOP terminology…
Read More

AOP – Method interception in PostSharp with OnMethodBoundaryAspect

Agile, Programming, Software Architecture
For general information about the Aspect Oriented Programming please refer to the earlier post: Aspect Oriented Programming (AOP) basics In general, PostSharp offers a great deal of different types of predefined aspects that can be used and applied on methods, properties, events, fields, etc. The list below is directly taken from the PostSharp documentation. TypeLevelAspect: Which is a base class for all aspects applied on types OnExceptionAspect: Aspect that, when applied to a method, defines an exception handler around the whole method and calls a custom method in this exception handler. MethodLevelAspect: Base class for all aspects applied on methods. MethodInterceptionAspect: Aspect that, when applied on a method, intercepts invocations of this method. MethodImplementationAspect: Aspect that, when applied on an abstract or extern method, creates an implementation for this method.…
Read More

Aspect Oriented Programming (AOP) basics

Agile, Software Architecture
What is Aspect Oriented Programming? In very simple terms AOP is a software programming technique that helps managing cross cutting concerns in software applications. Before describing what “Cross cutting concern” is, we should mention the Separation of Concerns (SoC) paradigm first: When separating concerns, every class or method should be as modular as possible and should be responsible for only "one" thing at a time. In other words, if you have a class that is calculating the yearly mortgage, the same class shouldn’t be responsible of holding the logging logic as this is not the main concern of the class. The main purpose of the class in question would be to perform the calculation(s) connected to the mortgage and not to know how to log or write to the disk.…
Read More

Top 10 books every microsoft software developer should have

Agile, Books, Programming, Software Architecture
The following is a list of books that I would recommend to every experienced (or not) software developer. Very often I take inspiration by reading again and again some chapters as very often the knowledge (theory), if not practiced, tends to blurry overtime. Please take the list as it is without any order of precedence. Every book is important for its own topic. Patterns of Enterprise Application Architecture – Addison Wesley - Martin Fowler Domain-Driven Design: Tackling Complexity in the Heart of Software - (Evans) LINQ In Action – (Marguerie, Eichert, Wooley) Refactoring To Patterns – Addison Wesley - Joshua Kerievsky The Pragmatic Programmer: From Journeyman to Master - by Andrew Hunt and David Thomas Continuous Integration – Addison Wesley - Paul M. Duvall Microsoft.NET Architecting Applications for the Enterprise…
Read More

How to be agile in 10 basic steps

Agile, Programming
In order to be agile team in today's quite stressful and demanding time, software programming team should try to follow some if not all of the below listed practices in order to succeed: Test-first programming (or perhaps Test-Driven Development) Regular refactoring Continuous integration Follow a Simple design (YAGNI) Pair programming / Code Reviews Sharing the codebase between programmers A single coding standard to which all programmers adhere A common "war-room" style work area. Small Releases Optimize code in the end If followed coherently and constantly, the above listed practices will add more discipline to the team and add quality to the code. The following expanded diagram of all the practices (adapted from the wikipedia source), shows that there are some more points to be taken into consideration. [caption id="attachment_398" align="alignnone"…
Read More