Room 807, Building of Computer Science and Technology
Nanjing University (Xianlin Campus)
163 Xianlin Avenue, Qixia District, Nanjing, Jiangsu, China (210023)
I am building big data software. How can I ensure its quality and efficiency?
My machine learning programs seem to work well. However, is it because of my novel algorithms or hidden bugs?
I do not want to inspect code and debug overnight. What should I do if not quiting this job?
Software is the key to create your future of infinite possibilities. Software research can be analytical, empirical, or textual. The former two use human intelligence to improve software quality and coding productivity, while the last one uses machine intelligence (essentially still human intelligence) to support the former two.
Coding your future, do not let your life be coded by machine.
I received the following awards or honors (reversely chronological order):
I received the "NJU CS Virtue Star Award" (南京大学计算机学科美德之星奖) in 2017.
I received the "NJU Du-Sha Teaching Award" (南京大学杜厦奖教金) in 2017.
I received "Jiangsu Computer Society Service Award" (江苏省计算机学会科技服务贡献奖) in 2016.
I was promoted to "IEEE senior member" and "CCF senior member" in 2016.
I received "Jiangsu Computer Society Service Award" (江苏省计算机学会科技服务贡献奖) in 2015.
I received the "CCF Young Computer Scientist Award" (中国计算机学会CCF青年科学家奖) in 2015.
I received the "ACM Nanjing Rising Star Award/Excellent Youth Scientist Award" (ACM南京新星奖/卓越青年科学家奖) in 2014.
I received the "Best Paper Award" (最佳论文奖) from APSEC 2014.
I received the "NJU BOB 'Jing'-Ying Teaching Award" (南京大学北京银行"京"英奖教金) in 2014.
I received the "ACM SIGSOFT Distinguished Paper Award" (杰出论文奖) from ICSE 2014.
I was selected into "Mountain-Climbing Talents" (南京大学登峰人才支持计划) (Level B) in 2013.
I was selected into "CVIC SE Talents" (中创软件人才奖) in 2012.
I received the "National Science and Technology Progress Award" (国家科学技术进步奖) (Second Class, 7/10) in 2011.
I was selected into "Outstanding Young Faculty of Nanjing University" (南京大学青年骨干教师) in 2011.
I was selected into "New Century Excellent Talents in University by the Ministry of Education" (教育部新世纪优秀人才) in 2010.
I am an ATC Certified ARM Engineer since 2007.
I received the IBM PhD Fellowship Award twice in 2005 and 2006, respectively.
My research interests include: big data software engineering, intelligent software testing and analysis, and adaptive and autonomous software systems. You are welcome to talk to me if you have common interests. Here is a list of my publications. You may also read my Google Scholar Citations or DBLP page (results always mixed with others).
Our research projects include CABOT and ADAM two series:
CABOT project (on research issues outside software):
CABOT is a middleware infrastructure supporting context management for adaptive applications. It offers inconsistency detection and resolution services for validating application contexts. [BISON04, ESECFSE05, SCIS15]
ICC/PCC: ICC/PCC incrementally detects context inconsistency. It builds on partial constraint checking and is extremely efficient. It applies to general first-order logic based consistency constraints. [ICSE06, TOSEM10, TOSEM10a]
OCC: OCC optimizes constraint checking by removing redundant link generation in inconsistency detection. [SEAMS07]
DCC: DCC supports decentralized constraint checking and protects privacy of contexts. [PERCOM08]
CON-C: CON-C supports parallel constraint checking by multiple CPU cores. [SCIS13]
GAIN: GAIN supports parallel onstraint checking by multiple GPU cores. It is extremely stable. [APSEC14, IST16]
GEAS: GEAS adaptively samples context changes for supporting sound and efficient context inconsistency detection. It generally supports a board range of constraint checking techniques (e.g., ECC, PCC, CON-C and GAIN). [ICSME17]
CINA: CINA suppresses the detection of unstable context inconsistency. It derives instability conditions from consistency constraints and makes smart inconsistency detection scheduling. [TSE15, TSE15a, correction for the formal version]
SHAP: SHAP suppresses the detection of inconsistency hazard (or unstable context inconsistency) by learning patterns (or instability conditions) from historical detection results. [APSEC14, IST16]
D-BAD: D-BAD resolves detected context inconsistency by heuristics. It identifies contexts being most likely faulty. [ICDCS08]
IMPACT/EFFECT: IMPACT/EFFECT resolves context inconsistency by minimizing side effect to applications. It is exhausitive but incremental, and thus efficient. [ESECFSE07, MOBIQUITOUS11]
CONSVIEW: CONSVIEW supports context inconsistency resolution among multiple applications. It uses consistent views to isolate applications from each other. [COMPSAC12]
ADAM project (on research issues inside software):
AFCHECKER: AFCHECKER detects faults for model-based adaptive applications. It derives hidden features from adaptation rules and environmental data, and formulates deterministic and probabilistic constraints. Based on them, it prunes false positives in fault detection and prioritizes fault reports. [JSS13][website]
VERSA: VERSA verifies model-based adaptive applications under uncertain environments. It reports and optimize probabilistic verification results on faults. [ASE14, JSS18, TOIT18]
SIT: SIT tests model-based adaptive applications under uncertain environments by adaptive sampling of sensory inputs. [JSS16]
RESYNC/REMATCHING: RESYNC/REMATCHING supports systematic recovery from consistency failure for model-based adaptive applications. It decides recoverability statically and supports it dynamically. [APSEC12, ASE13, MIDDLEWARE13]
UGA: UGA tests Android apps. It combines user input traces and random testing, systematically improving test coverage. [APSEC14, INTERNETWARE15]
GAT: GAT tests Android apps. It derives gesture types from static analysis and conducts guided gesture testing. [APSEC16]
AATT/AATT+: AATT/AATT+ tests Android apps. It manifests concurrency bugs by active input and schedule generation. [APSEC16, SCP18]
COSEDROID: COSEDROID supports both computation and sensing offloading for Android apps. It can borrow computation resources and battery power from other devices. [COMPSAC15]
PERFCHECKER: PERFCHECKER diagnoses GUI lagging, energy leak and memory bloat issues for Android apps. [ICSE14][website]
ELITE: ELITE diagnoses wake lock misuses for Android apps. [FSE16]
CARE: CARE reduces synchronization and log overhead for recording and replaying concurrent Java programs. It supports value determinism. [ICSE14]
RWTRACE: RWTRACE combines wait-free notification in Stride and speculation-retry design in CARE for recording and replaying concurrent C programs. It is open-sourced. [ASE15][website]
BC: BC (Bisectional Coordination) uses spatial locality in shared memory accesses to significantly reduce access dependences in recording and replaying concurrent C programs. [FSE16]
Schnauzer: Schnauzer uses the notion of speed space to manifest concurrency bugs in a convenient way. [ESECFSE18]
AMCHECK/CACHECKER: AMCHECK/CACHECKER detects spreadsheet smells by program synthesis for formula patterns. [ICSE14, TSE17]
CUSTODES: CUSTODES detects spreadsheet smells by cell clustering with strong and weak features. [ICSE16][website]
TABLECHECK: TABLECHECK detects table clones and embedded smells in spreadsheets by fingerprint-based code clone detection. [FSE16]
ANOMALY: ANOMALY investigates how effectively spreadsheet anomalies can be detected by existing techniques. [JSS17]
SynEva: SynEva synthesizes a mirror program to simulate the behavior of the knowledge program derived from training data, and decides by comparing the two programs whether the derived knowledge suits new scenarios. [QRS18]
C3: C3 automatically validates crash consistency for software by a generic oracle on checking editing distance and systematic test amplification for execising interleaved behavior. It is open-sourced. [FSE16]
Mandatory course for postgraduate students in Institute of Computer Software
2017 (Spring) Lecturer: Principles and Techniques of Compilers (22010120)
2016- Class advisor for undergraduate students enrolled in 2016 (Class 5)
2016 (Fall) Lecturer: Guidance to Software Engineering Research (081200C05/085211C06)
2016 (Spring) Lecturer: Principles and Techniques of Compilers (22010120)
2015 (Fall) Lecturer: Guidance to Software Engineering Research (081202D10)
2015 (Fall) Lecturer: Principles and Techniques of Compilers (22010120)
2015 (Spring) Lecturer: Principles and Techniques of Compilers (22010120)
2014 (Fall) Lecturer: Guidance to Software Engineering Research (081202D10)
2014 (Fall) Lecturer: Principles and Techniques of Compilers (22010120)
2014 (Spring) Lecturer: Principles and Techniques of Compilers (22010120)
2013 (Fall) Lecturer: Guidance to Software Engineering Research (081202D10)
2013 (Spring) Lecturer: Principles and Techniques of Compilers (221120)
2012 (Fall) Lecturer: Guidance to Software Engineering Research (081202D30)
2012 (Spring) Lecturer: Principles and Techniques of Compilers (221120)
2011 (Spring) Lecturer: Principles and Techniques of Compilers (221120)
2009 (Fall) Lecturer: Computer and Programming Fundamentals I (COMP102, HKUST)
2008 (Fall) Lecturer: Programming Fundamentals and Methodology (COMP104, HKUST)
2007 (Spring) Final Year Projects Grader (FYP, HKUST)
2004 (Spring and Summar) Teaching Assistant: Java Programming (COMP201, HKUST)
2003 (Fall) Teaching Assistant: Programming Fundamentals and Methodology (COMP104, HKUST)
Hobbies and Thoughts
I love playing computer games, watching movies, hiking, thinking and daydreaming (O_O).
I am interested in game development. In early years, I worked with friends on two RPG games: NewPal and FreeRPG. We focused on a reusable game engine and supporting tools, and developed demo stories on them. Developing a complete game is different from just develping a demo. You may want to take a look at SDLPAL as a good example of complete game. Game development also requires passion. One positive example is Notch (刻痕) game series. Its first version was made by a non-cs student, who was also the main developer of later versions. All their pictures, music and stories are new, and all team members are students. SDLPAL and Notch are free games. You can find them from the Internet.
You may have experienced worries. Sometimes we care about how others think of us. Although we can learn from others' stories, we have to make our own decisions. Usually, following the way you have choosed by yourself, you will not feel regretful. When you feel worries, you may want to take a look at these words.