Changes between Version 7 and Version 8 of SoftwareDevelopment/ProjectGuidelines


Ignore:
Timestamp:
10/06/16 13:42:48 (8 years ago)
Author:
Twan Goosen
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoftwareDevelopment/ProjectGuidelines

    v7 v8  
    11[[PageOutline]]
    22= Guidelines for software development in projects =
    3 This documents contains guidelines for software development within CLARIN projects. Since such projects generally have a limited temporal scope, and the original developer(s) will often not be available for support outside the context of the project, additional care has to be taken with respect to a number of aspects that factor into the 'sustainability' of a software projects. Please note that obviously all aspects of this guideline will apply in all circumstances, and that these guidelines can be taken as best practices for any software projects.
     3This documents contains guidelines for software development within CLARIN projects. Since such projects generally have a limited temporal scope, and the original developer(s) will often not be available for support outside the context of the project, additional care has to be taken with respect to a number of aspects that factor into the 'sustainability' of a software projects. Providing good documentation, choosing commonly understood and well supported technologies, guarding quality throughout the development process, and ensuring the portability of the resulting code base strongly increase the chances of a piece of software surviving the end of its "parent project".
    44
    55== Documentation ==
     6Arguably the most important aspect of making software survive is providing good documentation. Different types of documentation should be produced and maintained throughout the various stages of software development. For these guidelines, we are mainly concerned with documentation aimed at developers and system administrators, although many applications also require a user manual.
     7
    68* Make sure that a '''description of the requirements''' of the developed software is available. This will often be part of the project description, but this description may not always be sufficiently descriptive. Ideally, '''functional and technical design documents''' are prepared and made available.
    79* Provide a '''description of the architecture''' of the software, either in prose or by means of (a) UML diagram(s)
     
    1618* Make use of an '''issue tracking system''', such as the [https://trac.clarin.eu CLARIN Trac] or the 'Issues' section of a !GitHub repository. Make separate tickets for all known issues as well as potential enhancements. Use milestones or priorities to indicate which issues should be addressed first or which features should be included in a single release.
    1719
    18 == Implementation choices ==
     20== Implementation decisions ==
     21Or how to choose a programming language, development frameworks and tools.
     22
    1923* If possible, select a '''programming language''' that is widely known and already used within the CLARIN infrastructure, an in particular CLARIN's core development team. For applications that run on a server, '''Java''' is the preferred language of choice. For web applications front-ends that run client-side, '''Javascript''' is used preferably combined with one of the frameworks mentioned below. Scripts could be written in '''Python''' or '''Bash'''.
    2024* The same applies to any '''frameworks''' that you might use to develop your application. The following frameworks are preferred for various programming languages/environments:
     
    2529
    2630== Quality and integrity ==
     31Software quality is an extremely broad and multi-faceted topic. Quality is foremost determined by the degree to which a software meets its functional requirements, which will naturally differ per project. This section of the guidelines is concerned with general measures aimed at easing the potential transfer of (the maintenance of) a code base from one developer to another. See [https://en.wikipedia.org/wiki/Software_quality Software Quality on Wikipedia].
     32
    2733* Follow the '''conventions''' with respect to code layout, naming and project structure/organisation associated with the language and/or framework that you are using. There may not always be 'official' or uniform conventions, but Google has [https://github.com/google/styleguide style guides] for various languages (including [https://google.github.io/styleguide/javaguide.html Java], [https://google.github.io/styleguide/javascriptguide.xml Javascript], [https://google.github.io/styleguide/pyguide.html Python] and [https://google.github.io/styleguide/shell.xml Shell]) that generally provide good guidelines. Obviously, the most important thing is to use consistent style.
    2834* Provide '''automated tests''' (unit tests) for your source code. Various tools are available to measure the test coverage of your project. [http://cobertura.github.io/cobertura/ Cobertura] is an open-source solution for Java projects.
     
    3238
    3339== Portability ==
    34 * Use  a 'modern' '''build automation tool''' and provide a build descriptor that does not rely on a highly specific context, i.e. make sure that your software can be built 'out of the box' if feasible, or provide instructions to prepare the environment for building the tool otherwise. [http://maven.apache.org/ Apache Maven] is used most commonly (for Java) within CLARIN. Other options are [https://en.wikipedia.org/wiki/Gradle Gradle]
     40See [https://en.wikipedia.org/wiki/Software_portability Software portability on Wikipedia].
     41
     42* Use  a 'modern' '''build automation tool''' and provide a build descriptor that does not rely on a highly specific context, i.e. make sure that your software can be built 'out of the box' if feasible, or provide instructions to prepare the environment for building the tool otherwise. [http://maven.apache.org/ Apache Maven] is used most commonly (for Java) within CLARIN. Other options are [https://en.wikipedia.org/wiki/Gradle Gradle] (for Java and several other languages) and [http://gruntjs.com/ Grunt] (for Javascript).
    3543 * Make sure that all '''dependencies''' are available, either via public repositories or via additional repositories defined in your build descriptor.
    3644* Test your build regularly, ideally on a daily basis or with every commit/push, i.e. attempt to implement '''continuous integration'''. Generally applicable tools that can be used for this are, among others, [https://travis-ci.org Travis] and [https://jenkins.io/ Jenkins].