Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00132
Yutong Zhao, Lu Xiao, Xiao Wang, Bihuan Chen, Yang Liu
Performance is an important quality attribute of software systems. This paper categorizes and investigates 225 real-life performance issues in two separate groups: 1) localized issues (60%) that can be fixed by simple, localized code fixes and 2) architectural issues (40%) that require changes to a group of architecturally related files. This paper improves the understanding of causes and solutions to performance issues, specially for architectural performance issues. First, we summarized six typical root causes to performance problems that apply to both localized and architectural issues. In particular, 19% of architectural issues are associated with multiple causes. Second, we summarized four general types of architectural solutions to performance issues: 1) introducing new design elements; 2) changing design dependencies; 3) updating connected files; 4) updating independent files.
{"title":"Localized or Architectural: An Empirical Study of Performance Issues Dichotomy","authors":"Yutong Zhao, Lu Xiao, Xiao Wang, Bihuan Chen, Yang Liu","doi":"10.1109/ICSE-Companion.2019.00132","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00132","url":null,"abstract":"Performance is an important quality attribute of software systems. This paper categorizes and investigates 225 real-life performance issues in two separate groups: 1) localized issues (60%) that can be fixed by simple, localized code fixes and 2) architectural issues (40%) that require changes to a group of architecturally related files. This paper improves the understanding of causes and solutions to performance issues, specially for architectural performance issues. First, we summarized six typical root causes to performance problems that apply to both localized and architectural issues. In particular, 19% of architectural issues are associated with multiple causes. Second, we summarized four general types of architectural solutions to performance issues: 1) introducing new design elements; 2) changing design dependencies; 3) updating connected files; 4) updating independent files.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"117109510","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00049
Kaiyuan Wang, Allison Sullivan, S. Khurshid
Researchers have proposed many automated program repair techniques for imperative languages, e.g. Java. However, little work has been done to repair programs written in declarative languages, e.g. Alloy. We proposed ARepair, the first automated program repair technique for faulty Alloy models. ARepair takes as input a faulty Alloy model and a set of tests that capture the desired model properties, and produces a fixed model that passes all tests. ARepair uses tests written for the recently introduced AUnit framework, which provides a notion of unit testing for Alloy models. In this paper, we describes our Java implementation of ARepair, which is a command-line tool, released as an open-source project on GitHub. Our experimental results show that ARepair is able to fix 28 out of 38 real-world faulty models we collected. The demo video for ARepair can be found at https://youtu.be/436drvWvbEU.
{"title":"ARepair: A Repair Framework for Alloy","authors":"Kaiyuan Wang, Allison Sullivan, S. Khurshid","doi":"10.1109/ICSE-Companion.2019.00049","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00049","url":null,"abstract":"Researchers have proposed many automated program repair techniques for imperative languages, e.g. Java. However, little work has been done to repair programs written in declarative languages, e.g. Alloy. We proposed ARepair, the first automated program repair technique for faulty Alloy models. ARepair takes as input a faulty Alloy model and a set of tests that capture the desired model properties, and produces a fixed model that passes all tests. ARepair uses tests written for the recently introduced AUnit framework, which provides a notion of unit testing for Alloy models. In this paper, we describes our Java implementation of ARepair, which is a command-line tool, released as an open-source project on GitHub. Our experimental results show that ARepair is able to fix 28 out of 38 real-world faulty models we collected. The demo video for ARepair can be found at https://youtu.be/436drvWvbEU.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"136 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115099472","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00097
Tudor B. Ionescu
This paper addresses the question of how software is being developed in industrial fabrication laboratories (fablabs) located in real production environments, by the example of a smart factory project conducted by a large company in Europe. Our findings suggest that, when developing software in industrial fablabs, teams tend to drift away from established software engineering methods and practices and to adapt them impromptu in order to cope with the seemingly arcane sociotechnical environment of the factory.
{"title":"When Software Development Meets the Shopfloor: The Case of Industrial Fablabs","authors":"Tudor B. Ionescu","doi":"10.1109/ICSE-Companion.2019.00097","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00097","url":null,"abstract":"This paper addresses the question of how software is being developed in industrial fabrication laboratories (fablabs) located in real production environments, by the example of a smart factory project conducted by a large company in Europe. Our findings suggest that, when developing software in industrial fablabs, teams tend to drift away from established software engineering methods and practices and to adapt them impromptu in order to cope with the seemingly arcane sociotechnical environment of the factory.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"11 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128469770","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00116
Jagadeesh Chandra Bose R.P., Vikrant S. Kaulgud, M. Rebelo, Sanjay Podder
Biodiversity and indigenous knowledge systems present numerous opportunities to advance the state of medicines and health. However, considerable friction points exist for fostering biodiversity value chain. In this paper, we present a case for a blockchain enabled ecocentric decentralized framework for balancing innovation, regulations and sustainability. We enumerate some of the key requirements of the solution we built. We also list our learnings about the challenges in its realization. Such a solution has the potential to address the larger social good by empowering traditional populations to receive benefits automatically.
{"title":"A Decentralized Application for Fostering Biodiversity: Opportunities and Challenges","authors":"Jagadeesh Chandra Bose R.P., Vikrant S. Kaulgud, M. Rebelo, Sanjay Podder","doi":"10.1109/ICSE-Companion.2019.00116","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00116","url":null,"abstract":"Biodiversity and indigenous knowledge systems present numerous opportunities to advance the state of medicines and health. However, considerable friction points exist for fostering biodiversity value chain. In this paper, we present a case for a blockchain enabled ecocentric decentralized framework for balancing innovation, regulations and sustainability. We enumerate some of the key requirements of the solution we built. We also list our learnings about the challenges in its realization. Such a solution has the potential to address the larger social good by empowering traditional populations to receive benefits automatically.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"12 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128487426","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-COMPANION.2019.00124
Jeppe Aagaard Glud, Kevin Helge Hansen-Schwartz, Raffaele Ciriello
Transitioning to agile software development (ASD) practices is a long and difficult journey. Most existing literature assumes that agile transformation is solely the service provider's task, attributing only a passive role to the customer. This study explores customer influence on the agile transformation of service providers, based on an exploratory qualitative field study at a multinational Danish software firm. Our preliminary results show that a customer's risk tolerance and collaborative routines influence their service provider's transition to agile teamwork practices, planning routines, and customer involvement practices. We outline a conceptual model of customer-mediated agile transformation.
{"title":"Exploring Customer Influence on the Agile Transformation of Service Providers","authors":"Jeppe Aagaard Glud, Kevin Helge Hansen-Schwartz, Raffaele Ciriello","doi":"10.1109/ICSE-COMPANION.2019.00124","DOIUrl":"https://doi.org/10.1109/ICSE-COMPANION.2019.00124","url":null,"abstract":"Transitioning to agile software development (ASD) practices is a long and difficult journey. Most existing literature assumes that agile transformation is solely the service provider's task, attributing only a passive role to the customer. This study explores customer influence on the agile transformation of service providers, based on an exploratory qualitative field study at a multinational Danish software firm. Our preliminary results show that a customer's risk tolerance and collaborative routines influence their service provider's transition to agile teamwork practices, planning routines, and customer involvement practices. We outline a conceptual model of customer-mediated agile transformation.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"3 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133812644","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00077
Max Kesselbacher
A central topic to computer science education is the training of novice programmers. Novice programming skills have already been mapped to hierarchical levels, and expert programming skills have been measured based on task performance. But didactical instructions and individual support to acquire expert programming skills have not been provided in detail. I propose the investigation of structural and semantic patterns in program construction sequences in an IDE-based learning analytics setting. I aim to provide a more fine-grained assessment of programming skills, to enable skill assessments during programming tasks, and to support the individual acquisition of programming skills.
{"title":"Supporting the Acquisition of Programming Skills with Program Construction Patterns","authors":"Max Kesselbacher","doi":"10.1109/ICSE-Companion.2019.00077","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00077","url":null,"abstract":"A central topic to computer science education is the training of novice programmers. Novice programming skills have already been mapped to hierarchical levels, and expert programming skills have been measured based on task performance. But didactical instructions and individual support to acquire expert programming skills have not been provided in detail. I propose the investigation of structural and semantic patterns in program construction sequences in an IDE-based learning analytics setting. I aim to provide a more fine-grained assessment of programming skills, to enable skill assessments during programming tasks, and to support the individual acquisition of programming skills.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"93 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124436747","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-COMPANION.2019.00020
P. Clements
If nothing endures but change, then to make the products of our labor enduring, we must build them to accommodate change. If they cannot, they will be cast aside. Change can be thought of as occupying a time window: A solution needs to do something different a year from now, and then something different from that six months later, and so forth. An extremely interesting special case is when that time window shrinks to zero: Our solution needs to do and be a dozen different things right now. In many sectors, that special case turns out to be, in fact, the most common case. The so-called general case, where a single solution evolves over time, turns out to be a less interesting special case. This talk will explore the foundations for the field of product line engineering, which is the engineering of a family of systems that are similar but vary from each other. We will explore various techniques for handling this need, from the earliest to the most up to date, and show how the approaches transcend just software but apply across all engineering disciplines and all levels of an enterprise. Finally, we relate how this concept is being applied in industry today, and show where it is saving companies tens to hundreds of millions of dollars annually.
{"title":"Managing Variation: An Industrial Perspective on Product Line Engineering","authors":"P. Clements","doi":"10.1109/ICSE-COMPANION.2019.00020","DOIUrl":"https://doi.org/10.1109/ICSE-COMPANION.2019.00020","url":null,"abstract":"If nothing endures but change, then to make the products of our labor enduring, we must build them to accommodate change. If they cannot, they will be cast aside. Change can be thought of as occupying a time window: A solution needs to do something different a year from now, and then something different from that six months later, and so forth. An extremely interesting special case is when that time window shrinks to zero: Our solution needs to do and be a dozen different things right now. In many sectors, that special case turns out to be, in fact, the most common case. The so-called general case, where a single solution evolves over time, turns out to be a less interesting special case. This talk will explore the foundations for the field of product line engineering, which is the engineering of a family of systems that are similar but vary from each other. We will explore various techniques for handling this need, from the earliest to the most up to date, and show how the approaches transcend just software but apply across all engineering disciplines and all levels of an enterprise. Finally, we relate how this concept is being applied in industry today, and show where it is saving companies tens to hundreds of millions of dollars annually.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"90 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124576770","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00133
Qianqian Wang, A. Orso
Testing is today the most widely used software quality assurance approach. However, it is well known that the necessarily limited number of tests developed and run in-house are not representative of the rich variety of user executions in the field. In order to bridge this gap between in-house tests and field executions, we need a way to (1) identify the behaviors exercised in the field that were not exercised in-house and (2) generate new tests that exercise such behaviors. In this context, we propose Replica, a technique that uses field execution data to guide test generation. Replica instruments the software before deploying it, so that field data collection is triggered when a user exercises an untested behavior B, currently expressed as the violation of an invariant. When it receives the collected field data, Replica uses guided symbolic execution to generate one or more executions that exercise the previously untested behavior B. Our initial empirical evaluation, performed on a set of real user executions, shows that Replica can successfully generate tests that mirror field behaviors and have similar fault-detection capability. Our results also show that Replica can outperform a traditional input generation approach that does not use field-data guidance.
{"title":"Mimicking User Behavior to Improve In-House Test Suites","authors":"Qianqian Wang, A. Orso","doi":"10.1109/ICSE-Companion.2019.00133","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00133","url":null,"abstract":"Testing is today the most widely used software quality assurance approach. However, it is well known that the necessarily limited number of tests developed and run in-house are not representative of the rich variety of user executions in the field. In order to bridge this gap between in-house tests and field executions, we need a way to (1) identify the behaviors exercised in the field that were not exercised in-house and (2) generate new tests that exercise such behaviors. In this context, we propose Replica, a technique that uses field execution data to guide test generation. Replica instruments the software before deploying it, so that field data collection is triggered when a user exercises an untested behavior B, currently expressed as the violation of an invariant. When it receives the collected field data, Replica uses guided symbolic execution to generate one or more executions that exercise the previously untested behavior B. Our initial empirical evaluation, performed on a set of real user executions, shows that Replica can successfully generate tests that mirror field behaviors and have similar fault-detection capability. Our results also show that Replica can outperform a traditional input generation approach that does not use field-data guidance.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"16 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114314925","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00063
Christoph Matthies
Working in iterations and repeatedly improving team workflows based on collected feedback is fundamental to agile software development processes. Scrum, the most popular agile method, provides dedicated retrospective meetings to reflect on the last development iteration and to decide on process improvement actions. However, agile methods do not prescribe how these improvement actions should be identified, managed or tracked in detail. The approaches to detect and remove problems in software development processes are therefore often based on intuition and prior experiences and perceptions of team members. Previous research in this area has focused on approaches to elicit a team's improvement opportunities as well as measurements regarding the work performed in an iteration, e.g. Scrum burn-down charts. Little research deals with the quality and nature of identified problems or how progress towards removing issues is measured. In this research, we investigate how agile development teams in the professional software industry organize their feedback and process improvement approaches. In particular, we focus on the structure and content of improvement and reflection meetings, i.e. retrospectives, and their outcomes. Researching how the vital mechanism of process improvement is implemented in practice in modern software development leads to a more complete picture of agile process improvement.
{"title":"Agile Process Improvement in Retrospectives","authors":"Christoph Matthies","doi":"10.1109/ICSE-Companion.2019.00063","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00063","url":null,"abstract":"Working in iterations and repeatedly improving team workflows based on collected feedback is fundamental to agile software development processes. Scrum, the most popular agile method, provides dedicated retrospective meetings to reflect on the last development iteration and to decide on process improvement actions. However, agile methods do not prescribe how these improvement actions should be identified, managed or tracked in detail. The approaches to detect and remove problems in software development processes are therefore often based on intuition and prior experiences and perceptions of team members. Previous research in this area has focused on approaches to elicit a team's improvement opportunities as well as measurements regarding the work performed in an iteration, e.g. Scrum burn-down charts. Little research deals with the quality and nature of identified problems or how progress towards removing issues is measured. In this research, we investigate how agile development teams in the professional software industry organize their feedback and process improvement approaches. In particular, we focus on the structure and content of improvement and reflection meetings, i.e. retrospectives, and their outcomes. Researching how the vital mechanism of process improvement is implemented in practice in modern software development leads to a more complete picture of agile process improvement.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127193432","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 2019-05-25DOI: 10.1109/ICSE-Companion.2019.00042
Yanze Li, Bozhen Liu, Jeff Huang
We present the design and implementation of SWORD, a scalable and fully automated static data race detector for Java, implemented as a plugin in the Eclipse IDE. SWORD is the first whole program race detector that can scale to millions of lines of code in a few minutes while achieving good precision in practice. The cornerstone of SWORD is a new algorithm that judiciously combines points-to analysis and happens-before analysis efficiently, without losing precision. We have evaluated SWORD on an extensive collection of large-scale open source Java projects. Our results show that SWORD detects more races and reports fewer false positives than the state-of-art race detector, RacerD. Moreover, SWORD requires no human effort to annotate code regions as required by RacerD. SWORD also displays comprehensive bug traces and racing pair information on the GUI, which make debugging the races easier. A demo video is available at https://youtu.be/XQ0CBy7mMaY.
{"title":"SWORD: A Scalable Whole Program Race Detector for Java","authors":"Yanze Li, Bozhen Liu, Jeff Huang","doi":"10.1109/ICSE-Companion.2019.00042","DOIUrl":"https://doi.org/10.1109/ICSE-Companion.2019.00042","url":null,"abstract":"We present the design and implementation of SWORD, a scalable and fully automated static data race detector for Java, implemented as a plugin in the Eclipse IDE. SWORD is the first whole program race detector that can scale to millions of lines of code in a few minutes while achieving good precision in practice. The cornerstone of SWORD is a new algorithm that judiciously combines points-to analysis and happens-before analysis efficiently, without losing precision. We have evaluated SWORD on an extensive collection of large-scale open source Java projects. Our results show that SWORD detects more races and reports fewer false positives than the state-of-art race detector, RacerD. Moreover, SWORD requires no human effort to annotate code regions as required by RacerD. SWORD also displays comprehensive bug traces and racing pair information on the GUI, which make debugging the races easier. A demo video is available at https://youtu.be/XQ0CBy7mMaY.","PeriodicalId":273100,"journal":{"name":"2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-05-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131041738","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}