In our previous article, 'Bytecoin Software Testing Process' we've highlighted the variety of tests that Bytecoin team is performing on a daily basis. Unit, integration, functional tests are all a part of Bytecoin testing process. Constantly running these tests ensures that anything new that was implemented in code is working properly and that no regression has occurred.
As one could imagine, running lots of tests on a daily basis manually is a very time consuming task. Also, we are all humans, everyone grow tired of doing repetitive work and some of it might be lost along the way. That is why Continuous Integration practice has been introduced to Bytecoin development process.
Continuous Integration approach utilizes build servers that run tests after every commit or periodically. Every developer on the team commits code to the shared repository a few times a day. Then, automated software builds each commit and runs a number of tests on it. This practice allows Bytecoin team to find issues early on development stage.
We continue to introduce you to Bytecoin development process. In our previous article, "Our Approach to Cryptocurrency Development", we covered the task management and development methodologies that we utilize. Today's article provides an in-depth overview of our testing process.
To recap, we rely on a mix of test-driven development (TDD) and extreme programming (XP). The main idea of XP is to create code in small batches. It allows thinking lean and efficient while avoiding excessively complicated solutions and over-design. For Bytecoin team this approach is aligned with the Test First paradigm. It implies that before producing a line of code, we create a test for it.
Recently we've shown you an overview of Bytecoin development process which puts testing as a corner stone. During a testing process we sometimes face bugs: some of them are very simple and take not more than a few minutes to fix, but there are also a category of bugs that are very hard to find and reproduce. During Bytecoin 1.0.3 development we've faced one of these bugs that almost stopped our work for a week.
While developing Bytecoin Wallet for OS X we've faced a bug in pthread library condition variable implementation. This bug can't be called nothing else but pesky. Pthread is one of the cornerstones of multithread programming and used in almost every OS X application that uses multithreads, including gcc, clang, java and boost. Due to this bug - user can lose a vital piece of data that is placed in the memory. For instance, some applications are storing transaction amounts in the memory and in certain circumstances this bug can lead to the data corruption and therefore some info regarding the transaction amount is going to be lost...
We have been developing Bytecoin for almost three years and have tested a number of development approaches during this time. We aim for Bytecoin to be secure, yet operating as fast as possible and being resource-efficient.
We hope that our three-years worth of experience in developing a cryptocurrency would be useful for other developers. We are going to share our knowledge with the community in the series of articles. This is the first post covering our development methodology that helps us uphold the highest quality standards of Bytecoin.
When developing a cryptocurrency, remote working does not present any problem for the team, and open source is more of a peculiarity rather than effective attribute affecting the development process.
The crucial point for cryptocurrency is to be reliable and secure. Bytecoin is a financial system that operates with users' funds. It is designed to automatically process a number of use cases in a decentralized manner. Keeping this in mind, we've always held robustness as the main criteria.
Task management methodology
In the very beginning, when Bytecoin was being created, we chose Scrum methodology. It was extremely useful during the stage of creating Bytecoin's core functionality. We worked at 3-week sprints, and the main functionality of Bytecoin was developed in 12 sprints. We used unit test on the regular basis to check the code's reliability, and added integration tests later on....
In Bytecoin Reference Client release version 1.0.3 we have rolled out Bytecoin high-level API that is capable of providing top-notch tools for GUI developers. This update is a crucial prerequisite for Bytecoin Wallet, as it allows to run a native Bytecoin network inside any application. It acts as a showcase for INode and IWallet interfaces and allows 3rd party developers to focus on making their product without the necessity to understand complex CryptoNote cryptography.
However, this update was not dealing with the core only: we have released a GUI Wallet, which is a big step towards users. Not only does it allow to use Bytecoin with more pleasure, but demonstrates convenience of new API libraries that allow to concentrate on developing applications.
We were looking at the best solutions only during wallet development. Our goal was to select the best that was created before us while keeping specific Bytecoin features.
Bitcoin-Qt was selected as a basis, being one of the most popular yet easy-to-use wallets. We did not stop here, though. We liked the NXT Wallet's elegant design, and Hive showed us the way to be user-friendly...
A lot of work has been done on refactoring Bytecoin Core's source code. This process started with the version 0.8.11, which had Bytecoin high-level API interface declared for the first time. The newly released Bytecoin Reference Client v.1.0.3 is the next significant updated for the Bytecoin Core.
Here I will explain what has been happening under the Bytecoin's hood and what our technology vision is. This description is crucial to understand Bytecoin's roadmap and the necessity to pursue its vector.
The v.1.0.3 release notes focus on the following updates:
- In-process INode implementation for applications
- Low-level ITransaction API interface for ordinary and multisig transactions
- Simplewallet migration to high-level API (namely, INode plus IWallet)
- Instant transaction notifications for in-process INode
Purpose of this update
V.1.0.3 is an important milestone on the way to standardize various components' access to Bytecoin network. It is also a requirement for Bytecoin GUI Wallet, which is coming out later this week...
Recent Blog Posts
Cryptocurrency market has been developing drastically, bringing more and more innovations to explore. The Bytecoin team ...
Diamond provenance protection, asset trading, land title registry, passport issuance, smart contracts, currency... you n ...
I have a phone, and I have no idea how it actually works despite the fact that people, like me, created it. I know that ...
In the 21st century, speed of delivery is paramount for any kind of business, but especially for software development. E ...
On May 19, the Bytecoin team introduces Bytecoin v.2.0.2. This release marks a major update after extensive core refacto ...
On July 4, the fourth anniversay of the project, the Bytecoin team introduces Bytecoin v.2.0.0. This release marks a maj ...