Browsed by
Category: Organisational

What developers should know about acceptance tests details

What developers should know about acceptance tests details

Many people think that testing is a subject that only testers should worry about them. I completely disagree with that statement. I can event say that developers can write better tests technically and faster. They know the application. They have technical knowledge about creating reusable code and good architecture. Nevertheless, they shouldn’t write an end to end acceptance tests. They are too focused on functionalists that write. So it is possible that they repeat the testing patterns from the development time, not on overall application image.

That’s why it is important that test should be written by other people that write the functionality. It’s the time when separate test team comes into the scene. They are focused only on testing and don’t have a deeper look into the technical details. That’s very beneficial.

How developers and testers can cooperate

Testers use the result of developers work. Usually, they can’t modify the application code, so this is very important to write it in a proper way.

When we asked testers, which part of the test writing process takes the most of the time? It works on defining and testing page element selectors. That’s the reason why developers should pay particular attention to design HTML correctly.

They should remember about few simple rules:

  • always use name attribute for input elements
  • use id if an element is unique on the whole page and its subpages
  • use class always if the element contains any data relevant to the user or it can make an action
  • use proper HTML semantic elements to mark page areas

As you can see this is only four rules. All of them is very simple and helps to organize HTML document. Try to think about it when you write HTML next time. Maybe you have some other methods to organize HTML structure?

You can find more information about end-to-end testing in my book and newsletter

[mc4wp_form id=”510″]

Technical teams motivation

Technical teams motivation

During my whole professional experience I always wondering what is the most important factor of technical project success. This question is important although for every day work and our side projects. I also reveal that during the work on start up projects we can meet this problem.

Project success factor

We can’t definitely say that it is one the most important success factor for sure. Great skills of team members, outstanding idea or good architecture can be important, but it means nothing without one the factor.

Motivation

We can create a great team composed of friends and helpful folks but if we don’t take a special consideration about people motivation we can just stay with a technically masterpiece but not finished project at the end. Also without motivation team can be not as productive as it should be. It is harmful for project creation. We can see this in almost every project.

On regular commercial projects we can observe different phases of interests. At the beginning when we try to solve some problems we have big motivation. We can see a direct impact on our customers. We encounter many initial problems and we can solve it. People have many interesting work to do. But after some time all this willingness to work may disappear. Then we will have a much less desire to give our energy for that projects. This is especially visible in further – maintenance phase of projects. Some people on this moment can take a decision to change a job, which could be damaging for project.

It is also happens when we are working on our side projects or start ups. In these cases, I can say that, it is even more important to keep motivation of our team. When we are working on some project without any financial gratification, we should know what can motivate your team and do this.

Moving motivators

The first part of motivation management is to identify what is the motivators of your people. We can ask them directly, but let’s think for a while if you are able to specify and name what motivates you the most in your every day work or in side projects. Probably it won’t be easy. It was quite hard exercise for me at the beginning. Just as for your team mates.

However some times ago my friend introduced me an interesting tool, that help me to identify our motivations. It is Moving Motivators. This conception define 10 groups of motivation factors:

  • acceptance
  • curiosity
  • freedom
  • status
  • goal
  • honor
  • mastery
  • order
  • power
  • relatedness

The main part of this method is defining which motivators is the most important for you.

  1. At first you should place them in order from left – least important to right – the most important.
  2. Then you can tell how you think that these motivators are fulfilled in current project. Move card up if project positively affect this motivation and down otherwise.
  3. At the end you can think what can you do to move your all motivations up (especially these more important).

That’s all. This is very simple but powerful method that can gives you a very comprehensive view of your team motivations. Everyone has a different view, so it is important to do this individually.

Now you can print that cards and try it on your team mates.

What do you think about that method? What is your method to explore and improve people motivations?

Image source

Every day managing knowledge

Every day managing knowledge

Posts in this series:
1. Knowledge transfer
2. Knowledge transfer situations

All the tasks related to transferring knowledge would be much easier if the company manages knowledge in teams properly. It is very important in every day of work. We will describe here, how to do this effectively, starting from the beginning of work for a new employee.

Starting work

At the beginning of work in each company, new employee have a lot of to do before he will be able to start developing: download software, configure workstation or customize tools. Many of these task are very repeatable. Thus installation and configuration processes could be automated.

It can be done using following tools:

In many cases these tools are not enough to automate all required actions (e.g. signing papers). To automate this part we can create an ordered list of actions to perform. Good example could be the Trello company, which creates that kind of list for many typical actions:

https://medium.com/@Liz_Hall1/onboarding-new-hires-with-trello-ecc87e87ffd5#.nlvikoahp
https://trello.com/b/MmaVr9Hw/onboarding-new-hires-public-board

Everyday managing

Important part of knowledge managing in everyday work is to define level of complexity and way how to stay consistent with it. To achieve this, we have to show benefits to our team members. It can motivate them to truly follow the principles. It could also help them to improve these rules by themselves.

Most of the team knowledge is distributed among all team members. The main goal is to transfer these information from individuals to one shared medium. As it was written in previous part, the main properties of good knowledge management system is to store data in shared, simple and easy to access form.

Business knowledge

Storing business understanding in shareable place could save us a lot of time during the support stage. For example time spending on asking business the same questions twice by different team members. The crucial part is a consistent language understandable by both sides: business and developers. The simplest choose for this purpose are visual diagrams.

My favourite diagram is business process flow. It gives a wide view on the primary activity of business and how our system could help them with their work.


https://technet.microsoft.com/en-us/library/dn887193.aspx

There are many examples of business diagrams that could be useful for us. It is mostly depending of particular company and its needs. Good source for inspiration of that kind of visuals is one of architecture frameworks (e.g. TOGAF) http://www.togaf.info/togaf9/togafSlides9/TOGAF-V9-Sample-Catalogs-Matrics-Diagrams-v2.pdf

Soft knowledge

During development there are many moments when developers need to consult something with the business team or other developers. To handle this communication we should also have one common tool. The most popular software to manage it are Confluence and Slack. The first one – Confluence – is more commercial and generally bigger product for a corporate customers. It is very customizable and powerful. It has also quite good and steep pricing politics – friendly for small companies. Whereas Slack is more popular in Open-Source and startups community. Both tools work a little differently, but they are used for the same purposes – storing, managing knowledge and help to communicate with other team members.

AppVeyor – Continues Integration for .NET/JavaScript – configuration

AppVeyor – Continues Integration for .NET/JavaScript – configuration


Source

Some time ago I have been looking for some Continuous Integration engine for my Open Source project hosted on GitHub. I found a list of popular services https://github.com/ligurio/Continuous-Integration-services/blob/master/continuous-integration-services-list.md. My general requirement was support to JavaScript and .NET projects. Moreover it should be possible to run tests within this engine. I want to ensure the quality of my projects and I want to be able to detect failing test as quickly as possible after each commit. Also it would be nice to have a method to run deployment directly from this service.

After analysis of few different services I have chosen AppVeyor, because it meets all my expectations. This is a simple on-line service which is free for public projects hosted on GitHub, Bitbucket or VisualStudio Online.

Configuration for different project types

.NET

For .NET application the most important feature is just to build whole solution and run tests for specifics projects. That’s what we want to configure.

I will explain the configuration on example public GitHub project.

At first, we should add a project to our account.

Add project in AppVeyor

Then we can test, if build for this project succeed. Probably not, because we didn’t configure NuGet for our project. Generally NuGet should be configured to don’t store all packages on repository. Then it can be automatically downloaded by this package manager. That’s why we should tell AppVeyor to download this package before building the project. We should only add a special script to execute before build in Build tab in Configuration options.

nuget restore

Configure NuGet in AppVeyor .NET project

For test configuration it is enough to trust “Automatic discovery” option. It works well for NUnit tests and according to list https://www.appveyor.com/docs/running-tests it supports most of the popular test libraries.

Finally we can rerun build for our project to see that commit becomes green and all tests passes.

Green build and tests

JavaScript

Configuration for JavaScript project is a bit more difficult than for .NET. Because this CI server is based on Visual Studio, it is easier to configure it outside of web page. We should create a file named appveyor.yml in the main directory of our project. This is another method for configure the build process. You can find more information about this file in https://www.appveyor.com/docs/build-configuration.

In our case we want to run npm install phase and also run test from package.json configuration file. Of course, you can have different configuration of npm tasks, but the only one thing that you need to do is to modify this definition file to match your npm/gulp task names.

# Install scripts. (runs after repo cloning)
install:
  # Get the latest stable version of Node.js
  - ps: Install-Product node
  # install modules
  - npm install

# Post-install test scripts.
test_script:
  # Output useful info for debugging.
  - node --version
  - npm --version
  # run tests
  - npm test

# Don't actually build.
build: off

Before we run npm we have to be sure that we install it. It can be done with PowerShell command Install-Product node.

Notification

It is very useful to set up a notification system to inform you immediately about the build status. We can do this in project settings. We can configure it to send email or Slack message if the build fails.

AppVeyor Slack integration

Deployment

The last important part of Continues Integration process is deployment. We can configure AppVeyor, to give us a quick method to start project deployment. We can configure a deployment using WebDeploy, FTP server or even Azure Cloud.

Deployment to GitHub pages

I use a GitHub Pages mechanism as I described earlier http://www.diwebsity.com/2016/03/08/najtanszy-hosting-dla-projektow-webowych/ therefore I want to integrate it with AppVeyor. It is very easy, because the only one necessary part is to configure custom deployment script using:

gulp deploy

Deploy using GitHubPages

This is the basic type of CI environment and AppVeyor definitely match my requirements.



Pomysły i zdolność ich wykonania

Pomysły i zdolność ich wykonania

W ostatnim poście pisałem o podjęciu wyzwania, które polega na realizacji otwartego projektu. Decyzję o udziale w tym przedsięwzięciu podjąłem szybko, ale największy problem miałem z pomysłem na ten projekt. Przy czym nie był to problem związany z wymyśleniem czegoś, ale z wyborem spośród tego, o czym myślę ostatnio. Dość często przychodzą mi do głowy różne idee np. na zautomatyzowanie lub ulepszenie jakiegoś procesu czy uwspólnienie czegoś dla kilku aplikacji. Podejrzewam, że wielu developerów ma podobnie. Wiadomo, że jedne pomysły są lepsze, a drugie gorsze. Właśnie dlatego ostatnio staram się jak najszybciej zapisywać swoje koncepcje, tak “na gorąco”. Dzięki temu, gdy mam ochotę i możliwości czasowe, by rozpocząć nowy projekt, nie tracę zapału na długim wymyślaniu, czym mógłbym się zająć. Tylko po prostu przeglądam listę i dokonuję wyboru jak z gotowego menu, którego jedyną wadą jest to, że bardzo wiele potraw wygląda apetycznie.

Zarządzanie pomysłami

Próbowałem już kilku różnych metod zarządania swoimi pomysłami i wypracowałem rozwiązanie, które sprawdza się najlepiej.

Najważniejszymi założeniami są dla mnie:

  • możliwość zapisywania pomysłów w dowolnym momencie
  • łatwa dostępność do listy pomysłów
  • możliwość dodawania komentarzy lub powiązanych informacji

Moja metoda jest prosta – polega na noszeniu przy sobie małego notesika, w którym mogę zapisać każdy pomysł. Dodatkowo co jakiś czas siadam z nim do komputera, by przepisać pomysły do Trello. Narzędzie to służy do tworzenia list zorganizowanych w tablicę podobną do tablicy Kanban. Dzięki temu mogę dowolnie kategoryzować pomysły, decydować się na ich rozpoczęcie oraz podpinać znalezione powiązane materiały. Tego typu rozwiązanie bardzo dobrze sprawuje się w moim przypadku. Na tę chwilę jedynym ulepszeniem, które mogłoby Wam przypaść do gustu, jest według mnie użycie aplikacji do tworzenia notatek w telefonie zamiast notesu.

Zdolność wykonania

Czasem żałuję, że nie jestem w stanie zrealizować wszystkich pomysłów i dlatego chcę być pewien, że przystępując do realizacji danej koncepcji, dokonuję dobrego wyboru. Muszę więc określić na czym mi w danej chwili zależy i jakie mam szanse na sfinalizowanie projektu, w tym celu oceniam swoją zdolność do wykonania projektu (project execution capability).

Jeżeli rozważany pomysł dotyczy dziedziny, na której się kompletnie nie znam i nie czuję potrzeby jej zgłębiania, to uznaję ten pomysł jako nieodpowiedni dla mnie ze względu na brak możliwości wykonawczych. Nie mówię tu o technicznych aspektach, bo wiele projektów jest dla mnie materiałem do nauczenia się lub przećwiczenia pewnych bibliotek lub technik. Mowa o tematykach biznesowych danych projektów. Jeżeli dla przykładu nie znam się na dietetyce, to wiem, że trudno mi będzie wykonać dobrze pomysł z tym związany. Oczywiście, mam też kilka innych kryteriów oceny moich idei, lecz ta jest najważniejsza i zawsze od niej zaczynam.

Dzielenie się pomysłami

Przy dość szybkim odrzucaniu niektórych pomysłów, czasem takich, które uważam za całkiem dobre, mam wrażenie, że pewne ulepszenia codzienności nie ujrzą światła dziennego. Dlatego przyszło mi do głowy, że być może dobrym nawykiem byłoby upublicznianie swoich pomysłów, którymi z różnych względów (np. brak wspomnianej wyżej zdolności do wykonania) postanowiłem się nie zajmować. Wówczas byłaby szansa, że ktoś je zrealizuje w wersji zaproponowanej przeze mnie lub po dokonaniu własnych modyfikacji, a może zainspirowany którąś z koncepcji wymyśli coś znacznie lepszego.

Co myślicie na ten temat? Czy Wy chcielibyście się podzielić swoimi koncepcjami lub poczytać nad czym myśleli inni?
Jak z kolei Wy dbacie o swoje pomysły?

Wyzwanie “Daj się poznać”

Wyzwanie “Daj się poznać”

Ostatnio znalazłem w sieci informację o konkursie “Daj się poznać” organizowanym przez Maćka Aniserowicza. Celem konkursu jest aktywizacja developerów w sieci. Wyzwanie polega na rozpoczęciu własnego projektu z otwartymi źródłami, który będzie publikowany na GitHub i opisywaniu różnych zagadnień z nim związanych na blogu. Wymogiem jest publikacja 2 postów tygodniowo.

Myślę, że to bardzo pozytywna idea. Nawet niezależnie od nagród i wygranej. Jest to dobra okazja do sprawdzenia się jako osoba pisząca teksty techniczne oraz możliwość dotarcia do wielu osób i otrzymania feedbacku o swoim projekcie. Jest to także, mam nadzieję, świetna motywacja do wcielenia w życie swojego pomysłu na projekt.

Po tym wstępie łatwo się domyślić, że postanowiłem wystartować w tym wyzwaniu. Zdecydowałem opisać realizację dwóch pomysłów, by w trakcie projektu wybrać ten, który da mi większą satysfakcję i będzie ciekawszy zarówno dla mnie jak i dla potencjalnych użytkowników. Wiąże się to również z faktem, że moje dotychczasowe doświadczenia nauczyły mnie dość częstego weryfikowania zasadności pracy nad danym projektem i nie mam skrupułów odnośnie szybkiego kończenia projektów na dowolnym ich etapie. Co jednak nie znaczy, że wykluczam możliwość zrealizowania obydwu koncepcji.

Wybrałem więc następujące projekty:

WebAPI OWASP App Sensor

Jest to implementacja mechanizmu wczesnego reagowania na ataki i podejrzane zachowania ze strony użytkowników. Projekt OWASP AppSensor definiuje różne zagrożenia, poziomy reakcji na wykrycie zagrożenia oraz możliwe zachowania niwelujące poziom ryzyka.

Moim zadaniem bedzie zaimplementowanie tych mechanizmów dla środowiska WebAPI jako konfigurowalnej biblioteki z możliwością prostego włączenia ich do dowolnego projektu. Planuję na poczatku zapoznać się z dokładnym opisem tego mechanizmu. Następnie stworzyć szkielet biblioteki służący do rejestrowania zagrożeń. Ostatnim i najdłuższym etapem będzie sukcesywne analizowanie punktów detekcji szkodliwych zachowań i dodawanie ich do bilbioteki.

Skąd pomysł?

  • nie ma biblioteki implementującej ten mechanizm dla .NET
  • chcę lepiej poznać WebAPI
  • chcę poszerzyć swoją wiedzę o zagrożeniach bezpieczenstwa dla API webowych i zbudować narzędzie pomocne w ich wykrywaniu
  • na tym przykładzie chcę nauczyć się tworzenia niezależnych bibliotek włączanych do projektów za pomocą NuGeta

Aplikacja do śledzenia notowań giełdowych i funduszy inwestycyjnych

Jak dotąd nie znalazłem żadnej aplikacji, która pozwalałaby prosto i szybko wyświetlać lub analizować inwestycje finansowe (dokonywane w różny sposób i w różnych miejscach) dostosowanej do polskiego rynku.

Pomysł jest w zasadzie bardzo prosty, ale taki właśnie ma być. Główny cel to stworzenie aplikacji, której sam chciałbym używać. Przy okazji poszerzę swoją wiedzę o budowie frameworków do tworzenia aplikacji webowych jako aplikacji mobilnych. Będę chciał wykorzystać następujące technologie: Ionic2, Angular2, TypeScript do frontendu oraz Node.js do backendu. Pierwszy raz użyję tego stacku technologicznego i to będzie dla mnie wyzwaniem.

Dodatkowo chciałbym stworzyć tę aplikację zaczynając od zaprojektowania warstwy UX, UI a dopiero później implementacji. Jest to swego rodzaju test tego sposobu pracy nad projektem.