691 |
A Hybrid Approach Using RUP and Scrum as a Software Development StrategyCastilla, Dalila 01 January 2014 (has links)
According to some researchers, a hybrid approach can help optimize the software development lifecycle by combining two or more methodologies. RUP and Scrum are two methodologies that successfully complement each other to improve the software development process. However, the literature has shown only few case studies on exactly how organizations are successfully applying this hybrid methodology and the benefits and issues found during the process. To help fill this literature gap, the main purpose of this thesis is to describe the development of the Lobbyist Registration and Tracking System for the City of Jacksonville case study where a hybrid approach, that integrates RUP and Scrum, was implemented to develop a major application to provide additional empirical evidence and enrich the knowledge in this under-investigated field.
The objective of this research was fulfilled since the case study was described in detail with the specific processes implemented using RUP and Scrum within the context of the IBM Rational Collaborative Lifecycle Management Solution. The results may help researchers and practitioners who are looking for evidence about conducting a hybrid approach. However, more case studies that successfully combine RUP and Scrum need to be developed in order to have enough empirical evidence.
|
692 |
Unified modeling language class diagram translator for the online design pattern library systemLi, Kaiyan 01 January 2003 (has links)
The Unified Modeling Language (UML) is the successor to the wave of object-oriented analysis and design (OOA&D) methods that appeared in the late '80s and early '90s. The class diagram is one of the most useful diagrams in UML. The class diagram technique has become truly central within object-oriented methods.
|
693 |
Interpret dynamického programovacího jazyka pro vědecké výpočty / Interpreter of a Dynamic Programming Language for Scientific ComputingOcelík, Tomáš January 2012 (has links)
The master's thesis deals with design of a dynamic reflective prototype-based language. First, basic principles of this language group are explained and well known representatives are described. Then languages for scientific computing are shortly discussed. Next section of the thesis describes in detail the proposed programming language, its grammar and semantics. Principles of type checking and inheritance are explained. Thesis also demonstrates implementation of basic control structures known from other languages. Next section shows design of virtual machine for the language described before. Section explains used computational model, organization of the object memory and internal representation of important structures of the designed language. Finally, dynamic type checking, compiler and compilation of typical structures to the virtual machine internal code are discussed.
|
694 |
IDE for SCADA Development at CERN / IDE for SCADA Development at CERNMareček, Matěj January 2016 (has links)
Cílem této magisterské práce je navrhnout a implementovat IDE (integrované vývojové prostředí), které zvýší efektivitu a bezpečnost vývoje pro SIMATIC WinCC Open Architecture. Tato práce je založena na výzkumu provedeném týmem z Technické univerzity v Eindhovenu a splňuje požadavky pocházející ze SCD sekce v CERN (Evropské organizace pro jaderný výzkum). Vyvinuté IDE je postaveno na platformě Eclipse, přičemž pro syntaktickou analýzu, linkování a sémantickou analýzu kódu používá Xtext framework. IDE nabízí také podporu pro nově vytvořený programovací jazyk, který umožňuje programátorům jednoduše nadefinovat šablonu pro konfigurační soubory používané WinCC OA. Interpret tohoto nového jazyka je schopen provést syntaktickou analýzu šablony a konfiguračního souboru a rozhodnout, zdali konfigurační soubor odpovídá šabloně. Praktickým výstupem této práce je integrované vývojové prostředí, které podporuje vývoj WinCC OA aplikací v CERN a periodicky provádí analýzu kódu těchto aplikací napsaného v jazyce Control script.
|
695 |
TAMING IRREGULAR CONTROL-FLOW WITH TARGETED COMPILER TRANSFORMATIONSCharitha Saumya Gusthinna Waduge (15460634) 15 May 2023 (has links)
<p> </p>
<p>Irregular control-flow structures like deeply nested conditional branches are common in real-world software applications. Improving the performance and efficiency of such programs is often challenging because it is difficult to analyze and optimize programs with irregular control flow. We observe that real-world programs contain similar or identical computations within different code paths of the conditional branches. Compilers can merge similar code to improve performance or code size. However, existing compiler optimizations like code hoisting/sinking, and tail merging do not fully exploit this opportunity. We propose a new technique called Control-Flow Melding (CFM) that can merge similar code sequences at the control-flow region level. We evaluate CFM in two applications. First, we show that CFM reduces the control divergence in GPU programs and improves the performance. Second, we apply CFM to CPU programs and show its effectiveness in reducing code size without sacrificing performance. In the next part of this dissertation, we investigate how CFM can be extended to improve dynamic test generation techniques like Dynamic Symbolic Execution (DSE). DSE suffers from path explosion problem when many conditional branches are present in the program. We propose a non-semantics-preserving branch elimination transformation called CFM-SE that reduces the number of symbolic branches in a program. We also provide a framework for detecting and reasoning about false positive bugs that might be added to the program by non-semantics-preserving transformations like CFM-SE. Furthermore, we evaluate CFM-SE on real-world applications and show its effectiveness in improving DSE performance and code coverage. </p>
|
696 |
Technical decision-making in startups and its impact on growth and technical debt / Tekniskt beslutsfattande i startups och dess påverkan på tillväxt och teknisk skuldHultberg, Carl January 2021 (has links)
The rapid pace of digitalization has resulted in increased management of software development, and today a majority of startups are reliant on software. How to manage software development projects is a well-researched area and agile methods are widely adopted by companies in all industries and sizes. However, prior to working with agile methods or any other software development methodology, the founders and management of a startup have to make several technical decisions that could potentially affect the whole software development process and the company's success. Furthermore, studies show that only three programming languages are known by more than 50% of developers, suggesting that the potential effects of technical decisions stretch outside the software development process. By performing a multiple-case study on startups with a mixed-methodology approach, the researcher has analyzed the literature, interviewed several founders and Chief Technology Officers, and quantitatively analyzed hundreds of thousand lines of code, to find how to organize to make better technical decisions in order to enhance growth and generate less technical debt. The results show that the effects of technical decisions stretch outside the software development process, having an apparent effect on a startup's ability to attract and retain talent. Furthermore, the results show that access to talent is an important but not deciding factor in technical decision-making. Additionally, it is found that in the initial stage of a startup, ease of development and speed are important factors in technical decisions as the main objective is to find product-market fit. When product-market fit has been found and the startup matures, the focus shifts and quality and durability are becoming prominent factors. It is found that scooping features only to implement the absolute core functionality is an effective approach to develop quickly and generate less technical debt while maintaining customer satisfaction. Lastly, it is found that programming language affects the number of issues generated per line of code and the time spent on building features. However, as found in the literature, there is no evidence of this being related to the type of programming language. The findings have both practical and academic implications. In academics, this thesis lays the foundation for further studies and provides new insights into the field of startups in general, and technical decision-making in particular. For practitioners, this thesis provides a basis for discussion and execution of technical decisions in the early stages of a startup. / Den snabba digitaliseringen har resulterat i en ökad ledning av mjukvaruutveckling och idag är majoriteten av startups beroende av någon form av mjukvara. Hur man leder mjukvaruutvecklingsprojekt är ett välutforskat område och agila metoder är välanvända i företag i alla industrier och storlekar. Innan man arbetar med agila metoder eller någon annan mjukvarutvecklingsmetod så måste grundarna och ledningen ta flera tekniska beslut som potentiellt kan påverka hela mjukvaruutvecklingsprocessen och företagets framgång. Samtidigt finns det studier som visar att endast tre programmeringsspråk hanteras av mer än 50% av utvecklarna, vilket indikerar att de potentiella effekterna av tekniska beslut sträcker sig långt utanför mjukvaruutvecklingsprocessen. Genom att utföra en flerfallsstudie på startups med både kvalitativa och kvantitativa moment, har forskaren analyserat literaturen, intervjuat flertalet grundare och tekniska chefer, och kvantitativt analyserat hundratusentals rader kod, för att undersöka hur startups kan organisera sig för att ta bättre tekniska beslut som förbättrar tillväxten samt genererar mindre teknisk skuld. Resultaten visar att effekten av tekniska beslut sträcker sig långt utanför mjukvaruutvecklingsprocessen genom att ha en direkt påverkan på startups möjlighet att attrahera och behålla talang. Tillgången till talang visar sig även vara en viktig faktor i teknisk beslutsfattande, däremot är den inte en avgörande faktor. Dessutom visar resultaten att i det initiala stadiet av en startup så är enkelhet och hastighet viktiga faktorer i tekniskt beslutsfattande eftersom fokus ligger på att hitta produkt-marknads-anpassning. När produkt-marknads-anpassning är funnen och startupen mognar, så skiftar dessa faktorerna över till kvalité och hållbarhet. Resultaten visar även att en effektiv metod för att utveckla snabbt och skapa mindre teknisk skuld är att skala ner förfrågningar till dess absolut grundfunktionalitet, samtidigt visade det sig att kundnöjdheten inte minskade. Slutligen visar resultaten att val av programmeringsspråk har en effekt på antalet issues genererade per rad kod och även tiden spenderad för att bygga features. Däremot, precis som i tidigare forskning, finns det inga bevis på att det är relaterat till typen av programmeringsspråk. Resultaten har både praktiska och akademiska implikationer. I den akademiska världen så lägger detta arbetet en grund för framtida forskning och ger nya insikter i startupfältet generellt, och tekniskt beslutsfattande i startups i synnerhet. För utövare, lägger detta arbetet en bra bas för diskussion och verkställande av tekniska beslut i startups.
|
697 |
INVERSE SAMPLING PROCEDURES TO TEST FOR HOMOGENEITY IN A MULTIVARIATE HYPERGEOMETRIC DISTRIBUTIONLiu, Jun 04 1900 (has links)
<p>In this thesis we study several inverse sampling procedures to test for homogeneity in a multivariate hypergeometric distribution. The procedures are finite population analogues of the procedures introduced in Panchapakesan et al. (1998) for the multinomial distribution. In order to develop some exact calculations for critical values not considered in Panchapakesan et al. we introduce some terminologies for target probabilities, transfer probabilities, potential target points, right intersection, and left union. Under the null and the alternative hypotheses, we give theorems to calculate the target and transfer probabilities, we then use these results to develop exact calculations for the critical values and powers of one of the procedures. We also propose a new approximate calculation. In order to speed up some of the calculations, we propose several fast algorithms for multiple summation.</p> <p>N >= 1680000, all the results are the same as those in the multinomial distribution.</p> <p>The computing results showed that the simulations agree closely with the exact results. For small population sizes the critical values and powers of the procedures are different from the corresponding multinomial procedures, but when</p> / Master of Science (MSc)
|
698 |
Program Slicing for Modern Programming LanguagesGalindo Jiménez, Carlos Santiago 24 September 2025 (has links)
[ES] Producir software eficiente y efectivo es una tarea que parece ser tan difícil ahora como lo era para los primeros ordenadores. Con cada mejora de hardware y herramientas de desarrollo (como son compiladores y analizadores), la demanda de producir software más rápido y más complejo ha ido aumentando. Por tanto, todos estos análisis auxiliares ahora son una parte integral del desarrollo de programas complejos.
La fragmentación de programas es una técnica de análisis estático, que da respuesta a ¿Qué partes del programa pueden afectar a esta instrucción? Su aplicación principal es la depuración de programas, porque puede acotar la zona de código a la que el programador debe prestar atención mientras busca la causa de un error. También tiene otras muchas aplicaciones, como pueden ser la paralelización y especialización de programas, la comprensión de programas y el mantenimiento. En los últimos años, su uso más común ha sido como preproceso a otros análisis con alto coste computacional, para reducir el tamaño del programa a procesar, y, por tanto, el tiempo de ejecución de estos. La estructura de datos más popular para fragmentar programas es el system dependence graph (SDG), un grafo dirigido que representa las instrucciones de un programa como vértices, y sus dependencias como arcos. Los dos tipos principales de dependencias son las de control y las de datos, que encapsulan el flujo de control y datos en todas las ejecuciones posibles de un programa.
El área de lenguajes de programación está en eterno cambio, ya sea por la aparición de nuevos lenguajes o por el lanzamiento de nuevas características en lenguajes existentes, como pueden ser Java o Erlang. Sin embargo, la fragmentación de programas se definió originalmente para el paradigma imperativo. Aun así, hay características populares en lenguajes imperativos, como las arrays y las excepciones, que aún no tienen una representación eficiente y/o completa en el SDG. Otros paradigmas, como el funcional o el orientado a objetos, sufren también de un soporte parcial en el SDG.
Esta tesis presenta mejoras para construcciones comunes en la programación moderna, dividiendo contribuciones en las enfocadas a dependencias de control y las enfocadas a datos. Para las primeras, especificamos una nueva representación de instrucciones catch, junto a una descripción completa del resto de instrucciones relacionadas con excepciones. También analizamos las técnicas punteras para saltos incondicionales (p.e., break), y mostramos los riesgos de combinarlas con otras técnicas para objetos, llamadas o excepciones. A continuación, ponemos nuestra mirada en la concurrencia, con una formalización de un depurador de especificaciones CSP reversible y causal-consistente. En cuanto a las dependencias de datos, se enfocan en técnicas sensibles al contexto (es decir, más precisas en presencia de rutinas y sus llamadas). Exploramos las dependencias de datos generadas en programas concurrentes por memoria compartida, redefiniendo las dependencias de interferencia para hacerlas sensibles al contexto. A continuación, damos un pequeño rodeo por el campo de la indecidibilidad, en el que demostramos que ciertos tipos de análisis de datos sobre programas con estructuras de datos complejas son indecidibles. Finalmente, ampliamos un trabajo previo sobre la fragmentación de estructuras de datos complejas, combinándolo con la fragmentación tabular, que la hace sensible al contexto.
Además, se han desarrollado o extendido múltiples librerías de código con las mejoras mencionadas anteriormente. Estas librerías nos han permitido realizar evaluaciones empíricas para algunos de los capítulos, y también han sido publicadas bajo licencias libres, que permiten a otros desarrolladores e investigadores extenderlas y contrastarlas con sus propuestas, respectivamente. Las herramientas resultantes son dos fragmentadores de código para Java y Erlang, y un depurador de CSP reversible y causal-consistente. / [CA] La producció de programari eficient i eficaç és una tasca que resulta tan difícil hui dia com ho va ser durant l'adveniment dels ordinadors. Per cada millora de maquinari i ferramentes per al desenvolupament, augmenta sovint la demanda de programes, així com la seua complexitat. Com a conseqüència, totes aquestes anàlisis auxiliars esdevenen una part integral del desenvolupament de programari.
La fragmentació de programes és una tècnica d'anàlisi estàtica, que respon a "Quines parts d'aquest programa poden afectar a aquesta instrucció?". L'aplicació principal d'aquesta tècnica és la depuració de programes, per la seua capacitat de reduir la llargària d'un programa sense canviar el seu funcionament respecte a una instrucció que està fallant, delimitant així l'àrea del codi en què el programador busca l'origen de l'errada. Tot i això, té moltes altres aplicacions, com la paral·lelització i especialització de programes o la comprensió de programes i el seu manteniment. Durant els darrers anys, l'ús més freqüent de la fragmentació de programes ha sigut com a <<preprocés>> abans d'altres anàlisis amb un alt cost computacional, per tal de reduir-ne el temps requerit per realitzar-les. L'estructura de dades més popular per fragmentar programes és el system dependence graph (SDG), un graf dirigit representant-ne les instruccions d'un programa amb vèrtexs i les seues dependències amb arcs. Els dos tipus principals de dependència són el de control i el de dades, aquests encapsulen el flux de control i dades a totes les possibles execucions d'un programa.
L'àrea dels llenguatges de programació s'hi troba en constant evolució, o bé per l'aparició de nous llenguatges, o bé per noves característiques per als preexistents, com poden ser Java o Erlang. No obstant això, la fragmentació de programes s'hi va definir originalment per al paradigma imperatiu. Tot i que, també hi trobem característiques populars als llenguatges imperatius, com els arrays i les excepcions, que encara no en tenen una representació eficient i/o completa al SDG. Altres paradigmes, com el funcional o l'orientat a objectes, pateixen també d'un suport reduit al SDG.
Aquesta tesi presenta millores per a construccions comunes de la programació moderna, dividint les contribucions entre aquelles enfocades a les dependències de control i aquelles enfocades a dades. Per a les primeres, hi especifiquem una nova representació d'instruccions catch, junt amb una descripció de la resta d'instruccions relacionades amb excepcions. També hi analitzem les tècniques capdavanteres de fragmentació de salts incondicionals, i hi mostrem els riscs de combinar-ne-les amb altres tècniques per a objectes, instruccions de crida i excepcions. A continuació, hi posem la nostra atenció en la concurrència, amb una formalització d'un depurador d'especificacions CSP reversible i causal-consistent. Respecte a les dependències de dades, dirigim els nostres esforços a produir tècniques sensibles al context (és a dir, que es mantinguen precises en presència de procediments). Hi explorem les dependències de dades generades en programes concurrents amb memòria compartida, redefinint-ne les dependències d'interferència per a fer-ne-les sensibles al context. Seguidament, hi demostrem la indecidibilitat d'alguns tipus d'anàlisis de dades per a programes amb estructures de dades complexes. Finalment, hi ampliem un treball previ sobre la fragmentació d'estructures de dades complexes, combinant-lo amb la fragmentació tabular, fent-hi-la sensible al context.
A més a més, s'han desenvolupat o estés diverses llibreries de codi amb les millores esmentades prèviament. Aquestes llibreries ens han permés avaluar empíricament alguns dels capítols i també han sigut publicades sota llicències lliures, fet que permet a altres desenvolupadors i investigadors poder estendre-les i contrastar-les, respectivament. Les ferramentes resultants són dos fragmentadors de codi per a Java i Erlang, i un depurador CSP. / [EN] Producing efficient and effective software is a task that has remained difficult since the advent of computers. With every improvement on hardware and developer tooling (e.g., compilers and checkers), the demand for software has increased even further. This means that auxiliary analyses have become integral in developing complex software systems.
Program slicing is a static analysis technique that gives answers to "What parts of the program can affect a given statement?", and similar questions. Its main application is debugging, as it can reduce the amount of code on which a programmer must look for a mistake or bug. Other applications include program parallelization and specialisation, program comprehension, and software maintenance. Lately, it has mostly been applied as a pre-processing step in other expensive static analyses, to lower the size of the program and thus the analyses' runtime. The most popular data structure in program slicing is the system dependence graph (SDG), which represents statements as nodes and dependences as arcs between them. The two main types of dependences are control and data dependences, which encapsulate the control and data flow throughout every possible execution of a program.
Programming languages are an ever-expanding subject, with new features coming to new releases of popular and up-and-coming languages like Python, Java, Erlang, Rust, and Go. However, program slicing was originally defined for (and has been mostly focused on) imperative programming languages. Even then, some popular elements of the imperative paradigm, such as arrays and exceptions do not have an efficient or sometimes complete representation in the SDG. Other paradigms, such as functional or object-oriented also suffer from partial support in the SDG.
This thesis presents improvements for common programming constructs, and its contributions are split into control and data dependence. For the former, we (i) specify a new representation of catch statements, along with a full description of other exception-handling constructs. We also (ii) analyse the current state-of-the-art technique for unconditional jumps (e.g., break or return), and show the risks of combining it with other popular techniques. Then, we focus on concurrency, with a (iii) formalisation of a reversible, causal-consistent debugger for CSP specifications. Switching to data dependences, we focus our contributions on making existing techniques context-sensitive (i.e., more accurate in the presence of routines or functions). We explore the data dependences involved in shared-memory concurrent programs, (iv) redefining interference dependence to make it context-sensitive. Afterwards, we take a small detour to (v) explore the decidability of various data analyses on programs with (and without) complex data structures and routine calls. Finally, we (vi) extend our previous work on slicing complex data structures to combine it with tabular slicing, which provides context-sensitivity.
Additionally, throughout this thesis, multiple supporting software libraries have been written or extended with the aforementioned improvements to program slicing. These have been used to provide empirical evaluations, and are available under libre software licenses, such that other researchers and software developers may extend or contrast them against their own proposals. The resulting tools are two program slicers for Java and Erlang, and a causal-consistent reversible debugger for CSP. / Galindo Jiménez, CS. (2024). Program Slicing for Modern Programming Languages [Tesis doctoral]. Universitat Politècnica de València. https://doi.org/10.4995/Thesis/10251/211183
|
699 |
Raffinement temporel et exécution parallèle dans un langage synchrone fonctionnelPasteur, Cédric 26 November 2013 (has links) (PDF)
Nous nous intéressons dans ce manuscrit au langage ReactiveML, qui est une extension de ML avec des constructions inspirées des langages synchrones. L'idée de ces langages est de diviser l'exécution d'un programme en une suite d'instants logiques discrets. Cela permet de proposer un modèle de concurrence déterministe que l'on peut compiler vers du code séquentiel impératif. La principale application de ReactiveML est la simulation discrète, par exemple de réseaux de capteurs. Nous cherchons ici à programmer des simulations à grande échelle, ce qui pose deux questions : sait-on les programmer de façon simple et modulaire ? sait-on ensuite exécuter ces programmes efficacement ? Nous répondons à la première question en proposant une extension du modèle synchrone appelée domaines réactifs. Elle permet de créer des instants locaux invisibles de l'extérieur. Cela rend possible le raffinement temporel, c'est-à-dire le remplacement d'une approximation d'un système par une version plus détaillée sans changer son comportement externe. Nous développons dans ce manuscrit la sémantique formelle de cette construction ainsi que plusieurs analyses statiques, sous forme de systèmes de types-et-effets, garantissant la sûreté des programmes dans le langage étendu. Enfin, nous montrons également plusieurs implémentations parallèles du langage pour tenter de répondre à la question du passage à l'échelle des simulations. Nous décrivons tout d'abord une implémentation avec threads communiquant par mémoire partagée et basée sur le vol de tâches, puis une seconde implémentation utilisant des processus lourds communiquant par envoi de messages.
|
700 |
Environnement de programmation, support à l'exécution et simulateur pour machines à grand nombre de cœurs.Certner, Olivier 15 December 2010 (has links) (PDF)
L'accroissement régulier de la fréquence des micro-processeurs et des importants gains de puissance qui en avaient résulté ont pris fin en 2005. Les autres techniques matérielles d'amélioration de performance se sont largement essouflées. Les fabricants de micro-processeurs ont donc choisi d'exploiter le nombre croissant de transistors disponibles en plaçant plusieurs cœurs de processeurs sur une même puce. Dans cette thèse, nous préparons l'arrivée de processeurs multi-cœur à grand nombre de cœurs par des recherches dans trois directions. Premièrement, nous améliorons l'environnement de parallélisation CAPSULE (parallélisation conditionnelle) en lui adjoignant des primitives de synchronization de tâches robustes. Nous montrons les gains obtenus par rapport aux approches usuelles en terme de rapidité et de stabilité du temps d'exécution. Deuxièmement, nous adaptons CAPSULE à des machines à mémoire distribuée en présentant un modèle de données qui permet au système de déplacer automatiquement les données en fonction des accès effectués par les programmes. De nouveaux algorithmes répartis et locaux permettent de décider de la création effective des tâches et de leur répartition. Troisièmement, nous développons un nouveau simulateur d'évènements discrets, SiMany, qui peut prendre en charge des centaines à des milliers de cœurs. Il est plus de 100 fois plus rapide que les meilleurs simulateurs flexibles actuels. Après validation, nous montrons que SiMany permet l'exploration d'un plus large champ d'architectures ainsi que l'étude des grandes lignes du comportement des logiciels sur celles-ci.
|
Page generated in 0.0951 seconds