• Refine Query
  • Source
  • Publication year
  • to
  • Language
  • 36
  • 11
  • Tagged with
  • 47
  • 47
  • 47
  • 45
  • 13
  • 13
  • 12
  • 10
  • 10
  • 9
  • 7
  • 7
  • 7
  • 6
  • 6
  • About
  • The Global ETD Search service is a free service for researchers to find electronic theses and dissertations. This service is provided by the Networked Digital Library of Theses and Dissertations.
    Our metadata is collected from universities around the world. If you manage a university/consortium/country archive and want to be added, details can be found on the NDLTD website.
1

[en] RECOVERY ORIENTED SOFTWARE / [pt] SOFTWARE ORIENTADO À RECUPERAÇÃO

JOAO ALFREDO PINTO DE MAGALHAES 24 March 2010 (has links)
[pt] Software orientado à recuperação é construído com a perspective que falhas de hardware e software bem como erros de operação são fatos com os quais se deve conviver, pois são problemas que não podem ser resolvidos no desenvolvimento de aplicações reais e complexas. Consequentemente, qualquer software sempre terá uma chance diferente de zero de falhar. Algumas dessas falhas podem ser causadas por defeitos que podem ser removidos ou encapsulados. Uma questão chave é aumentar a detectabilidade de erros, ou em outras palavras, aumentar a auto-consciência comportamental de um software. Nesse trabalho, apresentamos os resultados da aplicação sistemática de técnicas conhecidas (design by contract, self-checking software, componentes de software, software depurável, design for testability, mock components e padrões) com o objetivo de criar software orientado à recuperação. Através da medição de cinco aplicações reais de tempo real, analisamos os efeitos da adoção dessas técnicas. Em particular, observamos o balanceamento do esforço gasto em diferentes estágios do desenvolvimento a exploramos o conceito de redundância de raciocínio que, além de prover uma maior detectabilidade de erros e depurabilidade, também leva ao aumento da qualidade por construção. Os resultados foram encorajadores por terem sido sistematicamente melhores do que aqueles reportados pela literatura e obtidos a um custo acessível. / [en] Recovery oriented software is built with the perspective that hardware or software failures as well as operation mistakes are facts to be coped with, since they are problems that cannot be fully solved while developing real complex applications. Consequently, any software will always have a non-zero chance of failure. Some of these failures may be caused by defects that could be removed or encapsulated. A key issue is to increase the detectability of errors, in other words, increase the self-awareness of the software s behavior. In this work, we present the results of systematically applying already well known techniques (design by contract, self-checking software, software components, debuggable software, design for testability, mock components and patterns) with the intent of creating recovery oriented software. Measuring the development of five different real-time and real world applications, we analyzed the effects of the adoption of these techniques. In particular we observed the balancing of the effort spent in different development stages and explore the reduncancy of reasoning concept that, as well as providing a higher detectability and debuggability, also leads to enhancing quality-by-construction. The results were encouraging since they were systematically better than those reported in the literature and were achieved at a feasible cost.
2

[en] DEPENDABILITY OF OPEN MULTI-AGENT SYSTEM: A CONTRACT APPROACH / [pt] FIDEDIGNIDADE EM SISTEMAS MULTI-AGENTES ABERTOS: UMA ABORDAGEM ATRAVÉS DE CONTRATOS

CYNTHIA LUIZA RIGO MOISES 28 May 2009 (has links)
[pt] Nesta dissertação apresenta-se um modelo para aplicação de contratos em ambientes multi-agentes abertos. A idéia principal em um sistema multiagente é que um comportamento global inteligente possa ser alcançado a partir do comportamento individual dos agentes. Neste contexto, surge a dificuldade em se garantir que agentes estão cooperando corretamente para alcançar os objetivos da organização no qual estão inseridos. O modelo proposto neste trabalho visa expandir os conceitos de contratos em componentes a sistemas multi-agentes abertos. Contratos podem ser entendidos como uma forma de negociação entre componentes, no qual se estabelecem obrigações e benefícios que devem ser respeitados por todos os participantes do contrato na execução de serviços. Porém, quando o assunto é sistemas multi-agentes, há pouca literatura disponível. Isto se deve pela dificuldade de se traduzir contratos para componentes sobre o paradigma orientado a objetos às características dos agentes. Componentes possuem métodos e interfaces bem definidas, enquanto agentes ocultam suas estruturas internas e talvez apresentem comportamentos complexos. Um framework foi desenvolvido baseado no modelo conceitual proposto. O resultado visa demonstrar a viabilidade de se aplicar contratos para componentes a ambientes multi-agentes abertos, com o objetivo de gerenciar e averiguar a cooperação entre agentes, levando em consideração seus papéis na organização e respeitando suas características individuais. / [en] In this work, we propose a model for applying contracts in open multi-agent systems. The main idea in a multi-agent system is that an intelligent global behavior can be reached from the individual behavior of the agents. In this context, it is difficulty to guarantee that the agents are correctly cooperating to reach the organization objectives in which they are inserted. The model considered in this work expands the contract concepts in components to open multi-agent system. Contracts can be understood as a negotiation form between components, which entails obligations and benefits for both parties. However, when the subject is multi-agent systems, there are a few available literatures. This is explained because contracts for components, guided on object paradigm, are hard to be translated to the characteristics of the agents. Components have methods and well defined interfaces, while agents hide their internal structures and perhaps they present complex behaviors. A framework was developed based on the conceptual model we are proposing. The result demonstrates the viability of applying contracts for components to the open multi-agents environments. The main goal is to manage and to inquire the cooperation between agents, considering the agents roles in the organization and respecting the individual agent characteristics.
3

[en] AN APPROACH TO EVOLUTION IN SOFTWARE MEASUREMENT REPOSITORIES: THE CLAIRVOYANT SYSTEM / [pt] UMA ABORDAGEM PARA A EVOLUÇÃO TRANSPARENTE EM REPOSITÓRIOS DE MEDIÇÃO DE SOFTWARE: O SISTEMA CLAIRVOYANT

BERNARDO ARRAES VINHOSA 02 October 2007 (has links)
[pt] O sistema Clairvoyant é um protótipo de repositório de medições de software cujo diferencial é oferecer a capacidade de evolução transparente do modelo de medição. Isso quer dizer que as alterações no modelo de medição podem ser feitas sem expor a estrutura interna do armazenamento de medições que torna possível essa evolução. A importância desse tema advém do fato das necessidades de informação que geram as medições em ambientes de engenharia de software estarem em constante mudança. Para que o sistema Clairvoyant comportasse a evolução transparente do modelo de medição, foi necessário dotálo de um meta-modelo de medições e um modelo de consultas adequados a este fim. Na dissertação são explicados esses modelos e a influência deles nos macroprocessos operacionais do repositório de medição (manutenção do modelo de medições, importação de dados, consulta aos dados e exportação de dados). / [en] The Clairvoyant system is a software measurement repository prototype which stands out for allowing transparent evolution in its measurement model. This means that changes can be made to its measurement model without revealing the underlying storage structure which makes possible this evolution. This is an important concern due to the fact that the information needs to which the measurements respond constantly evolve. The Clairvoyant system was designed based on a measurement meta-model and a measurement query model to make it possible to transparently evolve its measurement model. This work explains these models and studies their influence on the repository´s operational macro-processes (measurement model maintenance, measurement data importing, measurement data querying and measurement data exporting).
4

[en] A SEMANTIC WEB APPLICATION FRAMEWORK / [pt] UM FRAMEWORK DE APLICAÇÕES PARA A WEB SEMÂNTICA

LEONARDO MAGELA CUNHA 26 June 2007 (has links)
[pt] Até alguns anos atrás, a Web disseminava principalmente documentos. Com o advento das aplicações Web, as organizações puderam disponibilizar informações que estavam em seus bancos de dados e sistemas legados. Entretanto, a comunicação entre estas aplicações ou com aplicações de usuários finais, às vezes, não era possível devido a diferenças no formato de representação dos dados. O desenvolvimento de padrões (standards) e o uso da eXtensible Markup Language (XML) resolveram muitos destes problemas. Apesar das soluções desenvolvidas serem somente sintáticas elas funcionam em muitos casos, como por exemplo, na interoperabilidade de esquemas em sistemas bussiness to bussiness de e-commerce. Entretanto, a falta do aspecto semântico impossibilitou que as aplicações fizessem mais uso dos dados ou os utilizassem de forma mais inteligente. A idéia da Web Semântica é definir explicitamente o significado dos dados que se encontram na Web. Com isso, esperam-se aplicações capazes de entender o que significam os dados. E uma vez que estas aplicações entendam os dados, elas possibilitarão que os usuários utilizem essa nova Web dirigida a dados para facilitar as suas tarefas rotineiras. Esta tese propõe um framework para o desenvolvimento de aplicações para a Web Semântica. Considerando o que foi descrito no parágrafo anterior, o número de aplicações que podem ser construídas é quase infinito. Portanto, nós nos restringimos a observar as aplicações que tem por objetivo solucionar o problema apresentado pelo Semantic Web Challenge; e propor um framework que represente estas soluções. O Challenge tem como principal finalidade demonstrar como as aplicações podem atrair e beneficiar o usuário final através do uso das técnicas da Web Semântica. Conseqüentemente, nossa intenção é possibilitar que o desenvolvedor de aplicações possa atingir essa atração e benefícios, através do uso das técnicas de Web Semântica e de Engenharia de Software, utilizando um framework para o desenvolvimento das aplicações. / [en] Documents have been the main vehicle of the Web until some years ago. With the advent of Web applications, data stored in organizations databases or legacy systems has been made available to users. However, very often, the exchange of data between those applications themselves or between them and end-users applications were not possible since they used different formats for the information representation. The development of standards and the use of the eXtensible Markup Language (XML) solved parts of the problem. That was a syntactic solution and it works for several cases, e.g., schema interoperability in Business-to-Business e-commerce scenarios. Nevertheless, the lack of semantics on these data prevented applications to take more advantage of them. The idea behind the Semantic Web is to define explicitly the semantics of data available on the Web. Therefore, we expect another step forward where applications, being them corporative or for end-users, will understand the meaning of the data available on the Web. Once those applications can understand it, they will be able to help users to take advantage of this data driven Web and to perform their daily tasks easily. This thesis proposes a framework for the development of Semantic Web applications. Considering the scenario described in the previous paragraph, the number of possible applications that can be developed is almost infinite. For this reason, we restricted ourselves to examine the solutions that aim to solve the problem presented at the Semantic Web Challenge; and to propose a framework that represent those solutions. The challenge is concerned in demonstrating how Semantic Web techniques can provide valuable or attractive applications to end users. Our main concern was then to demonstrate and help a developer to achieve that value addition or attractiveness, through Semantic Web techniques, in a Software Engineering approach using frameworks.
5

[en] A PROCESS BASED ON MDA FOR SPECIALIZATION OF PERSISTENCE MECHANISMS / [pt] UM PROCESSO BASEADO EM MDA PARA A ESPECIALIZAÇÃO DE MECANISMOS DE PERSISTÊNCIA

FABIO SEIXAS MARQUES 06 November 2006 (has links)
[pt] Com as constantes mudanças nos requisitos funcionais e não- funcionais do domínio das aplicações, há uma grande necessidade dos softwares se adaptarem a essas mudanças. Devido a isso, o processo proposto neste trabalho tem o intuito de automatizar algumas partes do desenvolvimento de aplicações, minimizando o trabalho manual necessário para adaptar os sistemas de software às constantes necessidades de mudanças determinadas pela realidade do mundo dos negócios. A abordagem Model Driven Architecture (MDA), definida pela OMG, foi utilizada como base para este processo por ter como objetivo principal a transformação de modelos; ou seja, gerar, a partir de um modelo independente de plataforma, um ou mais modelos específicos para uma plataforma. O processo proposto é dividido de acordo com as etapas da MDA, tendo como objetivo auxiliar nas etapas de geração de modelos e na adaptação de frameworks de persistência. Foi utilizado no processo em questão, o conceito de base de conhecimento, tendo como objetivo principal mapear as informações contidas no modelo com as regras de transformações a serem realizadas no mesmo. Essas regras são responsáveis pela definição das modificações a serem realizadas nos modelos independentes de plataforma com o objetivo de incluir um determinado framework de persistência em uma aplicação. A linguagem RDL foi utilizada para formalizar as regras de transformações utilizadas no processo, facilitando o desenvolvimento e a manutenção das mesmas. O processo tem como resultado um modelo específico para uma plataforma, contendo ainda um framework de persistência adaptado à arquitetura utilizada. Alguns arquivos de configuração também são gerados com o intuito de minimizar o trabalho manual. / [en] According to the changes on functional and non-functional requirements on application field, there is a great need for softwares to adapt themselves to these changes. Due to it, the process involved on this work has the purpose of automate some parts of applications´ developments, reducing the manual work needed to adapt the software systems to the need of constant changes determined by business world´s reality. The approach Model Driven Architecture (MDA), defined by OMG, was used as base for this process, having as main goal the transformation of models; i mean, generate from an platform independent model, one or more platform specific models. The process suggested is divided according to the MDA steps, having as a goal the support of generate models steps and on the adaptation of Persistence Frameworks. It was used on the suggested process, the concept of base of knowledge, having as main goal map the informations held within the model with the transformation rules to be done on these models. These rules are responsible by the definition of changes to be done on platform-independent models aiming to include a specific Persistence Framework in an application. The language RDL was used to formalize the transformation rules used in the process, making the development and maintenance of themselves easy the process has as a result a platform-specific model, also a Persistence Framework adapted to the architecture used. Some configuration files also are generated, intending to reduce the manual work.
6

[en] SDIFF: A COMPARISON TOOL BASED IN SYNTACTICAL DOCUMENT STRUCTURE / [pt] SDIFF: UMA FERRAMENTA PARA COMPARAÇÃO DE DOCUMENTOS COM BASE NAS SUAS ESTRUTURAS SINTÁTICAS

THIAGO PINHEIRO DE ARAUJO 15 September 2010 (has links)
[pt] Associado a cada sistema de controle de versão existe uma ferramenta de comparação responsável pela extração das diferenças entre duas versões de um documento. Estas ferramentas costumam realizar a comparação baseando-se na informação textual dos documentos, em que o elemento indivisível na comparação é a linha ou a palavra. Porém, o conteúdo versionado normalmente é fortemente estruturado (como exemplo, linguagens de programação) e a utilização deste mecanismo pode desrespeitar limites sintáticos e outras propriedades do documento, dificultando a interpretação das alterações. Nesse trabalho foi construída uma ferramenta para identificar as diferenças entre duas versões de um documento utilizando um mecanismo de comparação baseado na sua estrutura sintática. Desta forma, é possível identificar com maior precisão as diferenças relevantes ao leitor, reduzindo o esforço para compreender a semântica das alterações. A ferramenta construída é capaz de suportar diferentes tipos de documentos a partir da implementação de componentes que tratem das sintaxes desejadas. O componente implementado como exemplo neste trabalho trata a sintaxe da linguagem de programação C++. / [en] Associated with each version control system there’s a comparison tool for extracting the differences between two versions of a document. These tools tend to make a comparison based on textual information from documents, in which the indivisible element is the line or word. But the content versioned is usually highly structured (for example, programming languages) and the use of this mechanism can disrespect syntactical limits and other properties of the document, becoming difficult to interpret what really changed. In this work we created a tool to identify differences between two versions of a document using a comparison mechanism based on the syntactic structure. Thus, it is possible to identify more precisely the relevant differences to the reader, reducing the effort to understand the semantics of the changes. The tool can support different types of documents by implementing components that interprets the desired syntax. The example syntax component implemented in this work deals with the syntax of the programming language C++.
7

[en] SEMI-AUTOMATIC GENERATION OF FUNCTIONAL TEST SCRIPTS BY COMPOSING USE CASES WITH DECISION TABLES / [pt] GERAÇÃO SEMI-AUTOMÁTICA DE MASSAS DE TESTES FUNCIONAIS A PARTIR DA COMPOSIÇÃO DE CASOS DE USO E TABELAS DE DECISÃO

LUIZ RODOLFO NEVES CALDEIRA 27 January 2011 (has links)
[pt] Este trabalho tem por objetivo propor um processo e ferramentas para a geração semi-automática de scripts de teste funcional para sistemas web, a partir de casos de uso e tabelas de decisão, com vistas à geração de eficazes scripts de teste automatizados, simultaneamente reduzindo o tempo gasto para gerá-los. As especificações dos testes dão-se através de descrições de casos de uso escritas usando português restrito semi-estruturado e obedecendo a uma estrutura precisamente definida. Com o auxílio de uma ferramenta, monta-se manualmente uma tabela de decisão a partir desses casos de uso. Os casos de teste semânticos são gerados automaticamente a partir destas tabelas de decisão. Outra ferramenta é responsável por gerar os scripts de testes a partir dos casos de teste semânticos. Os scripts de teste gerados devem adequar-se à ferramenta de execução automatizada dos testes. Neste trabalho, utilizou-se a ferramenta Selenium para a automação da interação com o navegador. A avaliação da eficácia deu-se através da aplicação do processo em um sistema real e através de comparação com técnicas tradicionais de geração de testes automatizados aplicadas ao mesmo sistema. / [en] This work aims at developing a process and tools for the semi-automatic generation of functional test scripts for web based systems. The process and tools depart from use cases and decision tables, in order to produce high quality automated tests as well as to reduce the time spent generating them. The tests specifications are provided by use cases written in semi-structured Portuguese and obeying a well defined structure. By means of a tool, decision tables are manually built from the use case descriptions. Afterwards semantic test cases are automatically generated from these decision tables. Another tool generates executable test scripts from these test cases. The generated test scripts must suit the tool used for automated testing. In this work, the Selenium tool was used for automating test interaction with the browser. The evaluation of the efficacy of the process and tools was performed applying them to a real system and comparing the result with traditional techniques of automated test generation regarding this same system.
8

[en] A NEW APPROACH FOR MINING SOFTWARE REPOSITORIES USING SEMANTIC WEB TOOLS / [pt] UMA NOVA ABORDAGEM DE MINERAÇÃO DE REPOSITÓRIOS DE SOFTWARE UTILIZANDO FERRAMENTAS DA WEB SEMÂNTICA

FERNANDO DE FREITAS SILVA 15 July 2015 (has links)
[pt] A Mineração de Repositórios de Software é um campo de pesquisa que extrai e analisa informações disponíveis em repositórios de software, como sistemas de controle de versão e gerenciadores de issues. Atualmente, diversos trabalhos nesta área de pesquisa têm utilizado as ferramentas da Web Semântica durante o processo de extração a fim de superar algumas limitações que as abordagens tradicionais enfrentam. O objetivo deste trabalho é estender estas abordagens que utilizam a Web Semântica para minerar informações não consideradas atualmente. Uma destas informações é o relacionamento existente entre as revisões do controle de versão e as mudanças que ocorrem no Abstract Syntax Trees dos arquivos modificados por essas revisões. Adicionalmente, esta nova abordagem também permite modelar a interdependência entre os projetos de software, suas licenças e extrair informações dos builds gerados por ferramentas de integração contínua. A validação desta nova abordagem é demonstrada através de um conjunto de questões que são feitas por desenvolvedores e gerentes durante a execução de um projeto e que foram identificadas em vários trabalhos da literatura. Demonstramos como estas questões foram convertidas para consultas SPARQL e como este trabalho consegue responder às questões que não são respondidas ou são respondidas parcialmente em outras ferramentas. / [en] The Mining of Software Repositories is a field of research that extracts and analyzes information available in software repositories, such as version control systems and issue trackers. Currently, several research works in this area have used Semantic Web tools during the extraction process to overcome some limitations that traditional approaches face. The objective of this work is to extend the existing approaches that use Semantic Web tools to mine information not considered in these works. The objective of this work is to extend these approaches using the Semantic Web to mine information not currently considered. One of these information is the relationship between revisions of version control and the changes that occur in the Abstract Syntax Trees of files modified by these revisions. Additionally, this new approach also allows modeling the interdependence of software projects, their licenses and extracting information from builds generated by continuous integration tools. The validation of this approach is demonstrated through a set of questions that are asked by developers and managers during the execution of a project and have been identified in various works in the literature. We show how these questions were translated into SPARQL queries and how this work can answer the questions that are not answered or are partially answered in other tools.
9

[en] A HISTORY SENSITIVE APPROACH TO CODE ANOMALY DETECTION / [pt] UMA ABORDAGEM SENSÍVEL À HISTÓRIA PARA DETECÇÃO DE ANOMALIAS DE CÓDIGO

LEANDRA MARA DA SILVA 30 March 2011 (has links)
[pt] A modularização do código pode influenciar diretamente a manutenibilidade de sistemas de software. Por isso, pesquisadores têm proposto mecanismos que visam contribuir com a identificação de potenciais anomalias de modularidade no código. Nesse contexto, um mecanismo baseado em métricas que vêm sendo bastante divulgado são as estratégias de detecção. Comumente, elas são compostas por métricas que consideram apenas propriedades de versões isoladas dos sistemas. Entretanto, estudos recentes relatam que tal abordagem têm se apresentado contraproducente. Nossa pesquisa está relacionada à investigação dos possíveis benefícios de se considerar informações sobre a evolução do código na detecção de anomalias. Nesse contexto, este trabalho propõe um conjunto de métricas e de estratégias de detecção que consideram propriedades históricas do código em evolução. Além disso, uma ferramenta de medição e avaliação para dar suporte à abordagem também foi desenvolvida. Essa ferramenta permite a especificação declarativa de diferentes estratégias de detecção através de uma linguagem específica de domínio. Tal fato atende a necessidades particulares de desenvolvedores na configuração de estratégias e disponinbiliza a pesquisadores um ambiente propício à experimentação de estratégias de detecção. Ainda como contribuição desta pesquisa, é apresentada uma avaliação das estratégias em termos de precisão e revocação em dois sistemas de domínio diferentes. Resultados de estratégias convencionais e sensíveis à história são comparados em detecções de anomalias clássicas, tais como God Class, Divergent Change e Shotgun Surgery em um total de 16 versões desses sistemas. Como resultado desse estudo observou-se que a utilização de informações relacionadas à evolução do código pode trazer importantes contribuições à detecção de anomalias de código. / [en] The modularization of the code can directly influence the software maintainability. Therefore, researchers have proposed mechanisms to contribute to the identification of potential modularity anomalies in source code. In this context, a mechanism based on metrics that have been widespread are the detection strategies. Commonly, they are based on metrics that consider only properties of isolated versions of the systems. However, recent studies have reported that these strategies have been considered counter-productive. Our research is related to the investigation of the possible benefits of considering information about the code evolution to detect anomalies. In this context, this paper proposes a set of metrics and detection strategies that consider historic properties of the code evolution. Furthermore, a measuring and assessing tool to support the approach was also developed. This tool allows the declarative specifcation of different detection strategies through a domain-specific language. This fact meets the particular needs of developers in setting strategies and dispose to researchers an opportune environment to detection strategies experimentations. Also as a contribution of this research is presented an evaluation of strategies in terms of precision and recall in two systems of different domains. Results of conventional strategies and of history-sensitive strategies are compared in detections of classical modularity flaws, such as God Class, Divergent Change and Shotgun Surgery in a total of 16 versions of these systems. Results of this study showed that the use of information related to the code evolution can provide important contributions to detect design flaws in code.
10

[en] DEALING WITH DEVICE DATA OVERFLOW IN THE CLOUD / [pt] UTILIZANDO A NUVEM PARA LIDAR COM A SOBRECARGA DE DADOS EM DISPOSITIVOS FIXOS E MÓVEIS

18 January 2017 (has links)
[pt] A Computação em Nuvem torna-se a cada dia mais importante como plataforma para pesquisa na Engenharia de Software. Apesar da vasta literatura disponível para uso da Nuvem em ambientes comerciais, ainda há pouca pesquisa feita para que se modelem, desenhem e implementem novos aplicativos que façam uso inteligente da Nuvem. Nesta dissertação é proposta uma abstração que explora um aspecto fundamental dos sistemas em Nuvem - a elasticidade de dados. A abstração Container Database (CDB) provê uma solução baseada em Nuvem para a falta de espaço para armazenamento local de dados em dispositivos eletrônicos. Para demonstrar a viabilidade desta abordagem, é apresentada uma implementação da abstração CDB como uma API que funciona nos sistemas operacionais Windows 7 e Windows Mobile Phone 7. / [en] Cloud computing is rapidly becoming an important platform for research in Software Engineering. Despite the vibe and huge literature on commercial Cloud environments, there is, however, little research on how to capture, model, design and implement new software applications that can make intelligent use of the Cloud. In this paper we propose a new abstraction that explores a fundamental aspect of Cloud systems – data elasticity. The Container Database (CDB) abstraction provides a Cloud-based solution for scenarios where device local storage is not sufficient for manipulating data. To demonstrate the viability of the proposed approach we present an implementation of the CDB abstraction as an Object-Oriented API designed to work on Windows 7 and Windows Mobile Phone 7 Operation Systems.

Page generated in 0.045 seconds