Formal Verification of Component-Based Software Systems Leandro Dias da Silva and Angelo Perkusich Departamento de Engenharia Elétrica Universidade Federal de Campina Grande Caixa Postal 10.105 - 58109-970 Campina Grande-PB-Brazil Fone: +55 83 310 1137 Fax: +55 83 310 1015 leandro@dee.ufcg.edu.br, perkusic@dee.ufcg.edu.br Abstract. In this work we present a methodology for formal modeling and veri- fication of component based software systems. The methodology is based on soft- ware architecture, components, and reuse of Petri Nets models. With this process, we are contributing for the visual composition, verification, and formal validation of software. We also show an example of the application of this methodology into two different domains. 1 Introduction Product lines have been used to develop different artifacts with similarities [10], pro- moting the development of products with less effort, time and cost. In order to have a software product line it is necessary to change the management and the production phases to take the advantages of this development process. Software systems have been developed using product lines to obtain different prod- ucts based on parts or common blocks. To do so, it is necessary a business strategy to guide the development process in order to obtain common values to be used in a known and defined domain. The developed and used values in a product line may vary from strategies established in early requirements definition and project decisions to ex- ecutable code. Based on these parts, different systems can be developed with specific characteristics. A set of such systems is known as system family. Based on such process there are two possible kind of business to be considered. The first one is the development of pieces of a system that can be used as a basis to develop a family of components on a common domain. The second one is based on the development of systems based on existing components [31,29,34,14,15]. When using components to develop a product it is necessary to have an integra- tion strategy to define where and how the components can be integrated, how they are related, and possible integration restrictions, resulting in a software architecture [33]. Therefore a standard architecture for a family of systems that can be developed based on common components can be defined. Thus, a system can be developed based on components as basic building blocks for the development of complex software systems. A component may be seen as an autonomous system implementing specific functionalities with a well defined interface. Another relevant aspect is the need to have methods and techniques to manage the reuse of components. In this context formal methods can be used in order to increase the dependability on component-based systems. Furthermore, the use of formal methods in the modeling of systems aggregate several advantages such as, for instance, automatic