The document discusses a case study of improving software development using Erlang/OTP. It includes an introduction, case study details, methodology sections on requirements analysis and design, paradigm implementation, and testing. The case study involves developing a complex insurance management application. The methodology incorporates object-oriented analysis with a declarative paradigm in Erlang. Testing focuses on unit testing data types using property-based testing with QuickCheck.
Fuzzing is a software testing technique that feeds random data to a program to test for crashes or security vulnerabilities. It can find bugs that other testing methods may miss by exploring unusual code paths. While fuzzing is effective at finding bugs, it only finds issues and does not evaluate the quality or reliability of the software. Code coverage metrics can be used alongside fuzzing to measure how thoroughly the code has been tested, but may still miss some bugs. Fuzzing works best when the tester has knowledge of the program's internal structure and algorithms.
Prachi Pandit is a senior domain analyst with over 3 years of experience in testing for life sciences and healthcare domains. She has expertise in functional testing, installation testing, acceptance testing, test automation using Selenium WebDriver, and bug tracking using JIRA. She is proficient in SQL, Unix commands, MS Office, and has worked on projects for Thermo Fisher Scientific involving test case creation, execution, and defect logging. Her role has included requirement analysis, test plan preparation, test execution, and defect prioritization. She is looking for a challenging position in software testing and quality assurance.
Industry-Academia Communication In Empirical Software EngineeringPer Runeson
This document discusses industry-academia communication in empirical software engineering. It provides context on a conference in 1968 that aimed to improve communication between industry and academia. It notes key differences in time horizons and languages between the two. Industry focuses on short-term market changes and profits, while academia focuses on long-term learning and publications. The document advocates for both sides to learn each other's languages and cultures to improve collaboration and help tear down walls between the two. It provides examples of successful collaboration projects over time that have helped improve practice.
Good unit tests are concise, focused on behavior rather than mechanics, and tell a story of intended usage through descriptive names and scenarios. Poor tests are overly procedural and verbose, lacking clarity. Effective testing requires considering tests as specifications that drive development by clearly expressing required functionality, rather than just verifying code works. Tests should focus on scenarios over individual operations and cut across code to demonstrate intended use.
A REVIEW OF SECURITY INTEGRATION TECHNIQUE IN AGILE SOFTWARE DEVELOPMENTijseajournal
Agile software development has gained a lot of popularity in the software industry due to its iterative and
incremental approach as well as user involvement. Agile has also been criticized due to lack of its ability to
deliver secure software. In this paper, extensive literature has been performed, in order to highlight the
existing security issues in agile software development. Majority of challenges reported in literature,
occurred due to lack of involvement of security expert. Improving security of a software system without
damaging the real essence of Agile can achieved with the continuous involvement of security engineer
throughout development lifecycle with its defined role and responsibilities.
Comparison between Test-Driven Development and Conventional Development: A Ca...IJERA Editor
In Software Engineering, different techniques and approaches are being used nowadays to produce reliable
software. The software quality relies heavily on the software testing. However, not all developers are concerned
with the testing stage of a software. This has affected the software quality and has increased the cost as well. To
avoid these issues, researchers paid a lot of effort on finding the best technique that guarantee the software
quality. In this paper we aim to explore the effectiveness of building test cases using Test-Driven Development
(TDD) technique compared with the conventional technique (Test-last). The comparison measures the
effectiveness of test cases with regard to number of defects, code coverage and test cases development duration
between TDD and Test-Last. The results has been analyzes and presented to support the best technique. On an
average, the effectiveness of test cases with regards to the selected quality factors in Test-Driven Development
(TDD) was better than the conventional technique (Test-last). TDD and conventional testing had nearly the
same percentage as result in code coverage. Moreover, the number of defects found and the test cases
development duration spent in TDD are high compared with Test-Last. The results led to suggest some
contributions and achievement that could be gained from applying TDD technique in software industry. As
using TDD as development technique in young companies can produce high quality software in less time.
The paper presents a new language called UDITA for describing tests. UDITA is a Java-based language that includes non-deterministic choice operators and an interface for generating linked data structures. This allows for more efficient and effective test generation compared to previous approaches. The language aims to make test specification easier while generating tests that are faster, of higher quality, and less complex than traditional manually written or randomly generated tests.
The document summarizes Vlad Acrețoaie's PhD thesis on developing model manipulation languages for end-user modelers. It introduces the Visual Model Query Language (VMQL), Visual Model Constraint Language (VMCL), and Visual Model Transformation Language (VMTL) designed to be more usable for non-programmers. Experiments showed VMQL and VMTL had good learnability and usability. Future work includes improving tool support, more qualitative evaluations, and building a theory of learnability for model manipulation languages. The thesis takes initial steps to develop highly usable languages for end-user modelers.
Fuzzing is a software testing technique that feeds random data to a program to test for crashes or security vulnerabilities. It can find bugs that other testing methods may miss by exploring unusual code paths. While fuzzing is effective at finding bugs, it only finds issues and does not evaluate the quality or reliability of the software. Code coverage metrics can be used alongside fuzzing to measure how thoroughly the code has been tested, but may still miss some bugs. Fuzzing works best when the tester has knowledge of the program's internal structure and algorithms.
Prachi Pandit is a senior domain analyst with over 3 years of experience in testing for life sciences and healthcare domains. She has expertise in functional testing, installation testing, acceptance testing, test automation using Selenium WebDriver, and bug tracking using JIRA. She is proficient in SQL, Unix commands, MS Office, and has worked on projects for Thermo Fisher Scientific involving test case creation, execution, and defect logging. Her role has included requirement analysis, test plan preparation, test execution, and defect prioritization. She is looking for a challenging position in software testing and quality assurance.
Industry-Academia Communication In Empirical Software EngineeringPer Runeson
This document discusses industry-academia communication in empirical software engineering. It provides context on a conference in 1968 that aimed to improve communication between industry and academia. It notes key differences in time horizons and languages between the two. Industry focuses on short-term market changes and profits, while academia focuses on long-term learning and publications. The document advocates for both sides to learn each other's languages and cultures to improve collaboration and help tear down walls between the two. It provides examples of successful collaboration projects over time that have helped improve practice.
Good unit tests are concise, focused on behavior rather than mechanics, and tell a story of intended usage through descriptive names and scenarios. Poor tests are overly procedural and verbose, lacking clarity. Effective testing requires considering tests as specifications that drive development by clearly expressing required functionality, rather than just verifying code works. Tests should focus on scenarios over individual operations and cut across code to demonstrate intended use.
A REVIEW OF SECURITY INTEGRATION TECHNIQUE IN AGILE SOFTWARE DEVELOPMENTijseajournal
Agile software development has gained a lot of popularity in the software industry due to its iterative and
incremental approach as well as user involvement. Agile has also been criticized due to lack of its ability to
deliver secure software. In this paper, extensive literature has been performed, in order to highlight the
existing security issues in agile software development. Majority of challenges reported in literature,
occurred due to lack of involvement of security expert. Improving security of a software system without
damaging the real essence of Agile can achieved with the continuous involvement of security engineer
throughout development lifecycle with its defined role and responsibilities.
Comparison between Test-Driven Development and Conventional Development: A Ca...IJERA Editor
In Software Engineering, different techniques and approaches are being used nowadays to produce reliable
software. The software quality relies heavily on the software testing. However, not all developers are concerned
with the testing stage of a software. This has affected the software quality and has increased the cost as well. To
avoid these issues, researchers paid a lot of effort on finding the best technique that guarantee the software
quality. In this paper we aim to explore the effectiveness of building test cases using Test-Driven Development
(TDD) technique compared with the conventional technique (Test-last). The comparison measures the
effectiveness of test cases with regard to number of defects, code coverage and test cases development duration
between TDD and Test-Last. The results has been analyzes and presented to support the best technique. On an
average, the effectiveness of test cases with regards to the selected quality factors in Test-Driven Development
(TDD) was better than the conventional technique (Test-last). TDD and conventional testing had nearly the
same percentage as result in code coverage. Moreover, the number of defects found and the test cases
development duration spent in TDD are high compared with Test-Last. The results led to suggest some
contributions and achievement that could be gained from applying TDD technique in software industry. As
using TDD as development technique in young companies can produce high quality software in less time.
The paper presents a new language called UDITA for describing tests. UDITA is a Java-based language that includes non-deterministic choice operators and an interface for generating linked data structures. This allows for more efficient and effective test generation compared to previous approaches. The language aims to make test specification easier while generating tests that are faster, of higher quality, and less complex than traditional manually written or randomly generated tests.
The document summarizes Vlad Acrețoaie's PhD thesis on developing model manipulation languages for end-user modelers. It introduces the Visual Model Query Language (VMQL), Visual Model Constraint Language (VMCL), and Visual Model Transformation Language (VMTL) designed to be more usable for non-programmers. Experiments showed VMQL and VMTL had good learnability and usability. Future work includes improving tool support, more qualitative evaluations, and building a theory of learnability for model manipulation languages. The thesis takes initial steps to develop highly usable languages for end-user modelers.
Prashant Nalawade is an IT professional with 8 years of experience in software testing. He has expertise in manual testing, test management, and agile methodologies. He is looking for a senior role in software testing and provides details of his technical skills, projects, and work experience to demonstrate his qualifications.
Extreme Programming (XP) is an agile methodology widely used for software development. However, XP is not as effective for medium and large projects due to weaknesses like poor documentation and lack of risk awareness. This paper reviews several studies on adapting XP for different project sizes through practices like extended planning, architecture design, and risk management. Case studies show the adapted XP approach can provide benefits to medium and large projects similar to what standard XP delivers for small projects.
Stc 2015 regional-round-ppt-exlopratory mobile testing with risk analysisArchana Krushnan
This document discusses using exploratory testing with risk analysis for mobile applications. It begins with an introduction to exploratory testing and risk-based testing. It then explains how blending exploratory testing with risk analysis provides structure and prioritizes testing areas of high risk. The document provides an example approach, discussing identifying risks and conducting exploratory tests on risky areas. It describes how exploratory testing is useful for mobile applications given their complexity. Finally, it covers pros and cons of exploratory testing and concludes that combining it with other techniques can improve test coverage and reduce risks.
Working software measures the progress. Basically, Agile method involves interleaving the specification, implementation, design and testing. Series of versions are developed with the involvement of and evaluation by the stake holders in each version. Agile methods aim at reducing the software process overheads (like documentation) and concentrate more on code rather than the design. Customer involvement, incremental delivery, freedom of developers to evolve new working methods, change management, and last but not the least simplicity is the basic essence of Agile development. Agile methodologies are well suited for small as well as medium sized projects.
Benchmark Research & Safety, Inc. is a multifaceted consulting firm that provides innovative solutions to enhance safety, performance, and satisfaction. They employ human factors practitioners, scientists, researchers, project managers, and software programmers to meet client needs. There are five reasons to choose Benchmark: 1) they take a comprehensive approach to solution development; 2) their staff has diverse backgrounds; 3) they have broad work experience in areas like usability, safety, and web development; 4) they focus on cost-effective solutions; 5) their solutions meet current needs and anticipate future requirements.
Adaptive Clinical Trials will enable you to access new case studies and learn from the experiences of the increasing number of major pharma companies who have embarked on adaptive trials. The event is split into two streams in order to provide in-depth, targeted information for both a clinical and a statistical audience and is relevant across all therapeutic disciplines. The event will cover topics such as trial design, the practical implications of making an adaptation on the supply chain, along with data collection and analysis. There will also be extensive coverage and opportunities for debate on the latest industry guidelines.
If you are looking into using adaptive trials, would like to expand your knowledge, or are experienced in adaptive trials and would benefit from discussing key industry and regulatory developments with your peers, this a must attend event.
The event will consist of:
An update from the regulators on the latest guidelines and an appraisal of what they look for in adaptive design
A broad range of case studies from across all phases and therapeutic areas to give you an in depth knowledge of what is working and what isn’t
Carefully researched round table discussions designed to focus on the key questions you have about adaptive trials, their design and execution
An examination of the business case for adaptive trials. Do they save time and money?
Performance Evaluation of Software Quality ModelEditor IJMTER
With the advent of Internet revolution and the emergence of knowledge based systems, Quality acquires a wider
and more challenging dimension. Quality has evolved and undergone transformation from the inspection era to
the quality control regime and then to quality management and finally to the present TQM approach. At every
stage of the transformation “Quality” has been attaining wider dimension with respect to Customer focus,
continual improvement and has been evolving for addressing increasing demands of customers with respect to
delivery of products and services.
The methods of exploratory testing has gained significant attention in industry and research in the last years. However, as many “buzzword" technologies, the introduction and application of exploratory testing is not straightforward. Exploratory testing it is not only black or white - scripted or exploratory - but also all shades of grey in between. Within the EASE industrial excellence center, we have executed an industrial workshop on exploratory testing, that helps providing understanding of how to choose feasible levels of exploration in exploratory testing. We will present the concepts of levels of exploration in exploratory testing, the outcomes of the workshop, along with relevant empirical research findings on exploratory testing.
A Method for Evaluating End-User Development TechnologiesClaudia Melo
Presentation at Americas Conference on Information Systems, 2017. Paper abstract:
End-user development (EUD) is a strategy that can reduce a considerable amount of business demand on
IT departments. Empowering the end-user in the context of software development is only possible
through technologies that allow them to manipulate data and information without the need for deep
programming knowledge. The successful selection of appropriate tools and technologies is highly
dependent on the context in which the end-user is embedded. End-users should be a central piece in any
software package evaluation, being key in the evaluation process in the end-user development context.
However, little research has empirically examined software package evaluation criteria and techniques in
general, and in the end-user development context in particular. This paper aims to provide a method for
technology evaluation in the context of end-user development and to present the evaluation of two
platforms. We conclude our study proposing a set of suggestions for future research.
Rudy Katchow and Andy Rooswinkel: Software Product Manager: A Mechanism to Manage Software Products in Small and Medium ISVs
Many tools have been introduced in the market to manage software products, yet there are many small and medium software companies do not apply systematic approach to manage their products and they tend to use general purpose text processing and spreadsheet solutions. In this research, we present SP Manager as an innovative tool for managing software products in small and medium independent software vendors (ISVs). This tool includes several concepts, such as situational method engineering and the integration with defect management, that makes this tool easy to adopt and deployed in different situations. If you are curious to know these concepts that you should be included in software product management tools and our suggested easy to adapt and deploy tool, then please attend this session.
Anuj Tiwari has over 3 years of experience as a QA Engineer, Technical Writer, and Business Analyst. He has worked on projects for clients like Walgreens and Accenture developing test plans, executing manual and automated test scripts, writing documentation, and performing requirements analysis. Currently, he works as an Automation Tester and Functional Tester on the Accenture Claims Component Services product, which provides an end-to-end solution for handling insurance claims.
This document contains a summary of Pavan Kumar's professional experience in software testing. He has over 5 years of experience in manual and automation testing in the healthcare domain. Currently he works as a senior test engineer at Happiest Minds Technologies where he is involved in automation testing using Selenium WebDriver and manual testing. Previously he has worked on pharmacy applications at Cerner Healthcare and medical imaging applications at Philips Healthcare.
This resume summarizes Kelvin Lo Yir Siang's qualifications. He has over 5 years of experience in software development and consulting roles. He is skilled in languages like C#, C++, and SQL. He holds a Master's degree in Computer Science. His goal is to obtain a software consultant position with a salary of SGD 5,000.
Maturing software engineering knowledge through classificationsimmortalchhetri
The document provides an overview of research conducted on classifying unit testing techniques. It discusses previous work on testing technique classifications and identifies their limitations. The research aims to develop a new classification scheme using operational and historical criteria. 30 classification criteria are identified and used to analyze 13 testing techniques. The results show the new classification improves efficiency and usability when selecting techniques compared to previous schemes. Knowledge gaps in existing techniques are also examined.
This document outlines Antonio González Torres's PhD dissertation on evolutionary visual software analytics. The dissertation was advised by Roberto Therón Sánchez and Francisco J. García Peñalvo and was presented to the Faculty of Science, Department of Computer Science and Automation on May 21, 2015. The dissertation proposes a visual analysis process for software evolution and validation studies including a systematic mapping study, survey of practitioners, and user study. It also presents several visualizations for software evolution data including timelines, revision trees, and socio-technical graphs.
Software Defect Prediction Using Local and Global AnalysisEditor IJMTER
The software defect factors are used to measure the quality of the software. The software
effort estimation is used to measure the effort required for the software development process. The defect
factor makes an impact on the software development effort. Software development and cost factors are
also decided with reference to the defect and effort factors. The software defects are predicted with
reference to the module information. Module link information are used in the effort estimation process.
Data mining techniques are used in the software analysis process. Clustering techniques are used
in the property grouping process. Rule mining methods are used to learn rules from clustered data
values. The “WHERE” clustering scheme and “WHICH” rule mining scheme are used in the defect
prediction and effort estimation process. The system uses the module information for the defect
prediction and effort estimation process.
The proposed system is designed to improve the defect prediction and effort estimation process.
The Single Objective Genetic Algorithm (SOGA) is used in the clustering process. The rule learning
operations are carried out sing the Apriori algorithm. The system improves the cluster accuracy levels.
The defect prediction and effort estimation accuracy is also improved by the system. The system is
developed using the Java language and Oracle relation database environment.
Today in era of software industry there is no perfect software framework available for
analysis and software development. Currently there are enormous number of software development
process exists which can be implemented to stabilize the process of developing a software system. But no
perfect system is recognized till yet which can help software developers for opting of best software
development process. This paper present the framework of skillful system combined with Likert scale. With
the help of Likert scale we define a rule based model and delegate some mass score to every process and
develop one tool name as MuxSet which will help the software developers to select an appropriate
development process that may enhance the probability of system success.
Dhanya Jose is a software testing professional with over 7 years of experience in quality assurance and test management. She has worked on projects for clients like Infosys, IBM, Shell, ESI, and Vodafone. She has expertise in test planning, strategy, execution, reporting, and defect management using tools like HP Quality Center, ClearQuest, SOAPUI, and Test Director. Currently she works as a technical test lead at Infosys managing a team of 20 people.
Ola, ChatGPT... que carreira sería boa para min?Laura M. Castro
Cumprimos case un ano da popularización das intelixencias artificiais xeneradoras en xeral, e ChatGPT en particular.
Nesta presentación exploramos os nesgos poden apresentarse nas respostas producidas por estes sistemas, a fin de visibilizar, divulgar e sensibilizar ao respecto.
Introdución histórica e de alto nivel á evolución da IA, e a popularidade actual das IAs xerativas ou xeradoras de contido, e presentación dun caso de estudo sobre os nesgos de xénero en ChatGPT.
More Related Content
Similar to Improving software development using Erlang/OTP
Prashant Nalawade is an IT professional with 8 years of experience in software testing. He has expertise in manual testing, test management, and agile methodologies. He is looking for a senior role in software testing and provides details of his technical skills, projects, and work experience to demonstrate his qualifications.
Extreme Programming (XP) is an agile methodology widely used for software development. However, XP is not as effective for medium and large projects due to weaknesses like poor documentation and lack of risk awareness. This paper reviews several studies on adapting XP for different project sizes through practices like extended planning, architecture design, and risk management. Case studies show the adapted XP approach can provide benefits to medium and large projects similar to what standard XP delivers for small projects.
Stc 2015 regional-round-ppt-exlopratory mobile testing with risk analysisArchana Krushnan
This document discusses using exploratory testing with risk analysis for mobile applications. It begins with an introduction to exploratory testing and risk-based testing. It then explains how blending exploratory testing with risk analysis provides structure and prioritizes testing areas of high risk. The document provides an example approach, discussing identifying risks and conducting exploratory tests on risky areas. It describes how exploratory testing is useful for mobile applications given their complexity. Finally, it covers pros and cons of exploratory testing and concludes that combining it with other techniques can improve test coverage and reduce risks.
Working software measures the progress. Basically, Agile method involves interleaving the specification, implementation, design and testing. Series of versions are developed with the involvement of and evaluation by the stake holders in each version. Agile methods aim at reducing the software process overheads (like documentation) and concentrate more on code rather than the design. Customer involvement, incremental delivery, freedom of developers to evolve new working methods, change management, and last but not the least simplicity is the basic essence of Agile development. Agile methodologies are well suited for small as well as medium sized projects.
Benchmark Research & Safety, Inc. is a multifaceted consulting firm that provides innovative solutions to enhance safety, performance, and satisfaction. They employ human factors practitioners, scientists, researchers, project managers, and software programmers to meet client needs. There are five reasons to choose Benchmark: 1) they take a comprehensive approach to solution development; 2) their staff has diverse backgrounds; 3) they have broad work experience in areas like usability, safety, and web development; 4) they focus on cost-effective solutions; 5) their solutions meet current needs and anticipate future requirements.
Adaptive Clinical Trials will enable you to access new case studies and learn from the experiences of the increasing number of major pharma companies who have embarked on adaptive trials. The event is split into two streams in order to provide in-depth, targeted information for both a clinical and a statistical audience and is relevant across all therapeutic disciplines. The event will cover topics such as trial design, the practical implications of making an adaptation on the supply chain, along with data collection and analysis. There will also be extensive coverage and opportunities for debate on the latest industry guidelines.
If you are looking into using adaptive trials, would like to expand your knowledge, or are experienced in adaptive trials and would benefit from discussing key industry and regulatory developments with your peers, this a must attend event.
The event will consist of:
An update from the regulators on the latest guidelines and an appraisal of what they look for in adaptive design
A broad range of case studies from across all phases and therapeutic areas to give you an in depth knowledge of what is working and what isn’t
Carefully researched round table discussions designed to focus on the key questions you have about adaptive trials, their design and execution
An examination of the business case for adaptive trials. Do they save time and money?
Performance Evaluation of Software Quality ModelEditor IJMTER
With the advent of Internet revolution and the emergence of knowledge based systems, Quality acquires a wider
and more challenging dimension. Quality has evolved and undergone transformation from the inspection era to
the quality control regime and then to quality management and finally to the present TQM approach. At every
stage of the transformation “Quality” has been attaining wider dimension with respect to Customer focus,
continual improvement and has been evolving for addressing increasing demands of customers with respect to
delivery of products and services.
The methods of exploratory testing has gained significant attention in industry and research in the last years. However, as many “buzzword" technologies, the introduction and application of exploratory testing is not straightforward. Exploratory testing it is not only black or white - scripted or exploratory - but also all shades of grey in between. Within the EASE industrial excellence center, we have executed an industrial workshop on exploratory testing, that helps providing understanding of how to choose feasible levels of exploration in exploratory testing. We will present the concepts of levels of exploration in exploratory testing, the outcomes of the workshop, along with relevant empirical research findings on exploratory testing.
A Method for Evaluating End-User Development TechnologiesClaudia Melo
Presentation at Americas Conference on Information Systems, 2017. Paper abstract:
End-user development (EUD) is a strategy that can reduce a considerable amount of business demand on
IT departments. Empowering the end-user in the context of software development is only possible
through technologies that allow them to manipulate data and information without the need for deep
programming knowledge. The successful selection of appropriate tools and technologies is highly
dependent on the context in which the end-user is embedded. End-users should be a central piece in any
software package evaluation, being key in the evaluation process in the end-user development context.
However, little research has empirically examined software package evaluation criteria and techniques in
general, and in the end-user development context in particular. This paper aims to provide a method for
technology evaluation in the context of end-user development and to present the evaluation of two
platforms. We conclude our study proposing a set of suggestions for future research.
Rudy Katchow and Andy Rooswinkel: Software Product Manager: A Mechanism to Manage Software Products in Small and Medium ISVs
Many tools have been introduced in the market to manage software products, yet there are many small and medium software companies do not apply systematic approach to manage their products and they tend to use general purpose text processing and spreadsheet solutions. In this research, we present SP Manager as an innovative tool for managing software products in small and medium independent software vendors (ISVs). This tool includes several concepts, such as situational method engineering and the integration with defect management, that makes this tool easy to adopt and deployed in different situations. If you are curious to know these concepts that you should be included in software product management tools and our suggested easy to adapt and deploy tool, then please attend this session.
Anuj Tiwari has over 3 years of experience as a QA Engineer, Technical Writer, and Business Analyst. He has worked on projects for clients like Walgreens and Accenture developing test plans, executing manual and automated test scripts, writing documentation, and performing requirements analysis. Currently, he works as an Automation Tester and Functional Tester on the Accenture Claims Component Services product, which provides an end-to-end solution for handling insurance claims.
This document contains a summary of Pavan Kumar's professional experience in software testing. He has over 5 years of experience in manual and automation testing in the healthcare domain. Currently he works as a senior test engineer at Happiest Minds Technologies where he is involved in automation testing using Selenium WebDriver and manual testing. Previously he has worked on pharmacy applications at Cerner Healthcare and medical imaging applications at Philips Healthcare.
This resume summarizes Kelvin Lo Yir Siang's qualifications. He has over 5 years of experience in software development and consulting roles. He is skilled in languages like C#, C++, and SQL. He holds a Master's degree in Computer Science. His goal is to obtain a software consultant position with a salary of SGD 5,000.
Maturing software engineering knowledge through classificationsimmortalchhetri
The document provides an overview of research conducted on classifying unit testing techniques. It discusses previous work on testing technique classifications and identifies their limitations. The research aims to develop a new classification scheme using operational and historical criteria. 30 classification criteria are identified and used to analyze 13 testing techniques. The results show the new classification improves efficiency and usability when selecting techniques compared to previous schemes. Knowledge gaps in existing techniques are also examined.
This document outlines Antonio González Torres's PhD dissertation on evolutionary visual software analytics. The dissertation was advised by Roberto Therón Sánchez and Francisco J. García Peñalvo and was presented to the Faculty of Science, Department of Computer Science and Automation on May 21, 2015. The dissertation proposes a visual analysis process for software evolution and validation studies including a systematic mapping study, survey of practitioners, and user study. It also presents several visualizations for software evolution data including timelines, revision trees, and socio-technical graphs.
Software Defect Prediction Using Local and Global AnalysisEditor IJMTER
The software defect factors are used to measure the quality of the software. The software
effort estimation is used to measure the effort required for the software development process. The defect
factor makes an impact on the software development effort. Software development and cost factors are
also decided with reference to the defect and effort factors. The software defects are predicted with
reference to the module information. Module link information are used in the effort estimation process.
Data mining techniques are used in the software analysis process. Clustering techniques are used
in the property grouping process. Rule mining methods are used to learn rules from clustered data
values. The “WHERE” clustering scheme and “WHICH” rule mining scheme are used in the defect
prediction and effort estimation process. The system uses the module information for the defect
prediction and effort estimation process.
The proposed system is designed to improve the defect prediction and effort estimation process.
The Single Objective Genetic Algorithm (SOGA) is used in the clustering process. The rule learning
operations are carried out sing the Apriori algorithm. The system improves the cluster accuracy levels.
The defect prediction and effort estimation accuracy is also improved by the system. The system is
developed using the Java language and Oracle relation database environment.
Today in era of software industry there is no perfect software framework available for
analysis and software development. Currently there are enormous number of software development
process exists which can be implemented to stabilize the process of developing a software system. But no
perfect system is recognized till yet which can help software developers for opting of best software
development process. This paper present the framework of skillful system combined with Likert scale. With
the help of Likert scale we define a rule based model and delegate some mass score to every process and
develop one tool name as MuxSet which will help the software developers to select an appropriate
development process that may enhance the probability of system success.
Dhanya Jose is a software testing professional with over 7 years of experience in quality assurance and test management. She has worked on projects for clients like Infosys, IBM, Shell, ESI, and Vodafone. She has expertise in test planning, strategy, execution, reporting, and defect management using tools like HP Quality Center, ClearQuest, SOAPUI, and Test Director. Currently she works as a technical test lead at Infosys managing a team of 20 people.
Similar to Improving software development using Erlang/OTP (20)
Ola, ChatGPT... que carreira sería boa para min?Laura M. Castro
Cumprimos case un ano da popularización das intelixencias artificiais xeneradoras en xeral, e ChatGPT en particular.
Nesta presentación exploramos os nesgos poden apresentarse nas respostas producidas por estes sistemas, a fin de visibilizar, divulgar e sensibilizar ao respecto.
Introdución histórica e de alto nivel á evolución da IA, e a popularidade actual das IAs xerativas ou xeradoras de contido, e presentación dun caso de estudo sobre os nesgos de xénero en ChatGPT.
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...Laura M. Castro
As intelixencias artificiais xeneradoras están xa producindo textos que pasan a formar parte do noso mundo. A lingua (escrita, neste caso) é un piar fundamental da cutura, polo que cabe preguntarnos que tipo de "axentes creadores de cultura" son estes sistemas.
Para visibilizar esta cuestión, preséntase un experimento que ten como protagonista ChatGPT e como contexto, as mulleres (novas) en STEM.
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...Laura M. Castro
Cryptpad (https://cryptpad.org) es una alternativa a plataformas privativas de almacenamiento y edición colaborativa en la nube de documentos.
En 2022, en una pequeña asociación cultural gallega (Semente Corunha) decidimos adoptar Cryptpad como herramienta. Lamentablemente, meses después tuvimos que reconocer nuestro fracaso.
Esta charla pretende ilustrar las razones que condujeron al desenlace, desde un punto de vista constructivo, que pueda servir de inspiración y aprendizaje para la comunidad.
We all have heard that functional programming requires a change of mind. But... do we really know what does mean? How does it go beyond learning about pattern-matching, tail recursion, gen_server and supervisors? How does it reflect in the way we approach problems and design solutions? We will address these and other questions, and discuss to which extent our BEAM hammer can turn everything into a lightweight, concurrent nail.
Elixir é unha desas linguaxes que soan moito nos últimos tempos, un dos 'new cool kids on the block'. Nesta charla, vemos unha introdución a Elixir desde a perspectiva de quen está familiarizada/o co mundo Java: teñen algo en común? cales son as diferenzas? Quen sabe... se tes demasiada cafeína no teu sistema, quizais te animes a probar esta nova brebaxe!
So I used Erlang... is my system as scalable as they say it'd be?Laura M. Castro
The document discusses property-based testing of Erlang programs for scalability. It explains that Erlang is well-suited for building scalable systems due to its lightweight process model and support for distribution. The author implemented an echo server in Erlang and tested it using property-based testing with PropEr, generating over a million random test cases. Testing showed the echo server could handle the large number of tests within an hour on a standard laptop. Similar tests were conducted on supervised and distributed versions of the echo server. The testing demonstrated that property-based testing is an effective way to empirically validate the scalability of Erlang applications.
This is a short introduction to one of the newest and noisiest additions to the functional family. Chances are you have heard about Elixir before: created six years ago by José Valim, it has emerged rapidly in the Erlang ecosystem, attracting lots of attention. But what's so special about it? What's all the fuzz about? This talk will offer you a few selected sips for you to get a taste... but beware! You may want to drink all the bottle: if so, you may end up following the white rabbit down the hole and wake up in the Erlang wonderland.
Automatic generation of UML sequence diagrams from test counterexamplesLaura M. Castro
The document summarizes a presentation given at the ACM SIGPLAN Erlang Workshop in 2016 about automatically generating UML sequence diagrams from QuickCheck test counterexamples in Erlang. It discusses the challenges of interpreting counterexamples to find bugs, presents an example of a failing phone exchange test case, and shows how the counterexample could be shrunk and represented as a UML sequence diagram. Future work ideas are also proposed, like handling components and state diagrams.
Making property-based testing easier to read for humansLaura M. Castro
Agile practices have taught us that both stakeholder involvement and early testing are key to quality software. However, it is usually the case that tools for good communication are not that good for testing, and vice-versa.
In this talk, readSpec (one of the results of the PF7 EU PROWESS project) is presented, a tool that attempts to fill in this gap.
Erlang as a supporting technology for teaching Software ArchitectureLaura M. Castro
At university, it is usually the case that students are introduced to programming languages to the extent in which they serve a teaching purpose usually related to acquiring some paradigm-bounded programming skills. Thus, they (we) learn to code our first source lines using PASCAL, are introduced to C programming to handle memory and threads, enter the Java world hand-in-hand with UML and object-orientation. However, Erlang is seldom the choice for learning about the declarative paradigm, for which ML or Haskell are often preferred candidates.
Two years ago, the University of A Coruña (UDC) stepped out of this box and decided to use Erlang as supporting technology for teaching Software Architecture. In this subject, we go beyond programming and, in helping students build up a more abstract, system-wide design competence, we make them face the strengths and weaknesses of different architectures (client-server, multi-layered, repository, pipe & filter, master-slave, peer-to-peer) in terms of non-functional requirements (availability, flexibility, performance, security). In this setting, Erlang has worked as an excellent tool in order to quickly prototype and compare systems of different architectural nature, as we will illustrate in more detail during this talk.
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...Laura M. Castro
Property-based testing is an already known testing methodology for the Erlang community, with tools such as QuickCheck and PropEr being highly popular among Erlang developers in the last few years. However, they are commonly used for functional testing... Which are the challenges in using them for testing non-functional properties of software? What other tools or libraries are there to help Erlang developers?
Experiencias Industriales con Programación DeclarativaLaura M. Castro
Building software imposes a set of general challenges, which are complemented by those specific to the business context. The use of declarative programming as key implementation technology provides several advantages in both areas, a fact that has not gone unnoticed by companies of all sizes and domains.
In particular, the functional programming language Erlang is getting big momentum in the last years thanks to its built-in capabilities for high availability, robustness, maintainability.
This presentation shows some practical examples and discusses the role that the implementation technology (Erlang) played in their successful outcome.
Functional programming goes to Hollywood... and around the world!Laura M. Castro
In a moment in which clearly declarative languages and functional programming use are on the increase in industry, this is a recap of the most recent success stories of the MADS (Models and Applications of Distributed Systems) research group, at the Department of Computer Science (University of A Coruña, Spain) in this area.
Failover and takeover contingency mechanisms for network partition and node f...Laura M. Castro
This document summarizes a presentation given at the 2012 Erlang Workshop on failover and takeover contingency mechanisms for network partitions and node failures. The presentation discusses the ADVERTISE distributed system for advertisement transmission, which experienced issues with frequent node failures and network partitions when initially deployed on virtual machines. To address this, the system was redesigned to require a minimum of 3 nodes and implement checks to detect node failures and partitions in order to avoid inconsistencies. The new design has been running successfully with no reported incidents for the past 4 months.
The document discusses LaTeX and provides an introduction and overview. It explains that LaTeX is a document preparation system for producing high-quality documents. It describes the basic structure of LaTeX documents, including the preamble and body, and covers creating documents, formatting text, and editing elements like fonts, lists, tables, and figures. The document is intended as an introduction or primer on LaTeX and how it can be used to create different types of documents.
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyScyllaDB
Freshworks creates AI-boosted business software that helps employees work more efficiently and effectively. Managing data across multiple RDBMS and NoSQL databases was already a challenge at their current scale. To prepare for 10X growth, they knew it was time to rethink their database strategy. Learn how they architected a solution that would simplify scaling while keeping costs under control.
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/temporal-event-neural-networks-a-more-efficient-alternative-to-the-transformer-a-presentation-from-brainchip/
Chris Jones, Director of Product Management at BrainChip , presents the “Temporal Event Neural Networks: A More Efficient Alternative to the Transformer” tutorial at the May 2024 Embedded Vision Summit.
The expansion of AI services necessitates enhanced computational capabilities on edge devices. Temporal Event Neural Networks (TENNs), developed by BrainChip, represent a novel and highly efficient state-space network. TENNs demonstrate exceptional proficiency in handling multi-dimensional streaming data, facilitating advancements in object detection, action recognition, speech enhancement and language model/sequence generation. Through the utilization of polynomial-based continuous convolutions, TENNs streamline models, expedite training processes and significantly diminish memory requirements, achieving notable reductions of up to 50x in parameters and 5,000x in energy consumption compared to prevailing methodologies like transformers.
Integration with BrainChip’s Akida neuromorphic hardware IP further enhances TENNs’ capabilities, enabling the realization of highly capable, portable and passively cooled edge devices. This presentation delves into the technical innovations underlying TENNs, presents real-world benchmarks, and elucidates how this cutting-edge approach is positioned to revolutionize edge AI across diverse applications.
Discover top-tier mobile app development services, offering innovative solutions for iOS and Android. Enhance your business with custom, user-friendly mobile applications.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
What is an RPA CoE? Session 1 – CoE VisionDianaGray10
In the first session, we will review the organization's vision and how this has an impact on the COE Structure.
Topics covered:
• The role of a steering committee
• How do the organization’s priorities determine CoE Structure?
Speaker:
Chris Bolin, Senior Intelligent Automation Architect Anika Systems
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...Jason Yip
The typical problem in product engineering is not bad strategy, so much as “no strategy”. This leads to confusion, lack of motivation, and incoherent action. The next time you look for a strategy and find an empty space, instead of waiting for it to be filled, I will show you how to fill it in yourself. If you’re wrong, it forces a correction. If you’re right, it helps create focus. I’ll share how I’ve approached this in the past, both what works and lessons for what didn’t work so well.
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...Alex Pruden
Folding is a recent technique for building efficient recursive SNARKs. Several elegant folding protocols have been proposed, such as Nova, Supernova, Hypernova, Protostar, and others. However, all of them rely on an additively homomorphic commitment scheme based on discrete log, and are therefore not post-quantum secure. In this work we present LatticeFold, the first lattice-based folding protocol based on the Module SIS problem. This folding protocol naturally leads to an efficient recursive lattice-based SNARK and an efficient PCD scheme. LatticeFold supports folding low-degree relations, such as R1CS, as well as high-degree relations, such as CCS. The key challenge is to construct a secure folding protocol that works with the Ajtai commitment scheme. The difficulty, is ensuring that extracted witnesses are low norm through many rounds of folding. We present a novel technique using the sumcheck protocol to ensure that extracted witnesses are always low norm no matter how many rounds of folding are used. Our evaluation of the final proof system suggests that it is as performant as Hypernova, while providing post-quantum security.
Paper Link: https://eprint.iacr.org/2024/257
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
How information systems are built or acquired puts information, which is what they should be about, in a secondary place. Our language adapted accordingly, and we no longer talk about information systems but applications. Applications evolved in a way to break data into diverse fragments, tightly coupled with applications and expensive to integrate. The result is technical debt, which is re-paid by taking even bigger "loans", resulting in an ever-increasing technical debt. Software engineering and procurement practices work in sync with market forces to maintain this trend. This talk demonstrates how natural this situation is. The question is: can something be done to reverse the trend?
Dandelion Hashtable: beyond billion requests per second on a commodity serverAntonios Katsarakis
This slide deck presents DLHT, a concurrent in-memory hashtable. Despite efforts to optimize hashtables, that go as far as sacrificing core functionality, state-of-the-art designs still incur multiple memory accesses per request and block request processing in three cases. First, most hashtables block while waiting for data to be retrieved from memory. Second, open-addressing designs, which represent the current state-of-the-art, either cannot free index slots on deletes or must block all requests to do so. Third, index resizes block every request until all objects are copied to the new index. Defying folklore wisdom, DLHT forgoes open-addressing and adopts a fully-featured and memory-aware closed-addressing design based on bounded cache-line-chaining. This design offers lock-free index operations and deletes that free slots instantly, (2) completes most requests with a single memory access, (3) utilizes software prefetching to hide memory latencies, and (4) employs a novel non-blocking and parallel resizing. In a commodity server and a memory-resident workload, DLHT surpasses 1.6B requests per second and provides 3.5x (12x) the throughput of the state-of-the-art closed-addressing (open-addressing) resizable hashtable on Gets (Deletes).
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
1. Introduction
Case study
Methodology
Conclusions
Improving software development using
Erlang/OTP
a case study
Laura M. Castro Souto
MADS Group Universidade da Coruña
June 10th, 2010
Laura M. Castro Improving sw. development with Erlang/OTP 1 of 46
2. Introduction
Case study
Methodology
Conclusions
Outline
1 Introduction
2 Case study
3 Functional software development methodology
From requirements to analysis and design
Implementation of a paradigm shift
Ensuring functionality and quality through testing
4 Conclusions
Laura M. Castro Improving sw. development with Erlang/OTP 2 of 46
3. Introduction
Case study
Methodology
Conclusions
1 Introduction
2 Case study
3 Functional software development methodology
From requirements to analysis and design
Implementation of a paradigm shift
Ensuring functionality and quality through testing
4 Conclusions
Laura M. Castro Improving sw. development with Erlang/OTP 3 of 46
4. Introduction
Case study
Methodology
Conclusions
The questions
How can we build better software. . .
when the domain is extremely complex?
when a lot of expert knowledge is required?
when we want robust, distributed, fault-tolerant systems?
when we look for versatile, exible, adaptable applications?
Laura M. Castro Improving sw. development with Erlang/OTP 4 of 46
5. Introduction
Case study
Methodology
Conclusions
The questions
How can we build better software. . .
when the domain is extremely complex?
when a lot of expert knowledge is required?
when we want robust, distributed, fault-tolerant systems?
when we look for versatile, exible, adaptable applications?
. . . using functional technology?
Laura M. Castro Improving sw. development with Erlang/OTP 4 of 46
6. Introduction
Case study
Methodology
Conclusions
Our answer
A declarative paradigm-based software development methodology
can achieve signicant improvement by means of quality
assurance methods
A declarative approximation is:
more suitable to address and solve real-world problems
compatible with traditional analysis and design techniques
powerful to improve product quality
Laura M. Castro Improving sw. development with Erlang/OTP 5 of 46
7. Introduction
Case study
Methodology
Conclusions
1 Introduction
2 Case study
3 Functional software development methodology
From requirements to analysis and design
Implementation of a paradigm shift
Ensuring functionality and quality through testing
4 Conclusions
Laura M. Castro Improving sw. development with Erlang/OTP 6 of 46
8. Introduction
Case study
Methodology
Conclusions
Case study
Advanced Risk Management Information System:
Tracking Insurances, Claims, and Exposures
A complex management application for a prominent eld
At the time (2002), no alternatives from clients' perspective
Today, still no comparable product in the market
Specic and risky, client company did not have a R D
Agreement with research group at local University
Laura M. Castro Improving sw. development with Erlang/OTP 7 of 46
9. Introduction
Case study
Methodology
Conclusions
Project requirements
Modelling and management of organisation resources
Modelling and management of potential risks
Modelling and management of contracted insurance policies
Including modelling and management of policy clauses
Management of claims for accidents
Selection of the most suitable warranty
(help decision support system)
Laura M. Castro Improving sw. development with Erlang/OTP 8 of 46
10. Introduction
Case study
Methodology
Conclusions
Project information
Client-server architecture
Multiplatform lightweight Java client
Server completely developed using Erlang/OTP
Started in 2002, rst on-site deployment in 2005
Under maintenance since 2008
Development took around 200 person-months
Up to ve developers (three of them full-time)
Maintenance nowadays takes around 500 person-hours/year
Total code size (server + client) ∼ (83000 + 66000) LOC
Laura M. Castro Improving sw. development with Erlang/OTP 9 of 46
11. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
1 Introduction
2 Case study
3 Functional software development methodology
From requirements to analysis and design
Implementation of a paradigm shift
Ensuring functionality and quality through testing
4 Conclusions
Laura M. Castro Improving sw. development with Erlang/OTP 10 of 46
12. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
From requirements to analysis and design
Requirements elicitation:
Risk situations have a number of specic properties, which may
vary with time.
Implication of experts is essential
Structured and unstructured interviews provide good results
Multidisciplinary teams are more productive
Laura M. Castro Improving sw. development with Erlang/OTP 11 of 46
13. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
From requirements to analysis and design
O.O. analysis and standard UML favour communication
Design patterns help to avoid known pitfalls
REAL DATA
Laura M. Castro Improving sw. development with Erlang/OTP 12 of 46
14. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
From requirements to analysis and design
O.O. analysis and standard UML favour communication
Design patterns help to avoid known pitfalls
Model formalisation as declarative statements
Provides early validation
Close to functional implementation, re-usable for testing
Valuable for traceability
Laura M. Castro Improving sw. development with Erlang/OTP 12 of 46
15. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Implementation of a paradigm shift
Functionality implementation:
Determination of policy relevance in the event of an accident.
1 No conict between object-oriented analysis and design,
and implementation approach
2 High-level algorithm description eases the implementation
task, improving eciency
Laura M. Castro Improving sw. development with Erlang/OTP 13 of 46
16. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Object orientation vs. declarative paradigm
The object-oriented perspective:
is closer to the way we perceive real entities
does not perform well when describing behavioural details
grants stability of actors and interfaces
The declarative perspective:
is closer to the way we specify tasks and activities
does not work comfortably at the big scale of things
provides expressive ways of implementing algorithms
Laura M. Castro Improving sw. development with Erlang/OTP 14 of 46
17. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Objects in Erlang/OTP
Objects as data structures
Objects as processes
Laura M. Castro Improving sw. development with Erlang/OTP 15 of 46
18. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Objects in Erlang/OTP
simple
Objects as data structures
immutable
coarse grain concurrency
Objects as processes low resource usage
Laura M. Castro Improving sw. development with Erlang/OTP 15 of 46
19. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Objects in Erlang/OTP
secure encapsulation
Objects as data structures
`mutable'
ne grain concurrency
Objects as processes more resource consuming
Laura M. Castro Improving sw. development with Erlang/OTP 15 of 46
20. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Objects in Erlang/OTP
Objects as data structures for short life, coarse concurrency
business objects (risk objects, risk groups, risks, policies,
accidents,. . . ), data types, etc.
Objects as processes for long life, ne-grain concurrency
data storage connection pool, user session manager, task
server, le logger, conguration server, etc.
Both are conveniently used in our study case ARMISTICE.
Laura M. Castro Improving sw. development with Erlang/OTP 15 of 46
21. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Implementation of real-world behaviour
Determination of policy relevance in the event of an accident.
In Erlang syntax:
Restriction = {hazard, Hazard}
| {formula, {Name, Value}}
| {string, Nuance}
| {all, [Restriction]}
| {any, [Restriction]} | ...
Laura M. Castro Improving sw. development with Erlang/OTP 16 of 46
22. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Implementation of real-world behaviour
relevant_policy(Hazard, PolicyClauses) -
[ Clause || Clause - PolicyClauses,
relevant(Hazard, Clause) =/= false ].
relevant(H, {hazard, H}) - true;
relevant(H, {hazard, NH}) - false;
relevant(H, {string, Nuance}) - Nuance;
relevant(H, {all, Clauses}) -
lists:foldl(fun(A, B) - and(A, B) end, true,
[ relevant(H, C) || C - Clauses ]);
relevant(H, {any, Clauses}) -
lists:foldl(fun(A, B) - or(A, B) end, false,
[ relevant(H, C) || C - Clauses ]);
...
Laura M. Castro Improving sw. development with Erlang/OTP 17 of 46
23. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Ensuring functionality and quality through testing
Testing
There is a problem with ARMISTICE. . .
Three types of testing scenarios (in theory):
1 Conformance of components to specication ( unit testing)
2 Appropriate interaction of components ( integration testing)
3 System behaviour in accordance with requirements ( validation)
Laura M. Castro Improving sw. development with Erlang/OTP 18 of 46
24. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Ensuring functionality and quality through testing
Testing
There is a problem with ARMISTICE. . .
Three types of testing scenarios (in the real world):
1 By-hand developer ad-hoc tests on own code
2 By-hand developer functionality testing
3 On-site user validation
Laura M. Castro Improving sw. development with Erlang/OTP 18 of 46
25. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Unit testing
Does the decimal custom data type conform to its specication?
Sometimes a custom implementation of a data type is in place
(i.e., ARMISTICE currency data type)
Requirement : support for multiple currencies, exchange rates
Requirement : 16 decimal digits precision
Technical requirement : uniform marshalling/unmarshalling
Laura M. Castro Improving sw. development with Erlang/OTP 19 of 46
26. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
new Initial strategy:
single-value tuple-value
Use an automatic testing tool
generate random decimal
integer-part decimal-part
to
int float string int string nat string
values: QuickCheck
decimal() -
?LET(Tuple, {int(), nat()}, decimal:new(Tuple)).
Laura M. Castro Improving sw. development with Erlang/OTP 20 of 46
27. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
prop_sum_comm() -
?FORALL({D1, D2}, {decimal(), decimal()},
decimal:sum(D1, D2) == decimal:sum(D2, D1)).
Thousands of randomly generated test cases will pass for this
kind of properties
Laura M. Castro Improving sw. development with Erlang/OTP 21 of 46
28. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
prop_sum_comm() -
?FORALL({D1, D2}, {decimal(), decimal()},
decimal:sum(D1, D2) == decimal:sum(D2, D1)).
Thousands of randomly generated test cases will pass for this
kind of properties but. . .
which other properties do we add?
when do we have suciently many of them?
Laura M. Castro Improving sw. development with Erlang/OTP 21 of 46
29. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Dene a model for the data type:
[sum(di , dj )] ≡ [di ] + [dj ]
[subs (di , dj )] ≡ [di ] − [dj ]
[mult (di , dj )] ≡ [di ] ∗ [dj ]
[divs (di , dj )] ≡ [di ] / [dj ]
...
decimal_model(Decimal) - decimal:get_value(Decimal).
Erlang/C oating point implementation (IEEE 754-1985 standard)
Laura M. Castro Improving sw. development with Erlang/OTP 22 of 46
30. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
prop_sum() -
?FORALL({D1, D2}, {decimal(), decimal()},
decimal_model(decimal:sum(D1, D2)) ==
decimal_model(D1) + decimal_model(D2)).
Laura M. Castro Improving sw. development with Erlang/OTP 23 of 46
31. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
prop_sum() -
?FORALL({D1, D2}, {decimal(), decimal()},
decimal_model(decimal:sum(D1, D2)) ==
decimal_model(D1) + decimal_model(D2)).
Problem: errors show internal representation
eqc:quickcheck(decimal_eqc:prop_sum()).
....Failed! After 5 tests.
{{decimal,1000000000000000}, {decimal,11000000000000000}}
false
Laura M. Castro Improving sw. development with Erlang/OTP 23 of 46
32. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Use symbolic data structures in test generation:
decimal() -
?LET(Tuple, {int(),nat()}, {call,decimal,new,[Tuple]}).
prop_sum() -
?FORALL({SD1, SD2}, {decimal(), decimal()},
begin
D1 = eval(SD1),
D2 = eval(SD2),
decimal_model(decimal:sum(D1, D2)) ==
decimal_model(D1) + decimal_model(D2)
end).
Laura M. Castro Improving sw. development with Erlang/OTP 24 of 46
33. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Errors reported with symbolic values are easier to understand:
eqc:quickcheck(decimal_eqc:prop_sum()).
........Failed! After 9 tests.
{{call,decimal,new,[2,1]}, {call,decimal,new,[2,2]}}
Shrinking..(2 times)
{{call,decimal,new,[0,1]}, {call,decimal,new,[0,2]}}
false
0. 1 + 0. 2 = 0. 3 ?
Indeed, due to unavoidable IEEE 754-1985 rounding problem.
Laura M. Castro Improving sw. development with Erlang/OTP 25 of 46
34. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Adjust the model:
|a| − |b | abs
x −y
a≈b⇔ rel , x = max(|a|, |b |), y = min(|a|, |b |)
x
abs = 10−16 , rel = 10−10
prop_sum() -
?FORALL({SD1, SD2}, {decimal(), decimal()},
begin
D1 = eval(SD1),
D2 = eval(SD2),
equivalent(decimal_model(decimal:sum(D1, D2)),
decimal_model(D1) + decimal_model(D2))
end).
Laura M. Castro Improving sw. development with Erlang/OTP 26 of 46
35. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Beware we may feel satised with this unit testing but:
It is not exhaustive
We have not tested all possibilities for decimal:new/1
It is not complete decimal
...
We have not tested operations
new sum mult
combination
single-value tuple-value
integer-part decimal-part
int float string int string nat string
Laura M. Castro Improving sw. development with Erlang/OTP 27 of 46
36. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Introduce recursive generators including `generator' operations:
decimal() -
?SIZED(Size, decimal(Size)).
decimal(0) -
{call,decimal,new,[oneof([int(), real(), dec_string(),
{oneof([int(), list(digit())]),
oneof([nat(), list(digit())])}
])]};
decimal(Size) -
Smaller = decimal(Size div 2),
oneof([decimal(0),
{call, decimal, sum, [Smaller,Smaller]},
{call, decimal, mult,[Smaller,Smaller]}, ...]).
Laura M. Castro Improving sw. development with Erlang/OTP 28 of 46
37. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Shrinking customisation can improve counterexample quality:
decimal(Size) -
Smaller = decimal(Size div 2),
oneof([decimal(0),
?LETSHRINK([D1, D2], [Smaller, Smaller],
{call, decimal, sum, [D1, D2]}),
?LETSHRINK([D1, D2], [Smaller, Smaller],
{call, decimal, mult, [D1, D2]}), ...]).
Laura M. Castro Improving sw. development with Erlang/OTP 29 of 46
38. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Error scenarios ( negative testing) must be checked at properties:
prop_divs() -
?FORALL({SD1, SD2}, {decimal(), decimal()},
begin
D1 = eval(SD1),
D2 = eval(SD2),
case equivalent(decimal_model(D2), 0.0) of
true -
{’EXIT’,_} = catch (decimal_model(D1)/
decimal_model(D2)),
{error, _} = decimal:divs(D1, D2);
false -
equivalent(decimal_model(decimal:divs(D1, D2)),
decimal_model(D1)/decimal_model(D2))
end
end).
Laura M. Castro Improving sw. development with Erlang/OTP 30 of 46
39. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Generator must be well-dened, with additional base case test:
defined(E) -
case catch eval(E) of
{’EXIT’, _} - false
_Value - true;
end.
well_defined(G) -
?SUCHTHAT(E, G, defined(E)).
decimal() -
?SIZED(Size, well_defined(decimal(Size))).
prop_new() -
?FORALL(SD,decimal(0),is_float(decimal_model(eval(SD)))).
Laura M. Castro Improving sw. development with Erlang/OTP 31 of 46
40. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Unit testing of data types using properties
Methodology to guarantee full testing:
1 Denition of a suitable model for the data type
2 Generation of well-dened, symbolic values
including all productive operations
3 Denition of one property for each operation
considering expected failing cases
4 Fine-tuning of shrinking preferences
Laura M. Castro Improving sw. development with Erlang/OTP 32 of 46
41. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
State machine-based integration testing
Integration testing
Do the appropriate components interact as expected when
creating a new risk group?
Software is usually structured in dierent components
Must be tested on their own to ensure they perform correctly,
in combination to ensure they interact properly
Components treated as working black boxes
Laura M. Castro Improving sw. development with Erlang/OTP 33 of 46
42. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
Load information about the system:
user sessions, risk groups identiers,
risk objects identiers, etc.
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
43. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
-record(state, {user_sessions,
groups,
objects}).
initial_state()-
#state{user_sessions = [],
groups = [],
objects = []}.
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
44. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
Pick one of possible service
invocations
Use frequency to specify
probabilities
Introduce `anomalies' (i.e., delays)
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
45. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
command(S) -
frequency(
...
[{7,{call, risk_group_facade,
new_risk_group,
[oneof(S#state.user_sessions),
group_name()]}}
|| S#state.user_sessions =/= []],
...
).
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
46. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
Check whether current status allows
invocation of chosen service:
no previous conditions required to
create a new risk group
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
47. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
precondition(S,
{call,risk_group_facade,
new_risk_group,
[SessionID, Name]})-
true;
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
48. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
Service invocation execution may
aect the test state:
a new risk group identier is added
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
49. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
next_state(S, Value,
{call,risk_group_facade,
new_risk_group,
Arguments}) -
S#state{groups =
[ Value | S#state.groups ]};
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
50. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
Check properties the system must
hold after service execution:
no previous conditions required to
create a new risk group
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
51. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
postcondition(S,
{call,risk_group_facade,
new_risk_group,
Arguments}, Result)-
true;
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
52. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
QuickCheck shrinks the failing test
case to the shortest sequence of
commands which invocation leads to
the same error
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
53. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine testing
Proceed to next test case, or
Exit reporting test pass
Laura M. Castro Improving sw. development with Erlang/OTP 34 of 46
54. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine-based integration testing
Integration test success:
Laura M. Castro Improving sw. development with Erlang/OTP 35 of 46
55. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine-based integration testing
Integration test success: verication of expected function calls
( dummy component)
Reduced eort
Collateral eects
avoidance
Early-stage problems
detection
Laura M. Castro Improving sw. development with Erlang/OTP 35 of 46
56. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine-based integration testing
Original source code:
new_risk_group(SessionID, GroupName, GroupDescription)-
{ok, GroupData} =
risk_group_dao:new_skeleton(SessionID),
[{oid,GroupID}, {code,GroupCode},
{name,DefName},{desc,EmptyDescription}] = GroupData,
ok = risk_group_dao:update(SessionID, GroupID,
GroupName,
GroupDescription),
ok = risk_group_dao:unlock(SessionID, GroupID),
{ok, [{oid, GroupID}, {code, GroupCode},
{name, GroupName}, {desc, GroupDescription}]}.
Laura M. Castro Improving sw. development with Erlang/OTP 36 of 46
57. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine-based integration testing
Dummy component source code:
new_risk_group(SessionID, GroupName, GroupDescription)-
GroupData = [{oid,group_id()}, {code,group_code()},
{name,GroupName}, {desc,GroupDescription}],
op_logger:add({risk_group_dao, new_skeleton,
[SessionID], {ok, GroupData}}),
op_logger:add({risk_group_dao, update,
[SessionID, GroupID, GroupCode,
GroupName, GroupDescription], ok}),
op_logger:add({risk_group_dao, unlock,
[SessionID, GroupID], ok}),
{ok, GroupData}.
Laura M. Castro Improving sw. development with Erlang/OTP 36 of 46
58. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine-based integration testing
Testing state machine postcondition and property:
postcondition(S, {call,risk_group_facade,
new_risk_group,Arguments}, Result)-
Operations = op_logger:get({new_risk_group}),
check(new_risk_group, {S,Arguments,Operations,Result});
prop_integration() -
?FORALL(Commands, commands(?MODULE),
begin
{History,S,Result} = run_commands(?MODULE,Commands),
Result == ok
end).
Laura M. Castro Improving sw. development with Erlang/OTP 37 of 46
59. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
QuickCheck state machine-based integration testing
Methodology to fully test component integration:
Internal state stores minimal information for test
generation
Transitions are operations to be tested
Interactions are performed against dummy objects
Preconditions are true, postconditions check correct
sequence of interactions
Laura M. Castro Improving sw. development with Erlang/OTP 38 of 46
60. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Validation
Does the system enforce that there is only one policy renewal
under construction at a time?
Complex, data-intensive software usually handles great
number of business objects with complex relationships
Few basic data consistency constraints are enforced by
storage media (i.e., DBMS)
Too complex, change dynamically, non-trivial calculations,. . .
Laura M. Castro Improving sw. development with Erlang/OTP 39 of 46
61. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Ensure that business rules are respected at all times:
APPLICATION INTERFACE
APPLICATION BUSINESS LOGIC
Sequences of interface calls
could violate them
RDBMS
Unit testing is not enough
Laura M. Castro Improving sw. development with Erlang/OTP 40 of 46
62. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Ensure that business rules are respected at all times:
t
in
po
s APPLICATION INTERFACE
c es
ac
APPLICATION BUSINESS LOGIC
Sequences of interface calls
could violate them
ed
tru
st RDBMS
Unit testing is not enough
Laura M. Castro Improving sw. development with Erlang/OTP 40 of 46
63. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Ensure that business rules are respected at all times:
QUICKCHECK
APPLICATION BUSINESS LOGIC
Sequences of interface calls
could violate them
RDBMS
Unit testing is not enough
Laura M. Castro Improving sw. development with Erlang/OTP 40 of 46
64. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Use QuickCheck state machine model:
initial_state minimum to generate related test cases
commands interface functions to be tested
precondition true
next_state test internal state update
postcondition true
Laura M. Castro Improving sw. development with Erlang/OTP 41 of 46
65. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Business rules compliance check:
specify BR as SQL sentence
dene an invariant function to evaluate BR
business_rule(Connection) -
RenConsCount =
db_interface:process_query(Connection,
SELECT COUNT(*)
FROM renewal
WHERE ren_constr IS TRUE
AND ren_policy IN (SELECT pol_number
FROM policy )
GROUP BY ren_policy ),
([] == [ R || R - RenConsCount, R 1]).
Laura M. Castro Improving sw. development with Erlang/OTP 42 of 46
66. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
invariant() -
{ok, Connection} = db_interface:start_transaction(),
Result = business_rule(Connection),
...
db_interface:rollback_transaction(Connection),
Result.
prop_business_logic() -
?FORALL(Commands, commands(?MODULE),
begin
true = invariant(),
{History,S,Result} = run_commands(?MODULE,Commands),
PostCondition = invariant(),
clean_up(S),
PostCondition and (Result == ok)
end).
Laura M. Castro Improving sw. development with Erlang/OTP 43 of 46
67. Introduction
From requirements to analysis and design
Case study
Implementation of a paradigm shift
Methodology
Ensuring functionality and quality through testing
Conclusions
Data integrity validation via business rules testing
Methodology to test business rules:
Minimal internal state to conduct related operations
Transitions are public interface exported functions
Preconditions and postconditions are true
Business rules (formulated as SQL sentences) are tested as
invariants after test execution
Laura M. Castro Improving sw. development with Erlang/OTP 44 of 46
68. Introduction
Case study
Methodology
Conclusions
1 Introduction
2 Case study
3 Functional software development methodology
From requirements to analysis and design
Implementation of a paradigm shift
Ensuring functionality and quality through testing
4 Conclusions
Laura M. Castro Improving sw. development with Erlang/OTP 45 of 46
69. Introduction
Case study
Methodology
Conclusions
Conclusions
Functional programming represents a serious alternative for
developing real-world software:
A high-level abstraction tool, close to concepts and
requirements
Very expressive and eective way of implementing
complex algorithms
A context disposed to powerful testing techniques
Laura M. Castro Improving sw. development with Erlang/OTP 46 of 46