Supporting For Software Engineering Environment - Introduction

Supporting For Software Engineering Environment


转载请保留作者信息:
作者:88250
Blog: http:/blog.youkuaiyun.com/DL88250
MSN & Gmail & QQ:DL88250@gmail.com

Int roduction



Abstract

Software Engineering Environment involves the processes, approaches and tools of a software project life cycle with human-centric. This article introduces the advantages of two open source and stable tools, and reflects the basic, simple and critical factors that affects on the development of a software project.

Construction

Maven2 is a project management and comprehension tool based on Ant. Generally speaking, by using maven2 (maven for short) takes the following advantages:

  • IDE independent debugging, testing, building and deployment.
    It means developers can code using the best suitable development environments. For example, Java programmer can use eclipse, JDeveloper, or NetBeans to write codes, and HTML / CSS / Javascript programmers can use other development tools for convenience. The project building is only relies on maven's build configuration and independent of IDE.

  • Makes the continuous integration easily.
    A maven project can configures the source repository and integration tool easily. For example, when an artifact code completed, we can publish the artifact into a integration tool (such as Hudson) to build and finally put the artifact into test server or put it into maven repository as other project dependency.

  • Simplicity of extension for different type projects.
    Maven can customizes plugins for the specified project on demand. Some specified projects need to append process in the specified construct phase, such as when compiling source codes, may need to check the quality of source codes by using some static or dynamic analysis tools; after compilation, may need to append the project license on the source files; and after the whole construction, project manager may want to take a glance at a project report for getting how many tests fail / succeed, how many source codes are below standard.

Project Management

Maven depicts projects using the object-oriented approach. A project has its own pom.xml for representing the project's structure, sub-projects, referenced projects (as dependencies) for instance. The relation between these projects are equivalent to the object-oriented approach's basically. So, it takes some advantages of object model, such as inheritance and polymorphism.

The project management of maven can not reach some factors (plan, cost, risk, time, etc) of Project Management Theories. In other words, maven's project management focus on the structure and construction behaviors of a software project.

Dependencies Management

In modern software development, the dependencies management is very significant and very difficult. For example, our current projects depend on some third-part libraries, and each dependency has its own version and runtime dependencies . Maven can automatically downloads these libraries, resolves and downloads their runtime dependencies respectively. It takes the following advantages:

  • Make the automatic project building and integration simplest.
    Obviously, resolving the runtime dependencies are very dull and complicated. Fortunately, the most dependencies currently in the world have maven packages, then maven could decide the library 's dependency which is made by the library's authors or packager.

  • Make the control of dependencies change easy .
    Frequently the libraries project depends on need to be upgraded. The upgrade is from an older version to a newer version. According to the above advantage, the operation is very simple, just need to modify the version number of the dependencies.

  • Scoping for every dependency becomes more easier.
    This is a very typical case in test libraries. Commonly, we do not package a junit.jar into production. So, scoping the dependencies will help for project building and release. In practice, scoping dependencies can keep the consistence of software architect. For example, we selected eclipse as the project IDE and using JPA for persistence and Hibernate as the JPA implementation. After the phase architect verification, proved JPA is enough to use and never need to use its delegation. But someone use Hibernate annotations to annotated entities and others use JPA annotations to do that in deed. It breaks the consistence of design, make the maintainers drop into mud. By using maven dependencies management, it never be happen, just identifies the scope of hibernate-annotation.jar to runtime.

SCM

Software Configuration Management (SCM) is focus on the management of changes of software. Commonly, we use source version control system to track the changes.

Helpful Practices


Basically, a software project source repository should has three folders: trunk , branch and tag . Trunk tracks the sources of current project's version. Branch tracks the sources of current project's branches, a fully-reimplementation version, a upgrade version, etc, for instance. Tag save the released sources of the project's several versions.

The source we define that is source code commonly. Strictly speaking, a source repository should not include any hard modified binary data, the reason is that different binary data can not compare the differences easily, it can only compare manually by human. But so many developers commit the project's binary dependencies into source repository just for convenience. The dependencies should be resolved out side source repository. This point is very important to the automation for further development and maintenance, otherwise the binary dependencies is managed by another tools, maven for instance.

Another problem in multiple humans development collaboratively is the conflict . To resolve conflicts, so many developers just to delete the conflicted source file and commit his / her own version. This is not the problem that whether the usage of the source version control client developers got familiar or not, rather than the philosophy of why and how to identify the configuration item. The configuration items are core source of software process management and improvement.

Continuous Integration

Hudson is an extensible continuous integration engine like CruiseControl. But it more easily to configure and extend. It can configures some build strategies, such as build condition (sources commit, time step, etc). And a friendly integration status reporting by using dashboard.

See the following continuous integration status come from JBoss.


The continuous integration has the following advantages:

  • Exposes the problems of the project as soon as possible.
    Each integration has it own 'health' or / 'weather' which quantifies the productivity of the team. Once encounters an integration fail, every member in the team will receive a mail that notifies the member what, when, where is it happen. Helps the team to fix the issue ASAP.
  • Combines team members together into a more efficient team.
    Here is a case: a programmers finished the development of a module, and then commit the codes into source repository. The CI tool will get source from source repository and get start a build. Once the build passed tester will receive a mail from CI tool that tells the tester it is time to test this build.


Conclusion

This article introduced some philosophies of software engineering with maven2 and hudson. Some of these practices and principles are such simple, but it is efficient if combined them on a organized way. To build a helpful software engineering supporting environment is very sophisticated and constructive, and not only relies on tools but also depends on human collaboration. I always trust that is a team should to select and adapt the environment rather then do nothing.

TODO: Issue Tracking, Software Process Management




Error in argument: the --format gff3 is not currently supported. Please contact ANNOVAR developer for adding the support Usage: convert2annovar.pl [arguments] <variantfile> Optional arguments: -h, --help print help message -m, --man print complete documentation -v, --verbose use verbose output --format <string> input format (default: pileup) --includeinfo include supporting information in output --outfile <file> output file name (default: STDOUT) --snpqual <float> quality score threshold in pileup file (default: 20) --snppvalue <float> SNP P-value threshold in GFF3-SOLiD file (default: 1) --coverage <int> read coverage threshold in pileup file (default: 0) --maxcoverage <int> maximum coverage threshold (default: none) --chr <string> specify the chromosome (for CASAVA format) --chrmt <string> chr identifier for mitochondria (default: M) --fraction <float> minimum allelic fraction to claim a mutation (for pileup format) --altcov <int> alternative allele coverage threshold (for pileup format) --allelicfrac print out allelic fraction rather than het/hom status (for pileup format) --species <string> if human, convert chr23/24/25 to X/Y/M (for gff3-solid format) --filter <string> output variants with this filter (case insensitive, for vcf4 format) --confraction <float> minimal fraction for two indel calls as a 0-1 value (for vcf4old format) --allallele print all alleles rather than first one (for vcf4old format) --withzyg print zygosity/coverage/quality when -includeinfo is used (for vcf4 format) --comment keep comment line in output (for vcf4 format) --allsample process all samples in file with separate output files (for vcf4 format) --genoqual <float> genotype quality score threshold (for vcf4 format) --varqual <float> variant quality score threshold (for vcf4 format) --dbsnpfile <file> dbSNP file in UCSC format (for rsid format) --withfreq for --allsample, print frequency information instead (for vcf4 format) --withfilter print filter information in output (for vcf4 format) --seqdir <string> directory with FASTA sequences (for region format) --inssize <int> insertion size (for region format) --delsize <int> deletion size (for region format) --subsize <int> substitution size (default: 1, for region format) --genefile <file> specify the gene file from UCSC (for transcript format) --splicing_threshold <int> the splicing threshold (for transcript format) --context <int> print context nucleotide for indels (for casava format) --avsnpfile <file> specify the avSNP file (for rsid format) --keepindelref keep Ref/Alt alleles for indels (for vcf4 format) Function: convert variant call file generated from various software programs into ANNOVAR input format Example: convert2annovar.pl -format pileup -outfile variant.query variant.pileup convert2annovar.pl -format cg -outfile variant.query variant.cg convert2annovar.pl -format cgmastervar variant.masterVar.txt convert2annovar.pl -format gff3-solid -outfile variant.query variant.snp.gff convert2annovar.pl -format soap variant.snp > variant.avinput convert2annovar.pl -format maq variant.snp > variant.avinput convert2annovar.pl -format casava -chr 1 variant.snp > variant.avinput convert2annovar.pl -format vcf4 variantfile > variant.avinput convert2annovar.pl -format vcf4 -filter pass variantfile -allsample -outfile variant convert2annovar.pl -format vcf4old input.vcf > output.avinput convert2annovar.pl -format rsid snplist.txt -dbsnpfile snp138.txt > output.avinput convert2annovar.pl -format region -seqdir humandb/hg19_seq/ chr1:2000001-2000003 -inssize 1 -delsize 2 convert2annovar.pl -format transcript NM_022162 -gene humandb/hg19_refGene.txt -seqdir humandb/hg19_seq/ Version: $Date: 2018-04-16 00:48:00 -0400 (Mon, 16 Apr 2018) $
10-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值