# Software Engineering Applications Enabled by Blockchain Technology: A Systematic Mapping Study
## 4 Results
### Blockchain Uses in Software Engineering Reported in Literature (RQ2)
Although this proposal was not validated, the authors remain optimistic about the potential of using blockchain and in specific smart contracts, to transform other phases of the SDLC that currently rely on human rationale. [PERSON] et al. [46] proposed a blockchain-based model to address integrity in large-scale agile software development. Interestingly, these authors perceive software development as the Byzantine Generals' Problem and software practitioners who cause defects as Byzantine participants. In their proposed model, developers are miners who develop code and testers are the validators of developers' work. The project leader publishes work structs on the blockchain (work description, test description, reward, and the signature of the project leader). The work structs form the genesis block and the consequent blocks consist of additional work structs, code structs (related work ID, code, and signature), and the hash of the previous block. These blocks are validated and digitally signed by testers. Finally, [PERSON] and [PERSON] [30] proposed a decentralized continuous integration model, as opposed to the centralized Travis CI. In this model, developers enter a build and its reward to the network and interested workers perform the build. Once consensus is reached among peers, the transaction is appended to the distributed ledger. The authors raise two concerns regarding the implementation of the system: the storage of build logs (on the blockchain or off-the-chain) and the issue of non-deterministic builds. **Software testing. ** [PERSON] et al. [47] adopted blockchain technology to address issues in software testing using bug bounties, such as the lack of transparency regarding the price information for bug bounties, and the difficulty in establishing mutual trust between testers and software buyers/sellers. Their proposed solution consists of appending test results and documents as blocks on the distributed ledger to ensure traceability in the context of disputes between the party who initiated the bounty and the testers. Different testers adopt different methods and this may lead to discrepancies between testing results. To resolve this issue, the authors propose a novel consensus protocol, namely Proof of Skill. Once testers upload their results to the platform, their skill rating which relies on the historical testing performance is calculated and then grouped. The dispute is won by the group with the highest skill rating. [PERSON] and [PERSON] [48] used blockchain to share software testing information, e.g., test planning, test cases, test results and test results assessment, among diverse teams in a reliable and trusted manner. The authors implemented their model using Hyperledger Fabric. According to the lifecycle of a transaction in Hyperledger Fabric (execute-order-validate), each testing result needs to satisfy acceptance criteria, endorsement policy and consensus. This eliminates the risk of injection attacks in software systems and makes the proposed model suitable for trusted testing in large-scale and complex projects. **Software quality. **[PERSON] [50] developed the Susereum platform using the blockchain development platforms: OpenChain and Quorum. Susereum platform intends to empower software teams to dynamically propose sustainability and quality metrics which are then used to validate sustainable code contributions by miners. According to the authors, sustainability rating can be perceived as a way to assess code quality. The authors also raise questions regarding ways to ensure metrics' quality and ways to measure the impact of this proposal on software sustainability. [PERSON] and [PERSON] [49] proposed a model that stores code quality measurements on the distributed ledger to ensure their reliability and immutability. The authors measure software quality in terms of code complexity, by calculating the cyclomatic number as a function of the number of edges, number of nodes and the number of connected components, as well as connectivity by measuring interconnections among modules.