JavaScript (JS) is one of the most popular programming languages, and widely used for web apps and even backend development. Due to its dynamic nature, however, JS applications often have a reputation for poor software quality. As a type-safe superset of JavaScript, TypeScript (TS) offers features to address this. However, there is currently insufficient empirical evidence to broadly support the claim that TS apps exhibit better software quality than JS apps. We therefore conducted a repository mining study based on 604 GitHub projects (299 for JS, 305 for TS) with over 16M LoC and collected four facets of software quality: a) code quality (# of code smells per LoC), b) code understandability (cognitive complexity per LoC), c) bug proneness (bug fix commit ratio), and d) bug resolution time (mean time a bug issue is open). For TS, we also collected how frequently the type-safety ignoring `any` type was used. The analysis indicates that TS apps exhibit significantly better code quality and understandability than JS apps. Contrary to expectations, however, bug proneness and bug resolution time of our TS sample were not significantly lower than for JS: mean bug fix commit ratio was more than 60% larger (0.126 vs. 0.206), and TS projects needed on average more than an additional day to fix bugs (31.86 vs. 33.04 days). Furthermore, reducing the usage of the `any` type in TS apps was significantly correlated with all metrics except bug proneness (Spearman's rho between 0.17 and 0.26). Our results indicate that the perceived positive influence of TypeScript for avoiding bugs in comparison to JavaScript may be more complicated than assumed. While using TS seems to have benefits, it does not automatically lead to less and easier to fix bugs. However, more research is needed in this area, especially concerning the potential influence of project complexity and developer experience.
翻译:JavaScript( JavaScript) 是最受欢迎的编程语言之一, 我们因此根据604 GitHub项目( JS 299 ) 的复杂程度( JS 304 ), 广泛用于网络应用程序甚至后端开发。 但是, 由于其动态性质, Jus 应用程序往往以软件质量差为名声。 作为 JavaScript (TysS) 的一种类型安全的超级超级设置, TysScript (TS) 提供了解决这一问题的特性。 然而, 目前没有足够的经验来支持关于TS应用软件比JS应用程序质量差60 GetHub项目(JS 299, 305 TS) 的复杂程度, 收集了四个软件质量超过 16 MLOC的版本: a) 代码质量(# 代码气味每个LOC), b) 代码易懂性(c), c) 错误易懂(c) (bugs c (troad) (tal typeal rial transal) road) roups) 和 mess (Or) (Or) (Or) (Or) (Or) 需要更多。