Supporting Software Engineering Practices in the Development of Data-Intensive HPC Applications with the JuML Framework