1,721,359 research outputs found
A child who has a family is always a child who has time to grow
The idea of family homes (FH) was that to create an alternative to orphanages. FH are now seen as a solution to the care
problems of children whose parents are unable, unwilling, or judged by the legal system as unfit to care for them. Their
aim is to help children regain hope and faith in life. Ideally, FH should help children rebuild a healthy relationship with
their biological families or, when not possible, they should make the process of adoption as smooth as possible. FH
should be a place of transit, a kind of “parking” of foster care temporarily on hold
The new types of child maltreatment: A public and social emergency no longer negligible
Child abuse and neglect is a common problem that is potentially damaging to long-term physical and psychological health of children. As society and culture have progressively changed different configurations of child abuse and neglect have emerged. Few attention has been focused on these types of child maltreatment that represent the new emergency in this field. Pediatricians should be trained to play a major role in caring for and supporting the social and developmental well-being of children raised in variously conditions and in new types of problems. Pediatric care has been based on the increased awareness of the importance of meeting the psychosocial and developmental needs of children and of the role of families in promoting the health
State of the art in program analysis
Over the last several decades, static and dynamic program analysis techniques have received widespread attention. Their application to mainstream programming languages always requires extending theories and finding practical solutions. This special issue of Software Tools for Technology Transfer presents novel theoretical directions and practical applications of these techniques. The papers in this special issue are extended versions of selected workshop papers from the proceedings of the 12th ACM SIGPLAN International Workshop on the State Of the Art in Program Analysis (SOAP’23)
Static analysis via abstract interpretation of multithreaded programs
L’obiettivo di questa tesi è di presentare un’analisi statica generica per programmi Java multithread.
Un programma multithread esegue molteplici task, chiamati thread, in parallelo. I thread
comunicano implicitamente attraverso una memoria condivisa, e si sincronizzano attraverso monitor, primitive wait-notify, etc... Le prime architetture dual-core sono apparse sul mercato a prezzi contenuti alcuni anni fa; oggi praticamente tutti i computer sono almeno dual-code. L’attuale trend di mercato è addirittura quello del many-core, ovvero di aumentare sempre di più il numero di core presenti su una CPU. Alcune nuove sfide sono state introdotte da questa rivoluzione multicore a livello di linguaggi di programmazione, dal momento che gli sviluppatori software devono implementare programmi multithread.
Questo pattern di programmazione è supportato nativamente dalla maggior parte dei linguaggi di programmazione moderni come Java e C#.
Lo scopo dell’analisi statica è di calcolare automaticamente e in maniera conservativa una
serie di informazioni sul comportamento a tempo di esecuzione di un programma; una sua
applicazione è lo sviluppo di strumenti che aiutino a trovare e correggere errori software.
In questo campo svariati approcci sono stati proposti: nel corso della tesi verr`a seguita
le teoria dell’interpretazione astratta, un approccio matematico che permette di definire e approssimare correttamente la semantica dei programmi. Questa metodologia è già stata utilizzata con successo per l’analisi di un vasto insieme di linguaggi di programmazione.
Gli analizzatori generici possono essere instanziati con diversi domini numerici e applicati a svariate proprietà. Negli ultimi anni numerosi lavori sono stati centrati su questo approccio, e alcuni di essi sono stati utilizzati con successo in contesto industriale. Il loro punto di forza è il riutilizzo della maggior parte dell’analizzatore per verificare molteplici
proprietà, e l’utilizzo di diversi domini numerici permette di ottenere analisi più veloci ma più approssimate, oppure più precise ma più lente.
Nel corso di questa tesi presenteremo un analizzatore generico per programmi multithread.
Definiremo innanzitutto il modello di memoria happens-before sotto forma di punto fisso e lo approssimeremo con una semantica che sia calcolabile. Un modello di memoria
definisce quali comportamenti di un programma multithread sono consentiti durante la sua esecuzione. A partire da una definizione informale del modello di memoria happensbefore, introdurremo una semantica che costruisca tutte le esecuzioni finite che rispettino tale modello di memoria; in tale contesto un’esecuzione è rappresentata come una funzione che associa ciascun thread ad una traccia di stati che rappresenta la sua esecuzione.
Introdurremo infine una semantica astratta che pu`o essere calcolata, provandone la correttezza formalmente.
Definiremo e approssimeremo quindi una nuova proprietà focalizzata sui comportamenti
non deterministici causati dall’esecuzione multithread (ad esempio dall’intercalarsi arbitrario durante l’esecuzione in parallelo di diversi thread). Prima di tutto, il non determinismo di un programma multithread è definito come di erenza tra esecuzioni. Un programma è non deterministico se due diverse esecuzioni espongono comportamenti di erenti a causa dei valori letti e scritti sulla memoria condivisa. Astrarremo quindi tale proprietà su due livelli: inizialmente tracceremo per ogni thread il valore astratto che potrebbe aver scritto sulla o letto dalla memoria condivisa. Al successivo passo di astrazione tracceremo un solo valore, che approssimerà tutti i possibili valori scritti in parallelo, e l’insieme
dei thread che potrebbero aver fatto ciò. Sul primo livello di astrazione definiremo poi il concetto di determinismo debole. Proporremo quindi diverse modalità di rilassamento di tale proprietà, in particolare proiettandola su un sottoinsieme delle traccie di esecuzione e degli stati, definendo una gerarchia complessiva. Infine studieremo come la presenza di data race possa influenzare il determinismo di un programma.
Tutto questo lavoro teorico verrà quindi applicato a programmi Java. In particolare definiremo una semantica concreta del linguaggio Java bytecode seguendo la sua specifica.
Quindi lo approssimeremo in maniera da astrarre precisamente le informazioni richieste per poter analizzare un programma multithread. Il fulcro di ciò è l’approssimazione degli indirizzi di memoria per poter identificare i diversi thread, per controllare gli accessi alla memoria condivisa e per poter scoprire quando due thread sono sempre sincronizzati su
uno stesso monitor e quindi quali parti di codice non possono essere eseguite in parallelo.
L’analizzatore generico definito fin qui formalmente è stato implementato in heckmate, il primo analizzatore generico di programmi Java multithread. Riporteremo e studieremo approfonditamente i risultati sperimentali: in particolare verrà studiata la precisione dell’analisi quando utilizzata su alcuni pattern comuni di programmazione concorrente e alcuni casi di studio, e le sue prestazioni quando eseguita su un’applicazione incrementale e su un insieme di benchmark esterni.
L’ultimo contributo della tesi sarà l’estensione di un analizzatore generico industriale esistente (Clousot) all’analisi degli accessi e ettuati tramite puntatori diretti alla memoria.
In questa parte finale presenteremo l’applicazione di un analizzatore generico ad una proprietà di interesse pratico su codice industriale, mostrando quindi la forza di questo tipo di approccio allo scopo di costruire strumenti utili per sviluppare software.The goal of this thesis is to present a generic static analysis of Java multithreaded programs.
Multithreaded programs execute many task, called threads, in parallel. Threads communicate through the shared memory implicitly, and they synchronize on monitors, wait-notify primitives, etc... Some years ago dual core architectures started being distributed on the
broad market at low price. Today almost all the computers are at least dual core. Manycore, i.e. putting more and more cores on the same CPU, is now the current trend of CPU market. This multicore revolution yields to new challenges on the programming side too, asking the developers to implement multithreaded programs. Multithreading is supported natively by the most common programming languages, e.g. Java and C#.
The goal of static analysis is to compute behavioral information about the executions of a program, in a safe and automatic way. An application of static analysis is the development of tools that help to debug programs. In the field of static analysis, many di erent approaches have been proposed. We will follow the framework of abstract interpretation, a mathematical theory that allows to define and soundly approximate semantics of programs. This methodology has been already applied to a wide set of programming languages.
The basic idea of generic analyzers is to develop a tool that can be plugged with di erent numerical domains and properties. During the last years many works addressed this issue, and they were successfully applied to debug industrial software. The strength of these analyzers is that the most part of the analysis can be re-used in order to check several properties. The use of di erent numerical domains allows to develop faster and less precise or slower and more precise analyses.
In this thesis, the design of a generic analyzer for multithreaded programs is presented.
First of all, we define the happens-before memory model in fixpoint form and we abstract
it with a computable semantics. Memory models define which behaviors are allowed
during the execution of a multithreaded program. Starting from the (informal) definition of the happens-before memory model, we define a semantics that builds up all the finite executions following this memory model. An execution of a multithreaded program is represented as a function that relates threads to traces of states. We show how to design a computable abstract semantics, and we prove the correctness of the resulting analysis, in
a formal way.
Then we define and abstract a new property focused on the non-deterministic behaviors
due to multithreading, e.g. the arbitrary interleaving during the execution of di erent threads.
First of all, the non-determinism of a multithreaded program is defined as di erence
between executions. If two executions expose di erent behaviors because of values read
from and written to the shared memory, then that program is not deterministic. We abstract it in two steps: in the first step we collect, for each thread, the (abstract) value that it may write into a given location of the shared memory. At the second level we summarize all the values written in parallel, while tracking the set of threads that may have written it. At the first level of abstraction, we introduce the new concept of weak determinism.
We propose other ways in order to relax the deterministic property, namely by projecting
traces and states, and we define a global hierarchy. We formally study how the presence
of data races may a ict the determinism of the program.
We apply this theoretical framework to Java. In particular, we define a concrete semantics
of bytecode language following its specification. Then we abstract it in order to track the information required by the analysis of multithreaded programs. The core is an alias analysis that approximates references in order to identify threads, to check the accesses to the shared memory, and to detect when two threads own a common monitor thereby inferring which parts of the code cannot be executed in parallel.
The generic analyzer described above has been fully implemented, leading to heckmate,
the first generic analyzer of Java multithreaded programs. We report and deeply study some experimental results. In particular, we analyze the precision of the analysis when applied to some common pattern of concurrent programming and some case studies, and its performances when applied to an incremental application and to a set of well-known benchmarks.
An additional contribution of the thesis is about the extension of an existing industrial
generic analyzer, Clousot, to the checking of bu er overrun. It turns out that this analysis is scalable and precise. In summary, we present an application of an existing, industrial, and generic static analyzer to a property of practical interest, showing the strength of this
approach in order to develop useful tools for developers.Le but de cette thèse est de présenter une analyse statique générique pour des programmes multitâche écrits en Java.
Les programmes multitâche exécutent plusieurs tâches en parallèle. Ces tâches communiquent implicitement par le biais de la mémoire partagée et elles se synchonisent sur des moniteurs (les primitives wait-notify, etc, . . . ). Il y a quelques années, les architectures avec double processeurs ont commencé à être disponibles sur le marché à petit prix. Aujourd’hui, presque tous les ordinateurs ont au moins deux noyaux, la tendance actuelle du marché étant de mettre de plus en plus de processeurs par puce. Cette révolution
amène également de nouveaux défis en matière de programmation, car elle demande aux
développeurs d’implanter des programmes multitâche. Le multitâche est supporté en natif par la plupart des langages de programmation courants, comme Java et C#.
Le but de l’analyse statique est de calculer des informations sur le comportement
d’un programme, de manière conservative et automatique. Une application de l’analyse
statique est le développement d’outils qui aident au débogage des programmes. Plusieurs
méthodes d’analyse statique ont été proposées. Nous suivrons le cadre de l’interprétation abstraite, une théorie mathématique permettant de définir des approximations correctes de sémantiques de programmes. Cette méthode a déjà été utilisée pour un large spectre de langages de programmation.
L’idée fondamentale des analyseurs statiques génériques est de développer un outils
qui puissent être interfacé avec différents domaines numériques et différentes propriétés. Pendant ces dernières années, beaucoup de travaux se sont attaqué à cet enjeu, et ils ont été appliqués avec succès pour déboguer des logiciels industriels. La force de ces analyseurs réeside dans le fait qu’une grande partie de l’analyse peut être réutilisée pour vérifier plusieurs propriétés. L’utilisation de différents domaines numériques permet le développement d’analyses plus rapides mais moins précises, ou plus lentes mais plus précises.
Dans cette thèse, nous présentons la conception d’un analyseur générique pour des
programmes multitâche. Avant tout, nous définissons le modèle mémoire, appelé happensbefore memory model. Puis, nous approximons ce modéle mémoire en une semantique calculable. Les modéles mémoire définissent les comportements autorisés pendant l’exécution d’un programme multitâche. Commençant par la définition (informelle) de ce modèle mémoire particulier, nous définissons une sémantique qui construit toutes les exécutions finies selon ce modèle mémoire. Une exécution d’un programme multitâche est décrite par une function qui associe les tâches à des séquences (ou traces) d’états. Nous montrons comment concevoir une sémantique abstraite calculable, et nous montrons formellement
la correction des résultat de cette analyse.
Ensuite, nous définissons et approximons une nouvelle propriété qui porte sur les comportements non déterministes causés par le multitâche, c’est à dire ceux qui sont dus
aux entrelacements arbitraires pendant l’exécution de différentes instructions de lecture.
Avant tout, le non déterminisme d’un programme multitâche se définit par une différence entre plusieurs exécutions. Si deux exécutions engendrent des comportements différents dus aux valeurs qui sont lues ou écrites en mémoire partagée, alors le programme est non déterministe. Nous approximons cette propriété en deux étapes : dans un premier temps, nous regroupons, pour chaque tâche, la valeur (abstraite) qui peut être écrite dans la mémoire partagée à un point de programme donné. Dans un deuxième temps, nous résumons toutes les valeurs pouvant être écrites en parallèle, tout en nous rapellant l’ensemble des tâches qui pourraient les avoir écrites. À un premier niveau d’approximation, nous introduisons un nouveau concept de déterminisme faible. Nous proposons par ailleurs d’autres manière a aiblir la propriété de déterminisme, par exemple par projection des traces et des états, puis nous d ́efinissons une hierarchie globale de ces a aiblissements.
Nous étudions aussi comment la présence de conflit sur les accès des données
peut a ecter le déterminisme du programme.
Nous appliquons ce cadre de travail théorique à Java. En particulier, nous définissons une sémantique du language objet de Java, selon sa spécification. Ensuite, nous approximons cette sémantique afin de garder uniquement l’information qui est nécessaire pour l’analyse des programmes multitâche. Le coeur de cette abstraction est une analyse d’alias qui approxime les références afin d’identifier les tâches, de vérifier les accès en mémoire partagée, et de détecter quand deux tâches ont un moniteur commun afin d’en déduire quelles parties du code ne peuvent pas être éxécutées en parallèle.
L’analyseur générique qui est décrit ci-dessus a été entierement implanté, dans un outils appelé Checkmate. Checkmate est ainsi le premier analyseur générique pour des programmes multitâche écrits en Java. Des résultats expérimentaux sont donnés et analysés en détails. En particulier, nous étudions la précision de l’analyse lorsqu’elle est appliquée à des schémas courants de la programmation concurrente, ainsi qu’à d’autres exemples.
Nous observons également les performances de l’analyse lorsqu’elle est appliquée à une
application incrémentale, ainsi qu’à des exemples de référence bien connus.
Une autre contribution de cette thèse est l’extension d’un analyseur générique existant
qui s’appelle Clousot et qui permet de vérifier le non débordement des mémoires tampons.
Il s’avère que cette analyse passe à l’échelle des programmes industriels et qu’elle est précise. En résumé, nous présentons une application d’un analyseur statique générique industriel existant pour détecter et prouver une propriété présentant un intérêt pratique, ce qui montre la puissance de cette approche dans le développement d’outils qui soient utiles
pour les déeveloppeurs
The Burden of Dementia due to Down Syndrome, Parkinson's Disease, Stroke, and Traumatic Brain Injury: A Systematic Analysis for the Global Burden of Disease Study 2019
Background: In light of the increasing trend in the global number of individuals affected by dementia and the lack of any available disease-modifying therapies, it is necessary to fully understand and quantify the global burden of dementia. This work aimed to estimate the proportion of dementia due to Down syndrome, Parkinson's disease, clinical stroke, and traumatic brain injury (TBI), globally and by world region, in order to better understand the contribution of clinical diseases to dementia prevalence. Methods: Through literature review, we obtained data on the relative risk of dementia with each condition and estimated relative risks by age using a Bayesian meta-regression tool. We then calculated population attributable fractions (PAFs), or the proportion of dementia attributable to each condition, using the estimates of relative risk and prevalence estimates for each condition from the Global Burden of Disease Study 2019. Finally, we multiplied these estimates by dementia prevalence to calculate the number of dementia cases attributable to each condition. Findings: For each clinical condition, the relative risk of dementia decreased with age. Relative risks were highest for Down syndrome, followed by Parkinson's disease, stroke, and TBI. However, due to the high prevalence of stroke, the PAF for dementia due to stroke was highest. Together, Down syndrome, Parkinson's disease, stroke, and TBI explained 10.0% (95% UI: 6.0-16.5) of the global prevalence of dementia. Interpretation: Ten percent of dementia prevalence globally could be explained by Down syndrome, Parkinson's disease, stroke, and TBI. The quantification of the proportion of dementia attributable to these 4 conditions constitutes a small contribution to our overall understanding of what causes dementia. However, epidemiological research into modifiable risk factors as well as basic science research focused on elucidating intervention approaches to prevent or delay the neuropathological changes that commonly characterize dementia will be critically important in future efforts to prevent and treat disease
Adverse Effects of Pharmacotherapy in Children with Enuresis: A Single Centre Experience
To assess side effects of MELT monotherapy and MELT in association with oxybutynin in children suffering from nocturnal enuresis (NE). We enrolled 340 enuretic children admitted to our Pediatric Service, Campus Bio-Medico University of Rome, from April 2014 to April 2018; 23 children were excluded. The research was structured in 2 steps. During step 1, a patient’s medical history was carefully collected and physical assessment was performed. During step 2, after 3-month treatment period with MELT (Minirin/dDAVP®) at the dose of 120 mcg a day or MELT plus oxybutynin (Ditropan®), voiding calendar, adherence to treatment and any side effects were examined. The study was conducted in accordance with the Helsinki Declaration. Among 317 patients enrolled in the study, 18 male and 8 female (n=26; 26/317: 8.2%) children, with a mean age 10.86 ± 2.42 years, referred side effects: 13 cases (n=13, 13/26: 50%) treated with MELT monotherapy, 11 cases (n=11, 11/26: 42.3%) treated with MELT plus oxybutynin, 2 cases (n=2, 2/26: 7.7%) who received only oxybutynin. In our research, higher bioavailability of MELT guaranteed lower frequency of adverse effects with a spontaneous and rapid resolution. Several studies demonstrate that dDAVP is an effective and safe drug for NE and MELT formulation is actually considered for first-line therapy of NE, although further research is needed to endorse the observations of the authors
A suite of abstract domains for static analysis of string values
Strings are widely used in modern programming languages in various scenarios. For instance, strings are used to build up Structured Query Language (SQL) queries that are then executed. Malformed strings may lead to subtle bugs, as well as non-sanitized strings may raise security issues in an application. For these reasons, the application of static analysis to compute safety properties over string values at compile time is particularly appealing. In this article, we propose a generic approach for the static analysis of string values based on abstract interpretation. In particular, we design a suite of abstract semantics for strings, where each abstract domain tracks a different kind of information. We discuss the trade-off between efficiency and accuracy when using such domains to catch the properties of interest. In this way, the analysis can be tuned at different levels of precision and efficiency, and it can address specific properties
The long stay in group homes and mental health status of children: a two-year follow-up
AIM: The term “foster care” collects “institutions, group homes or private homes hosting orphaned, abandoned and maltreated children”. Aim of the study was to re-evaluate, with a 2-year follow-up, the physical and mental health status of children still living in foster care.
METHODS: The pilot survey included 8 group homes in Rome. The follow-up has been conducted between September 2013 and April 2014. We focused over improvement or worsening of the health status of children still living in group homes and over negative predictors of failure to adoption.
RESULTS: The pilot survey included 91 children aged between 2 and 17 years. The 2-year follow-up showed 34 children (37.4%) still living in group homes and 57 (62.6%) children no longer resident there. The 34 children were divided into 27 females (79%) and 7 males (21%). The mean age was 12.5 years for females and 11.4 years for males. The mean time of permanence was 68 months (5.7 years) but it increased when comparing the time of permanence with the child’s age. The growth parameters displaied no significant differences, placing most of the children between the 10th and the 90th percentile. At the follow-up, 16 children (47%) were diagnosed with certified psychiatric diseases with an increasing rate of 29% (P=0.01). The 2014 follow-up also showed an increasing number of all the preview organic diseases, from 31 to 61 pathologic conditions identified, with an increase rate of %. Fifty-seven children (62.6%) were no longer resident in family homes: 23 (40.4%) went back to their own family, 5 (8.8%) went to temporary custody, 29 (50.9%) were adopted. Therefore only 29/91 (31.8%) children were adopted.
CONCLUSION: A child in foster care has the chance to be well assisted; however, the study reveals the profile of a weaker child, even more in need of care
- …
