Designing and testing embedded systems

Having worked with both C and embedded systems for a major of my professional time I have always found it interesting to apply different software development methodologies and practices in an embedded environment.

One such practice is test driven development (a.k.a. tdd).

Often, I’ve heard the excuse that various ideas can not be applied to an embedded environment just because it is an embedded environment.

This reasoning is something that I’ve always found a bit odd since, after all, embedded systems are man made, i.e. designed by man and not designed by nature.

So, as I see it, the only thing preventing us from doing so is our own willingness to it.

It is my experience that a majority of embedded systems testing requires running tests on target hardware which reduces the development speed.

One result of introducing test driven development in an embedded environment would probably be different design, a design that would allow us to conduct testing without the need for the target environment.

It would question how we have designed our system and this might offend some more ”senior” people that have preconceived ideas of what ”good” design it.

James Grenning, author of ”Test Driven Development for embedded C”, continues to produce interesting material that shows that it is fully possible to conduct unit testing in an embedded environment. He recently published a number of articles on the topic ”Unit testing RTOS dependent code” (1,2,3) that shows how testing can conducted by mocking the RTOS and using test double functions.

These articles shows us that there are alternative ways to design and conduct testing in an embedded environment.

What do you think? Is this the way to go when testing embedded systems? Is it even related to embedded systems only or is this also applicable in desktop environments? Leave a comment!

Respecting meeting appointments

Have you ever been waiting for one or two persons to show up so that a meeting can start? Or even worse, maybe there are several persons waiting?

As indicated by the Dilbert comic strip below, one could consider this as a sign of disrespect. I would argue that this is definitely the case when the the same person is constantly more or less late to meetings.

What do you think? Is being late to meeting a sign disrespect? Leave a comment and let us know!

The Three P’s of Time Management

I read an interesting article on the Elance blog by Kirstin O´Donovan called ”The Three P’s of Time Management”. It points out the three P’s of time management that you can apply to get more done and feel more productive.

  • Planning
  • Prioritizing
  • Performing

I agree with her conclusion that planning, prioritizing and performing are the keys to success and that if you can´t find more time, change the way you use the time you already have!

What do you think? Are you following the three P’s of time management? Leave a comment and let us know!

The solid principles as one liners

SOLID is an acronym which stands for

  • Single responsibility principle – every software entity (object, module etc) should have only a single responsibility and one reason to change.
  • Open/closed principle – every software entity should be open for extension, but closed for modification.
  • Liskov substitution principle – closely related to design by contract and it means that objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.
  • Interface segregation principle – many client specific interfaces are better than one general purpose interface, i.e. that a client should not depend on methods they don’t use.
  • Dependency inversion principle – a software entity should depend upon abstractions and not depend on details.

See Uncle Bob’s blog post for more information.

Which features to add or bugs to fix?

In 1906, the Italian economist Vilfredo Pareto created a mathematical formula to describe the unequal distribution of wealth in Italy. He observed that 20% of the people owned 80% of the wealth.

This is what has come to be know as the Pareto Principle (a.k.a 80/20 rule or the law of the vital few).

The point is that all of the work you perform does not result in equal value being created, i.e. the cost is not always equal to the value, on the contrary.

This is important to understand when prioritizing between which features should be added to a product or which bugs should be fixed, which is something that even Microsoft learnt a long time ago.

Trick is ”only” to know which features and/or bugs that adds most value to the product.

How do you to figure out which features to add or bugs to fix? Do you use any specific method for prioritization? Let us know and join the discussion by adding a comment!

The hierarchy of Company Statements

Every company should, at least, have thought about why they exist, where they want to go and their goals. Preferably they should have written it down in a number of statements.

But what statements should a company have?

Here is an hierarchy of company statements that each company should consider to define and communicate

  • Vision Statement – Defines what the company ideally want to become in the long term.
  • Mission Statement – Defines why the company exist, i.e. the core purpose of the company, and what it does to reach the vision.
  • Statement of Core Values – Defines what the company believe in and how it will behave.
  • Strategy Statement –  Defines how the company will proceed, by including the objectives, scope and advantages for the organization.

Have your company clearly defined and communicated these statements?

Let us know by leaving a comment!

The key elements of management

Have you ever wondered what management does? Or maybe what management should do?

As with many other areas in life, management is something that is subjectively defined.

According to Fayol, also known as the father of the modern operational management theory, there are 5 main elements, or sometimes referred to as functions, that a manager needs to perform. These functions are planning, organizing, commanding, coordinating and monitoring.

While Koontz and O´Donnel define the key elements of management as the following five elements planning, organizing, staffing, leading (or directing) and controlling.

Peter Drucker, in his book ”The Principles of Management”, defines management as a multi-purpose organ that manages business and manages managers and manages workers and work.

As I see it, management is about getting a group of people to collectively reach the objectives of the organization by using the available resources as efficiently as possible within given constraints.

Is this what your manager is doing? Maybe your are a manager, if so are you performing these functions or are you preforming other functions?

Let us know and leave a comment!

How to manage your source code with Git, Gerrit and Jenkins

Are you managing a piece of code? Are there several contributors to that code? Maybe some are less know to you which provides questionable quality? How do you control of the incoming changes to the code?

If you are in an code environment which uses Git as a version control system then using Gerrit can help you with the process of reviewing code changes. Adding Jenkins to the game can be a game changer…

Never heard about Gerrit? As described by Google…

Gerrit is a web based code review system, facilitating online code reviews for projects using the Git version control system.

Never heard about Jenkins?

Jenkins is a continuous integration tool which provides continuous integration services for software development, such automatic build and test of code.

The following video introduces how one could use Git and Gerrit together with Jenkins. For any one that which to take control of their code and its quality then this is the way to go in the future!

Using Gerrit Git Review with Jenkins CI Server from Alex Blewitt on Vimeo.

What do you think? Do you already use Git , Gerrit and Jenksin? Let us know by leaving a comment!