寄托天下 寄托天下
查看: 1727|回复: 0
打印 上一主题 下一主题

[编程天地] 5个topic,你选哪一个? [复制链接]

Rank: 5Rank: 5

声望
54
寄托币
78
注册时间
2013-7-30
精华
0
帖子
402

US-applicant

跳转到指定楼层
楼主
发表于 2013-8-4 00:28:49 |只看该作者 |倒序浏览
目前在申请国外硕士的阶段中,教授对我很感兴趣,于是让我选择课题,问我哪个课题更加感兴趣以及原因,


课题如下:这5个里面,你怎么看?难易程度?


1.Detection of Refactoring Opportunities

2.Automatic classification of source code changes into maintenance types

3.Analysis of dependencies/conflicts between refactoring opportunities

4.Empirical studies on Refactoring activity

5.Source code analysis on Cloud Computing Infrastructures


下面是每个课题的详细说明:
1.Detection of Refactoring Opportunities

It has been observed that the design quality of a software system deteriorates throughout its evolution (software aging) due to changes in the requirements that were not anticipated in the original design or poor design decisions for the implementation of new requirements caused by the pressure to meet deadlines.
Design quality deterioration manifests itself in the form of design defects or flaws that make the system harder to comprehend, test, extend and maintain in general. Refactorings are source code transformations that do not alter the external behavior of a program, but improve its internal structure [1]. The cumulative effect of these code transformations can radically improve the design quality of a system and reverse software decay.
Despite the wide support of refactoring application mechanics in modern IDEs, the refactoring process is not supported in its entirety, since the developers have to manually detect refactoring opportunities and assess their impact on design quality. Over the last years, several approaches have been proposed in the literature for the detection of specific refactoring opportunities in a systematic manner [2] - [8]. However, there is still a large list of refactorings and design problem resolution strategies [1] [9] to be explored.

Have a look at JDeodorant, an Eclipse plug-in that supports the detection of refactoring opportunities in Java projects and has been used by several companies and organizations to improve the design quality of their software products. JDeodorant provides a powerful infrastructure for the analysis of source code allowing the implementation of detectors for a large variety of refactoring opportunities.

Working on this project will give you experience in source code analysis techniques and major Eclipse frameworks, such as JDT (Java Development Tools) and LTK (Refactoring Language Toolkit), as well as the satisfaction to see that your contribution is used by hundreds of developers around the world. JDeodorant is available through Eclipse Marketplace and has already a large install base.

Another interesting research direction is the investigation of refactoring opportunities in dynamic languages, such as Ruby [10], and style sheet languages, such as Cascading Style Sheets (CSS) [11] - [13].


2.Automatic classification of source code changes into maintenance types
Maintenance activity is generally divided into distinct categories:

    Corrective: Fixing software defects/bugs.
    Perfective: Enhancing performance and usability.
    Adaptive: Adapting to new technologies, environments and language features.
    Preventive: Improving future maintainability.
    Feature addition: Implementing new requirements.
    Non functional: Updating documentation, copyright, license, code format/indentation.

The research problem being investigated is the automatic classification of source code changes between successive revisions into the aforementioned maintenance categories using advanced source code analysis and differencing techniques.

The classification of source code changes can provide insight in the intention/purpose of the maintenance activities. Furthermore, it can be used to detect development phases throughout the evolution of a project as a means to a) support project management/awareness, b) reveal the development processes and practices being applied by the development team, and c) find patterns of interleaved maintenance activity types. Finally, it can also be used to detect software modules which are stable, error-prone, critical with respect to extension, or frequently refactored.

Previous research work, has mainly focused on commit information (i.e., commit message, author and modified modules) in order to perform this classification [1] [2]. This approach has two main disadvantages: a) it depends on the quality and clarity of the comments provided by the developers, and b) it classifies each revision into a single maintenance category, although the changes may correspond to multiple categories. Other research works employ program differencing in order to extract the system’s evolution profile as a sequence of change trees [3], detect non-essential changes (such as the replacement of simple types with qualified ones, extraction of local variables, keyword modifications and local variable renames) through sophisticated source code analysis techniques (i.e., Partial Program Analysis) [4], detect the introduction of Java Generics [5], and automatically discover and summarize systematic code changes (such as refactorings, feature additions, and updates to code clones) as logic rules [6]. However, these approaches do not cover completely all maintenance types.

This research problem is ideal for students with background or interest in source code analysis and differencing, as well as text mining techniques.

3.Analysis of dependencies/conflicts between refactoring opportunities

Software systems may present a very large number and variety of refactoring opportunities. As a result, the existence of conflicts and dependencies in the application of specific refactorings is quite possible.

A conflict usually takes place when two or more refactoring opportunities affect a common piece of code. In this case, the refactorings should be applied according to the scope of the code that they affect and the semantics of the involved refactoring types.

For example, let us assume that there are two refactoring opportunities for method m. The first opportunity suggests the move of method m from class A to class B (because it accesses field and/or methods from class B), while the second one suggests the extraction of a code fragment from the body of method m into a separate method. By applying the Extract Method refactoring first, method m becomes more dependent to class A (since after the application of the refactoring method m will access the extracted method in class A as well) and thus the Move Method refactoring opportunity may become weaker (i.e., less effective) or even disappear. On the other hand, if the Move Method refactoring is applied first, then the Extract method refactoring can be applied afterwards without any problem.

A dependency takes place when two refactoring opportunities affect different pieces of code that are dependent with each other. In this case, the order of refactoring application depends on the direction of the dependency.

For example, let us assume that there are two Move Method refactoring opportunities for methods x and y, respectively, and method x calls method y. The refactoring corresponding to method y should be applied first, since the move of the called method (i.e., method y) may affect the target class for the calling method (i.e., method x).

Some previous research approaches to this problem, proposed the representation of refactorings as graph transformations [1] [4], where the detection of conflicts and dependencies is based on critical pair analysis and sequential dependency analysis. Other approaches treat the problem of finding an optimal sequence of refactoring applications as a search problem on Deterministic Finite Automata [3], where nodes represent system states and edges represent the application of specific refactorings. Finally, there is a category of approaches that treat this problem as a scheduling problem [2] [5], where the goal is to optimize certain functions (e.g., design quality, understandability, maintainability, refactoring effort) with respect to the constraints imposed by refactoring conflicts and dependencies.

This research problem is ideal for students with background or interest in search and optimization techniques.

4.Empirical studies on Refactoring activity

The goal of empirical studies is to investigate the processes and practices being applied in software projects and development teams as a means to propose, validate and improve models and analytical tools.

Within the context of refactoring activity, prior empirical studies investigated its relation with the number and duration of bug fixes [5], software release dates [5], testing periods [6], as well as the impact of refactorings on software metrics [7] [8]. More recent empirical studies investigated the evolution and lifespan of code smells in the history of software projects [1] [2] [4], as well as the impact of code smells on software change-proneness [3].
However, the relationship between code smells and refactoring activity has not been investigated yet. It is particularly interesting to examine the specific reasons that motivate the developers to apply refactorings and how refactoring activity is interleaved with other maintenance activities, such as bug fixing, addition of features, unit testing and design improvement.

This research problem is ideal for students with background or interest in mining software repositories (MSR) and statistical analysis.

5.Source code analysis on Cloud Computing Infrastructures

Source code repositories are becoming larger and larger, both with respect to their codebase and their evolution history. As a result, the analysis of software repositories has become a computation- and data-intensive task that requires parallel and distributed processing.
The goal of this research project is to investigate the use of frameworks supporting distributed applications [1], such as Apache Hadoop, for the distributed analysis of source code.

This research problem is ideal for students with background or interest in parallel algorithms, distributed computing, algorithm optimization, and scalability studies.

教授的回信的最后,他问我有没有写过或者将来要写什么论文,但是我印度这个学校最后是不交论文的,只有一个毕业作品.
教授的研究方向是软件工程,我在想,我的毕业作品虽然是下学期做,但是现在开始计划,要做一个讨好他的方向的项目,我选择做什么比较好?
很期待你的回复和宝贵的建议.
回应
0

使用道具 举报

RE: 5个topic,你选哪一个? [修改]
您需要登录后才可以回帖 登录 | 立即注册

问答
Offer
投票
面经
最新
精华
转发
转发该帖子
5个topic,你选哪一个?
https://bbs.gter.net/thread-1619117-1-1.html
复制链接
发送
报offer 祈福 爆照
回顶部