<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Non classé - In Fine - Le Blog</title>
	<atom:link href="https://blog.infine.com/category/non-classe/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.infine.com</link>
	<description>Le blog des technos de demain !</description>
	<lastBuildDate>Fri, 19 Nov 2021 09:21:33 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://blog.infine.com/wp-content/uploads/2021/03/cropped-vignette-32x32.png</url>
	<title>Non classé - In Fine - Le Blog</title>
	<link>https://blog.infine.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Generics and virtual functions</title>
		<link>https://blog.infine.com/generics-and-virtual-functions-3355?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=generics-and-virtual-functions</link>
					<comments>https://blog.infine.com/generics-and-virtual-functions-3355#respond</comments>
		
		<dc:creator><![CDATA[Florent]]></dc:creator>
		<pubDate>Fri, 19 Nov 2021 09:21:32 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=3355</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> Hybridizer supports&#160;generics&#160;and&#160;virtual functions. These concepts allow writing flexible code with type parameters, defering actual behavior resolution to type instanciation by client code. These are fondamental features of modern languages, easing encapsulation, code factorization and concepts expression. However in C#, type parameters are resolved at runtime, which comes with a significant performance penalty. Hybridizer maps them &#8230;</p>
<p>The post <a href="https://blog.infine.com/generics-and-virtual-functions-3355">Generics and virtual functions</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span>
<p>Hybridizer supports&nbsp;<a href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/" target="_blank" rel="noopener">generics</a>&nbsp;and&nbsp;<a href="https://msdn.microsoft.com/en-us/library/aa645767(v=vs.71).aspx" target="_blank" rel="noopener">virtual functions</a>. These concepts allow writing flexible code with type parameters, defering actual behavior resolution to type instanciation by client code. These are fondamental features of modern languages, easing encapsulation, code factorization and concepts expression.</p>



<p>However in C#, type parameters are resolved at runtime, which comes with a significant performance penalty. Hybridizer maps them to&nbsp;<a href="http://www.cplusplus.com/doc/oldtutorial/templates/" target="_blank" rel="noopener">C++ templates</a>, which are resolved at compile time. As such, templates allow inlining and interprocedural optimization as in plain C code. Performance penalty is therefore inexisting.</p>



<p>As an example, we will demonstrate usage of generics on a fun mathematical example : the resolution of heat equation with random walks.</p>



<figure class="wp-block-image"><a href="http://hybridizer.io/wp-content/uploads/2017/07/montecarlo_heat_equation_256x256x1000.png" class="fancyboxgroup" rel="gallery-3355"><img decoding="async" src="http://hybridizer.io/wp-content/uploads/2017/07/montecarlo_heat_equation_256x256x1000.png" alt="" class="wp-image-386"/></a></figure>



<div class="center"></div>



<h3 class="wp-block-heading">Mathematic background</h3>



<p>Given a connected bounded 2D domain&nbsp;<span id="MathJax-Element-1-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-1" class="math"><span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mi">Ω</span></span></span></span>&nbsp;in&nbsp;<span id="MathJax-Element-2-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-4" class="math"><span id="MathJax-Span-5" class="mrow"><span id="MathJax-Span-6" class="msubsup"><span id="MathJax-Span-7" class="texatom"><span id="MathJax-Span-8" class="mrow"><span id="MathJax-Span-9" class="mi">ℝ</span></span></span><span id="MathJax-Span-10" class="mn">2</span></span></span></span></span>, its border&nbsp;<span id="MathJax-Element-3-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-11" class="math"><span id="MathJax-Span-12" class="mrow"><span id="MathJax-Span-13" class="mi">∂</span><span id="MathJax-Span-14" class="mi">Ω</span></span></span></span>&nbsp;and a function&nbsp;<span id="MathJax-Element-4-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-15" class="math"><span id="MathJax-Span-16" class="mrow"><span id="MathJax-Span-17" class="mi">𝑓</span><span id="MathJax-Span-18" class="mo">∈:</span><span id="MathJax-Span-19" class="msubsup"><span id="MathJax-Span-20" class="texatom"><span id="MathJax-Span-21" class="mrow"><span id="MathJax-Span-22" class="mtext">L</span></span></span><span id="MathJax-Span-23" class="mn">2</span></span><span id="MathJax-Span-24" class="mo">(</span><span id="MathJax-Span-25" class="mi">∂</span><span id="MathJax-Span-26" class="mi">Ω</span><span id="MathJax-Span-27" class="mo">)</span></span></span></span>, we search&nbsp;<span id="MathJax-Element-5-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-28" class="math"><span id="MathJax-Span-29" class="mrow"><span id="MathJax-Span-30" class="mi">𝑢</span></span></span></span>&nbsp;such as:</p>



<p class="center"><span id="MathJax-Element-6-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-31" class="math"><span id="MathJax-Span-32" class="mrow"><span id="MathJax-Span-33" class="mtable"><span id="MathJax-Span-34" class="mtd"><span id="MathJax-Span-35" class="mrow"><span id="MathJax-Span-36" class="mi">Δ</span><span id="MathJax-Span-37" class="mi">𝑢</span><span id="MathJax-Span-38" class="mo">=</span><span id="MathJax-Span-39" class="mn">0</span></span></span></span></span></span></span> on Ω</p>



<p class="center"><span id="MathJax-Element-6-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-31" class="math"><span id="MathJax-Span-32" class="mrow"><span id="MathJax-Span-33" class="mtable"><span id="MathJax-Span-48" class="mtd"><span id="MathJax-Span-49" class="mrow"><span id="MathJax-Span-50" class="mi">𝑢</span><span id="MathJax-Span-51" class="mo">=</span><span id="MathJax-Span-52" class="mi">𝑓</span></span></span></span></span></span></span> on ∂Ω</p>



<p class="center">Classic ways to numerically solve this problem involve&nbsp;<a rel="noopener" href="https://en.wikipedia.org/wiki/Finite_element_method" target="_blank">finite elements</a>&nbsp;or similar discretization methods which come with different regularity constraits on&nbsp;<span id="MathJax-Element-7-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-62" class="math"><span id="MathJax-Span-63" class="mrow"><span id="MathJax-Span-64" class="mi">∂</span><span id="MathJax-Span-65" class="mi">Ω</span></span></span></span>.</p>



<p>It happens we can solve it using&nbsp;<a href="https://en.wikipedia.org/wiki/Monte_Carlo_method" target="_blank" rel="noopener">montecarlo methods</a>&nbsp;by launching brownian motions. For each point&nbsp;<span id="MathJax-Element-8-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-66" class="math"><span id="MathJax-Span-67" class="mrow"><span id="MathJax-Span-68" class="mo">(</span><span id="MathJax-Span-69" class="mi">𝑥</span><span id="MathJax-Span-70" class="mo">,</span><span id="MathJax-Span-71" class="mi">𝑦</span><span id="MathJax-Span-72" class="mo">)</span></span></span></span>&nbsp;in&nbsp;<span id="MathJax-Element-9-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-73" class="math"><span id="MathJax-Span-74" class="mrow"><span id="MathJax-Span-75" class="mi">Ω</span></span></span></span>&nbsp;we launch&nbsp;<span id="MathJax-Element-10-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-76" class="math"><span id="MathJax-Span-77" class="mrow"><span id="MathJax-Span-78" class="mi">𝑁</span></span></span></span>&nbsp;random walks. For each random walk, we wait until it reaches&nbsp;<span id="MathJax-Element-11-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-79" class="math"><span id="MathJax-Span-80" class="mrow"><span id="MathJax-Span-81" class="mi">∂</span><span id="MathJax-Span-82" class="mi">Ω</span></span></span></span>&nbsp;and sample the temperature at exit point. We then sum all those exit temperatures and divide by&nbsp;<span id="MathJax-Element-12-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-83" class="math"><span id="MathJax-Span-84" class="mrow"><span id="MathJax-Span-85" class="mi">𝑁</span></span></span></span>&nbsp;to get the numerical solution :</p>



<figure class="wp-block-image"><a href="http://hybridizer.io/wp-content/uploads/2017/07/random_walk_square.png" class="fancyboxgroup" rel="gallery-3355"><img decoding="async" src="http://hybridizer.io/wp-content/uploads/2017/07/random_walk_square.png" alt="" class="wp-image-394"/></a></figure>



<div class="center"></div>



<p>This method is quite slow (compared to finite elements or similar). But it has some advantages:</p>



<ul><li>It can easily be distributed among many threads (all points are independants)</li><li>It’s possible to compute the solution at a specific location</li><li><span id="MathJax-Element-13-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-86" class="math"><span id="MathJax-Span-87" class="mrow"><span id="MathJax-Span-88" class="mi">Ω</span></span></span></span>&nbsp;has almost no regularity constraint (external cone)</li><li>Absolutely no memory footprint (except for the solution)</li><li>It works similarly in higher dimensions</li></ul>



<p>Full explanations can be found on&nbsp;<a href="http://www.altimesh.com/wp-content/uploads/2017/07/brownien.pdf" target="_blank" rel="noopener">this old research report</a>&nbsp;(in french).</p>



<h3 class="wp-block-heading">Code</h3>



<p>We structured our code as would be a generic mathematical solver. The main class is&nbsp;<code>MonteCarloHeatSolver</code>, which takes a&nbsp;<code>I2DProblem</code>&nbsp;to solve it.<br>This code is generic and solves a problem described by an interface:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
 public class MonteCarloHeatSolver
 {
  I2DProblem _problem;
  
 public MonteCarloHeatSolver(I2DProblem problem)
 {
  _problem = problem;
 }
  
 &#x5B;EntryPoint]
 public void Solve()
 {
 int stopX = _problem.MaxX();
 int stopY = _problem.MaxY();
 for (int j = 1 + threadIdx.y + blockIdx.y * blockDim.y; j &lt; stopY; j += blockDim.y * gridDim.y) {
 for (int i = 1 + threadIdx.x + blockIdx.x * blockDim.x; i &lt; stopX; i += blockDim.x * gridDim.x) {
  float2 position;
  position.x = i;
  position.y = j;
  _problem.Solve(position);
 }
 }
 }
 } 
</pre></div>


<p><br>where actual resolution (geometry related) is deferred to a&nbsp;<code>I2DProblem</code>. The call to&nbsp;<code>Solve</code>&nbsp;(virtual) won’t be matched to templates. But the Hybridizer will handle this and dispatch this call correctly at runtime. This will cost a vtable lookup, but only once per thread. Performance critical code is in the random walk and the boundary conditions, which are generic parameters of the 2D problem.</p>



<p>An example of C# code instanciation can be:</p>



<pre class="wp-block-code"><code class=""> var problem = new SquareProblem&lt;SimpleWalker, SimpleBoundaryCondition&gt;(N, iterCount);
 var solver = new MonteCarloHeatSolver(problem);
 solver.Solve(); </code></pre>





<p>We then have two interfaces describing random walks and boundary conditions :</p>



<pre class="wp-block-code"><code class=""> [HybridTemplateConcept]
 public interface IRandomWalker
 {
 [Kernel]
 void Init();
 [Kernel]
 void Walk(float2 f, out float2 t);
 }
 [HybridTemplateConcept]
 public interface IBoundaryCondition
 {
 [Kernel]
 float Temperature(float x, float y);
 } </code></pre>



<p><br>These interfaces are decorated with&nbsp;<code>[HybridTemplateConcept]</code>&nbsp;which tells the Hybridizer that these types will be used as type parameters. They can be extended by actual classes such as:</p>



<pre class="wp-block-code"><code class=""> public struct SimpleBoundaryCondition : IBoundaryCondition
 {
 [Kernel]
 public float Temperature(float x, float y)
 {
 if ((x &gt;= 1.0F &amp;&amp; y &gt;= 0.5F) || (x &lt;= 0.0F &amp;&amp; y &lt;= 0.5F))
 return 1.0F;
 return 0.0F;
 }
 } </code></pre>



<p>Generic types using these interfaces have to tell the hybridizer how they want it to generate template code from generics. This is again done by using attributes:</p>



<p>For example:</p>



<pre class="wp-block-code"><code class=""> [HybridRegisterTemplate(Specialize = typeof(SquareProblem&lt;SimpleWalker, SimpleBoundaryCondition&gt;))]
 public class SquareProblem&lt;TRandomWalker, TBoundaryCondition&gt;: I2DProblem 
  where TRandomWalker : struct, IRandomWalker 
  where TBoundaryCondition: struct, IBoundaryCondition
 {
  // other interface methods implementations
  // ...
 &nbsp;
 [Kernel]
 public void Solve(float2 position)
 {
  TRandomWalker walker = default(TRandomWalker);
  TBoundaryCondition boundaryCondition = default(TBoundaryCondition);
  walker.Init(); // generic parameter method call -- will be inlined
 float temperature = 0.0F;
 float size = (float)_N;
 for (int iter = 0; iter &lt; _iter; ++iter)
 {
  float2 f = position;
 &nbsp;
 while (true)
 {
  float2 t;
  walker.Walk(f, out t); // generic parameter method call -- will be inlined
 &nbsp;
  // when on border, break
 if(t.x &lt;= 0.0F || t.y &gt;= size || t.x &gt;= size || t.y &lt;= 0.0F)
 {
  // generic parameter method call -- will be inlined
  temperature += boundaryCondition.Temperature((float)t.x * _h, (float)t.y * _h);
 break;
 }
 &nbsp;
  // otherwise continue walk
  f = t;
 }
 }
 &nbsp;
  _inner[((int)(position.y - 1)) * (_N - 1) + (int)(position.x - 1)] = temperature * _invIter;
 }
 &nbsp;
 } </code></pre>





<pre class="wp-block-code"><code class=""> [HybridRegisterTemplate(Specialize = typeof(TetrisProblem&lt;SimpleWalker, TetrisBoundaryCondition&gt;))]
 public class TetrisProblem&lt;TRandomWalker, TBoundaryCondition&gt; : I2DProblem
  where TRandomWalker : struct, IRandomWalker
  where TBoundaryCondition : struct, IBoundaryCondition
 {
  // actual interface implementation
 } </code></pre>



<p></p>



<h3 class="wp-block-heading">Results</h3>



<p></p>



<h4 class="wp-block-heading">Dispatchant calls</h4>



<p>Virtual functions trigger a&nbsp;<code>callvirt</code>&nbsp;in the MSIL.</p>



<pre class="wp-block-code"><code class="">IL_005e: callvirt instance void MonteCarloHeatEquation.I2DProblem::Solve</code></pre>



<p><br>Profiling the generated code with nvvp shows us that a vtable is generated by the Hybridizer (ensuring the right method is called):</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="http://www.altimesh.com/wp-content/uploads/2017/07/dispatchant_call.png" class="fancyboxgroup" rel="gallery-3355"><img decoding="async" src="http://hybridizer.io/wp-content/uploads/2017/07/dispatchant_call-1024x325.png" alt="" class="wp-image-405"/></a></figure></div>



<div class="center"></div>



<h4 class="wp-block-heading">Generics and templates</h4>



<p>On the other hand,&nbsp;<code>IRandomWalker</code>&nbsp;and&nbsp;<code>IBoundaryCondition</code>&nbsp;type parameters are mapped to templates. Their methods are therefore inlined, as shown in this nvvp profiling:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="http://hybridizer.io/wp-content/uploads/2017/07/template_call.png" class="fancyboxgroup" rel="gallery-3355"><img decoding="async" src="http://hybridizer.io/wp-content/uploads/2017/07/template_call-1024x374.png" alt="" class="wp-image-406"/></a></figure></div>



<div class="center"></div>



<p><em>By the way: the images above show that your C# code is linked to the sass in the profiler. See our post about&nbsp;<a href="http://www.altimesh.com/debugging-and-profiling/" target="_blank" rel="noopener">debugging and profiling</a></em></p>



<h3 class="wp-block-heading">Conclusion</h3>



<p>With few restrictions, you can safely use generics type parameters and dispatchant calls in your C# code. Hybridizer will map that to the correct concept (vtable or template) as your required for.<br>Dispatchant calls give you full flexibility of an inheritance hierarchy, but come at a performance cost. On the other hand, generics deliver full performance (inlined calls), as long as the right metadata has been provided.</p><p>The post <a href="https://blog.infine.com/generics-and-virtual-functions-3355">Generics and virtual functions</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/generics-and-virtual-functions-3355/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mandelbrot with Hybridizer</title>
		<link>https://blog.infine.com/mandelbrot-with-hybridizer-3349?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mandelbrot-with-hybridizer</link>
					<comments>https://blog.infine.com/mandelbrot-with-hybridizer-3349#respond</comments>
		
		<dc:creator><![CDATA[Florent]]></dc:creator>
		<pubDate>Thu, 10 Jun 2021 15:55:13 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=3349</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> We describe here the implementation of Mandelbrot fractal image generation using Hybridizer. The language of choice is C#, and implementation is done using 32-bits precision arithmetic. Mandelbrot set is the set of values c for which the sequence: {𝑧0=0 𝑧𝑛+1=𝑧2𝑛+𝑐 remains bounded in the complex plane.It happens an equivalent definition is: limsup𝑧𝑛 ≤2 𝑛→+∞ That &#8230;</p>
<p>The post <a href="https://blog.infine.com/mandelbrot-with-hybridizer-3349">Mandelbrot with Hybridizer</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span>
<figure class="wp-block-image size-large"><a href="https://blog.infine.com/wp-content/uploads/2021/06/Mandelbrot-1.png" class="fancyboxgroup" rel="gallery-3349"><img fetchpriority="high" decoding="async" width="512" height="512" src="https://blog.infine.com/wp-content/uploads/2021/06/Mandelbrot-1.png" alt="" class="wp-image-3351" srcset="https://blog.infine.com/wp-content/uploads/2021/06/Mandelbrot-1.png 512w, https://blog.infine.com/wp-content/uploads/2021/06/Mandelbrot-1-300x300.png 300w, https://blog.infine.com/wp-content/uploads/2021/06/Mandelbrot-1-150x150.png 150w, https://blog.infine.com/wp-content/uploads/2021/06/Mandelbrot-1-60x60.png 60w" sizes="(max-width: 512px) 100vw, 512px" /></a></figure>



<p>We describe here the implementation of Mandelbrot fractal image generation using Hybridizer. The language of choice is C#, and implementation is done using 32-bits precision arithmetic.</p>
<p>Mandelbrot set is the set of values c for which the sequence:</p>
<div align="center"><span id="MathJax-Element-1-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-1" class="math"><span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mrow"><span id="MathJax-Span-4" class="mo">{</span><span id="MathJax-Span-5" class="mtable"><span id="MathJax-Span-6" class="mtd"><span id="MathJax-Span-7" class="mrow"><span id="MathJax-Span-8" class="msubsup"><span id="MathJax-Span-9" class="mi">𝑧</span><span id="MathJax-Span-10" class="mn">0</span></span><span id="MathJax-Span-11" class="mo">=</span><span id="MathJax-Span-12" class="mn">0</span></span></span></span></span></span></span></span></div>
<div align="center"><span id="MathJax-Element-1-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-1" class="math"><span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mrow"><span id="MathJax-Span-5" class="mtable"><span id="MathJax-Span-13" class="mtd"><span id="MathJax-Span-14" class="mrow"><span id="MathJax-Span-15" class="msubsup"><span id="MathJax-Span-16" class="mi">𝑧</span><span id="MathJax-Span-17" class="texatom"><span id="MathJax-Span-18" class="mrow"><span id="MathJax-Span-19" class="mi">𝑛</span><span id="MathJax-Span-20" class="mo">+</span><span id="MathJax-Span-21" class="mn">1</span></span></span></span><span id="MathJax-Span-22" class="mo">=</span><span id="MathJax-Span-23" class="msubsup"><span id="MathJax-Span-24" class="mi">𝑧</span><span id="MathJax-Span-25" class="mn">2</span><span id="MathJax-Span-26" class="mi">𝑛</span></span><span id="MathJax-Span-27" class="mo">+</span><span id="MathJax-Span-28" class="mi">𝑐</span></span></span></span><span id="MathJax-Span-29" class="mo"></span></span></span></span></span></div>
<p>remains bounded in the complex plane.<br>It happens an equivalent definition is:</p>
<div align="center"><span id="MathJax-Span-31" class="mrow"><span id="MathJax-Span-32" class="munderover"><span id="MathJax-Span-33" class="mo">limsup</span></span><span id="MathJax-Span-40" class="msubsup"><span id="MathJax-Span-41" class="mi">𝑧</span><span id="MathJax-Span-42" class="mi">𝑛 </span></span><span id="MathJax-Span-43" class="mo">≤</span><span id="MathJax-Span-44" class="mn">2</span></span></div>
<div align="center"><span id="MathJax-Span-31" class="mrow"><span id="MathJax-Span-32" class="munderover"><span id="MathJax-Span-34" class="texatom"><span id="MathJax-Span-35" class="mrow"><span id="MathJax-Span-36" class="mi">𝑛</span><span id="MathJax-Span-37" class="mo">→</span><span id="MathJax-Span-38" class="mo">+</span><span id="MathJax-Span-39" class="mi">∞</span></span></span></span></span></div>
<p>That means that while calculating&nbsp;<span id="MathJax-Element-3-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-45" class="math"><span id="MathJax-Span-46" class="mrow"><span id="MathJax-Span-47" class="msubsup"><span id="MathJax-Span-48" class="mi">𝑧</span><span id="MathJax-Span-49" class="mi">𝑛</span></span></span></span></span>&nbsp;values exceeds&nbsp;<span id="MathJax-Element-4-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-50" class="math"><span id="MathJax-Span-51" class="mrow"><span id="MathJax-Span-52" class="mn">2</span></span></span></span>&nbsp;at any iteration, the point c is not in the set.</p>
<h1>C# implementation</h1>
<p>In other words, this can be simulated via this code:</p>



<pre class="wp-block-code"><code class=""><strong>public</strong> <strong>static</strong> <strong>int</strong> IterCount(<strong>float</strong> cx, <strong>float</strong> cy)
{
    <strong>int</strong> result = 0;
    <strong>float</strong> x = 0.0f;
    <strong>float</strong> y = 0.0f;
    <strong>float</strong> xx = 0.0f, yy = 0.0f;
    <strong>while</strong> (xx + yy &lt;= 4.0f &amp;&amp; result &lt; maxiter) // are we out of control disk?
    {
        xx = x * x;
        yy = y * y;
        <strong>float</strong> xtmp = xx - yy + cx;
        y = 2.0f * x * y + cy; // computes z^2 + c
        x = xtmp;
        result++;
    }

    <strong>return</strong> result;
}</code></pre>



<p>which has to be run for every point (cx, cy) in the complex plane.<br>To produce an output image, we therefore compute IterCount for every pixel in the square&nbsp;<span id="MathJax-Element-5-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-53" class="math"><span id="MathJax-Span-54" class="mrow"><span id="MathJax-Span-55" class="mo">[</span><span id="MathJax-Span-56" class="mo">−</span><span id="MathJax-Span-57" class="mn">2</span><span id="MathJax-Span-58" class="mo">,</span><span id="MathJax-Span-59" class="mn">2</span><span id="MathJax-Span-60" class="mo">]</span><span id="MathJax-Span-61" class="mo">×</span><span id="MathJax-Span-62" class="mo">[</span><span id="MathJax-Span-63" class="mo">−</span><span id="MathJax-Span-64" class="mn">2</span><span id="MathJax-Span-65" class="mo">,</span><span id="MathJax-Span-66" class="mn">2</span><span id="MathJax-Span-67" class="mo">]</span></span></span></span>, discretized as a&nbsp;<span id="MathJax-Element-6-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-68" class="math"><span id="MathJax-Span-69" class="mrow"><span id="MathJax-Span-70" class="mi">𝑁</span><span id="MathJax-Span-71" class="mo">×</span><span id="MathJax-Span-72" class="mi">𝑁</span></span></span></span>&nbsp;square grid:</p>



<pre class="wp-block-code"><code class=""><strong>public</strong> <strong>static</strong> <strong>void</strong> Run(<strong>int</strong>[] light)
{
    <strong>for</strong> (<strong>int</strong> i = 0; i &lt; N; i += 1)
    {
        <strong>for</strong> (<strong>int</strong> j = 0; j &lt; N; j += 1)
        {
            <strong>float</strong> x = fromX + i * h;
            <strong>float</strong> y = fromY + j * h;
            light[i* N + j] = IterCount(x, y);
        }
    }
}</code></pre>



<p>where N, h, fromX and fromY are application parameters.<br>We here compute a&nbsp;<span id="MathJax-Element-7-Frame" class="MathJax" tabindex="0"><span id="MathJax-Span-73" class="math"><span id="MathJax-Span-74" class="mrow"><span id="MathJax-Span-75" class="mn">2048</span><span id="MathJax-Span-76" class="mo">×</span><span id="MathJax-Span-77" class="mn">2048</span></span></span></span>&nbsp;image using C# on a core i7-4770S @ 3.10GHz.<br>This unoptimized versions runs in 420 milliseconds, yielding</p>
<p>&nbsp;</p>
<div align="center"><strong>9.986</strong>&nbsp;millions pixels / second</div>
<p>Its crystal clear that this code is embarrassingly parallel, since all pixels are independant from each other.</p>
<p>A first trivial optimization would therefore to make the first loop parallel:</p>



<pre class="wp-block-code"><code class=""><strong>public</strong> <strong>static</strong> <strong>void</strong> Run(<strong>int</strong>[] light)
{
    Parallel.For(0, N, (i) =&gt; {
        <strong>for</strong> (<strong>int</strong> j = 0; j &lt; N; j += 1)
        {
            <strong>float</strong> x = fromX + i * h;
            <strong>float</strong> y = fromY + j * h;
            light[i * N + j] = IterCount(x, y);
        }
    });
}</code></pre>



<p>This second version runs in 67 milliseconds, giving:</p>
<div align="center"><strong>62.6</strong>&nbsp;millions pixels / second</div>
<h1>Run on the GPU</h1>
<p>In order to run that on a GPU, we just need to decorate the Run method with EntryPointAttribute:</p>



<pre class="wp-block-code"><code class="">[EntryPoint("run")]
<strong>public</strong> <strong>static</strong> <strong>void</strong> Run(<strong>int</strong>[] light)
{
    Parallel.For(0, N, (i) =&gt; {
        <strong>for</strong> (<strong>int</strong> j = 0; j &lt; N; j += 1)
        {
            <strong>float</strong> x = fromX + i * h;
            <strong>float</strong> y = fromY + j * h;
            light[i * N + j] = IterCount(x, y);
        }
    });
}</code></pre>



<p>and some boilerplate code to invoke the generated method:</p>
<div class="EnlighterJSWrapper enlighterEnlighterJSWrapper">&nbsp;</div>



<pre class="wp-block-code"><code class="">HybRunner runner = HybRunner.Cuda("Mandelbrot_CUDA.dll").SetDistrib(N, 128);
wrapper = runner.Wrap(<strong>new</strong> Program());
wrapper.Run(light_cuda);</code></pre>



<p>This modified code runs on the GPU (a 1080 Ti) in 10.6 milliseconds (32 when counting the memory copies), giving:</p>
<div align="center"><strong>395.7</strong>&nbsp;millions pixels / second</div>
<h1>Further optimization</h1>
<p>Launching a block per image line is highly suboptimal, due to the unevenly distribute nature of the computations. For example, threads at the square’s border will immediately converge, while those on the set will take the longest runtime.<br>This can be seen by profiling the above code using Nsight:</p>



<figure class="wp-block-image size-large"><a href="https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2.png" class="fancyboxgroup" rel="gallery-3349"><img decoding="async" width="1024" height="397" src="https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2-1024x397.png" alt="" class="wp-image-3352" srcset="https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2-1024x397.png 1024w, https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2-300x116.png 300w, https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2-768x298.png 768w, https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2-155x60.png 155w, https://blog.infine.com/wp-content/uploads/2021/06/mandelbrot-2.png 1485w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>As we can see, half of multiprocessors are idle.</p>
<p>We can instead distribute the work more evenly by using a 2D grid of relatively small blocks.</p>
<p>Fortunately, Hybridizer supports CUDA-like parallelism, so we can modify our entrypoint this way:</p>



<pre class="wp-block-code"><code class="">[EntryPoint("run")]
<strong>public</strong> <strong>static</strong> <strong>void</strong> Run(<strong>int</strong>[] light)
{
    <strong>for</strong> (<strong>int</strong> i = threadIdx.y + blockDim.y * blockIdx.y; i &lt; N; i += blockDim.x * gridDim.x)
    {
        <strong>for</strong> (<strong>int</strong> j = threadIdx.x + blockDim.x * blockIdx.x; j &lt; N; j += blockDim.y * gridDim.y)
        {
            <strong>float</strong> x = fromX + i * h;
            <strong>float</strong> y = fromY + j * h;
            light[i * N + j] = IterCount(x, y);
        }
    }
}</code></pre>



<p>&nbsp;</p>
<p>and run it with a 2D grid:</p>



<pre title="" class="wp-block-code"><code class="">HybRunner runner = HybRunner.Cuda("Mandelbrot_CUDA.dll").SetDistrib(32, 32, 16, 16, 1, 0);</code></pre>



<p>&nbsp;</p>
<p>The modified code runs now in 920 microseconds on the GPU, meaning:</p>
<div align="center"><strong>4.56 billions</strong>&nbsp;pixels / second</div>
<p>If we profile the newly generated kernel, we get:</p>
<p>&nbsp;</p>



<figure class="wp-block-image size-large"><a href="blob:https://blog.infine.com/1236a83f-581d-4730-9ce3-13176cc39721"><img decoding="async" src="blob:https://blog.infine.com/1236a83f-581d-4730-9ce3-13176cc39721" alt=""/></a></figure>



<p>main stall reason being “Other” with 69% followed by instruction fetch for only 5% of not eligible warps.<br>It’s reasonable to not try further optimization.</p>
<h1>Conclusion</h1>
<p>In this post we presented a basic usage of hybridizer, from unoptimal c# to highly efficient generated cuda code. We started by optimize our c# code and the migrated it seamlessly to CUDA.<br>We then optimized our c# code for CUDA GPUs, until we reached a close to peak performance level.</p><p>The post <a href="https://blog.infine.com/mandelbrot-with-hybridizer-3349">Mandelbrot with Hybridizer</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/mandelbrot-with-hybridizer-3349/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tests informatiques</title>
		<link>https://blog.infine.com/tests-informatiques-3073?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tests-informatiques</link>
					<comments>https://blog.infine.com/tests-informatiques-3073#respond</comments>
		
		<dc:creator><![CDATA[fabrice]]></dc:creator>
		<pubDate>Wed, 10 Mar 2021 13:45:13 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=3073</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">8</span> <span class="rt-label rt-postfix">min.</span></span> Vue d’ensemble (définitions et normes) Les tests informatiques sont destinés à évaluer si un système informatique et ses composants satisfont les exigences métier ou pas. Cette activité résulte des différences qu’il pourrait y avoir entre le résultat attendu et le résultat réellement obtenu. Les tests peuvent couvrir l’analyse et la vérification des exigences métier, la &#8230;</p>
<p>The post <a href="https://blog.infine.com/tests-informatiques-3073">Tests informatiques</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">8</span> <span class="rt-label rt-postfix">min.</span></span></p>
<h1>Vue d’ensemble (définitions et normes)</h1>
<p>Les tests informatiques sont destinés à évaluer si un système informatique et ses composants satisfont les exigences métier ou pas. Cette activité résulte des différences qu’il pourrait y avoir entre le résultat attendu et le résultat réellement obtenu.</p>
<p>Les tests peuvent couvrir l’analyse et la vérification des exigences métier, la révision de la conception ainsi que la vérification et la validation du code d’un développeur. Les tests peuvent commencer dès la phase de recueil du besoin et dure jusqu’au déploiement de l’application livrée. Si le démarrage des tests peut commencer assez tôt dans le cycle de développement en imaginant les cas de tests, y mettre fin serait un casse-tête face à un testeur perfectionniste. L’arrêt des tests arrive en général quand les dates jalons sont atteintes, quand les cas de tests couvrent un certain périmètre fonctionnel, quand le taux d’anomalies est réduit à un minimum ou tout simplement par une décision de gestion. Il y a beaucoup de termes en relation avec les tests. Passons les en revue.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="364"><strong>Vérification</strong> (tests unitaires, tests d’intégration)</td>
<td valign="top" width="364"><strong>Validation</strong> (recette)</td>
</tr>
<tr>
<td valign="top" width="364">Est-ce construit/codé correctement ?</td>
<td valign="top" width="364">Est-ce que c’est codé correctement vis-à-vis des exigences ?</td>
</tr>
<tr>
<td valign="top" width="364">Assurer que l’application couvre toutes les fonctionnalités demandées</td>
<td valign="top" width="364">Assurer que le comportement obtenu est bon</td>
</tr>
<tr>
<td valign="top" width="364">Effectué par les développeurs</td>
<td valign="top" width="364">Effectué par des recetteurs,  homologateurs ou testeurs indépendants de l’équipe de développement</td>
</tr>
<tr>
<td valign="top" width="364">Vision statique et objective car elle est accès sur le code et sa logique</td>
<td valign="top" width="364">Vision dynamique et subjective car l’application est testée par rapport aux exigences métier et à des décisions de l’utilisateur</td>
</tr>
</tbody>
</table>
<p><strong>L’assurance qualité</strong> est une activité visant l’implémentation de processus, de procédures et de standards dans le contexte du développement d’applications informatiques. Elle a pour but la prévention d’anomalies et fait partie du cycle de vie des tests d’applications informatiques.</p>
<p>Le <strong>contrôle qualité</strong> est une activité destinée à vérifier que le logiciel développé respecte les exigences métier. Il met en application les processus définit par l’assurance qualité. C’est une activité corrective et se focalise sue un logiciel particulier. Il peut être considéré que le contrôle qualité est un sous-ensemble de l’assurance qualité.</p>
<p>Les <strong>tests informatiques</strong> sont l’activité d’identification des bugs, anomalies et défauts d’un logiciel. Ils sont un sous-ensemble de l’assurance qualité.</p>
<p>L’<strong>audit </strong>est un examen  des processus  de testing exitants. Il est mené par un organisme externe aux développeurs et aux testeurs et délivre un certificat ou un accréditation.  C’est une comparaison  des processus documentés et des processus vraiment déroulés.  L’audit peut se décliner en audit de conformité, audit légal, audit interne, audit du système et autres.</p>
<p>Les <strong>inspections </strong>sont des examens des exigences métiers, de la conception et du code. Elles sont effectués par une tierce personne et vise au respect des processus documentés. A différence de l’audit, il n’y a pas de certifications.</p>
<p>Le <strong>testing</strong> est l’identification de bogue, d’anomalies et de défauts. C’est une activité qui vise le repérage mais pas la correction. Cette dernière est réalisée par d’autres équipes</p>
<p>Le <strong>débogage</strong> est l’identification, la qualification et la correction des anomalies.</p>
<p>La norme <strong>ISO/IEC 9126</strong> définit un langage de modélisation de la qualité des logiciels. Le langage de description utilise des termes tels que &#8220;facteurs qualité&#8221; , &#8220;caractéristiques, &#8220;sous-caractéristiques ,&#8221;métriques&#8221; pour classer de façon arborescente et structurée, sur la base de définitions standardisées, un vocable de plusieurs dizaines de propriétés en &#8220;ité&#8221; (portabilité, maintenabilité, fiabilité, etc.)</p>
<ul>
<li><strong>Capacité fonctionnelle</strong> : Est-ce que le logiciel répond aux besoins fonctionnels exprimés ?</li>
<li><strong>Fiabilité</strong> : Est-ce que le logiciel maintient son niveau de service dans des conditions précises et pendant une période déterminée ?</li>
<li><strong>Facilité d&#8217;utilisation</strong> : Est-ce que le logiciel requiert peu d’effort à l’utilisation ?</li>
<li><strong>Rendement / Efficacité</strong> : Est-ce que le logiciel requiert un dimensionnement rentable et proportionné de la plate-forme d’hébergement en regard des autres exigences ?</li>
<li><strong>Maintenabilité </strong>: Est-ce que le logiciel requiert peu d’effort à son évolution par rapport aux nouveaux besoins ?</li>
<li><strong>Portabilité</strong> : Est-ce que le logiciel peut être transféré d’une plate-forme ou d’un environnement à un autre ?</li>
</ul>
<p><strong>ISO/IEC 9241-11</strong> aborde l&#8217;usage d&#8217;un produit par des utilisateurs dans un contexte donnée afin d&#8217;atteindre des objectifs de safistaction et d&#8217;efficacité.</p>
<p><strong>ISO/IEC 25000</strong> remplace ISO-9126 and ISO-14598 et définit des guides d&#8217;utilisation SQUARE (Software product Quality Requirements and Evaluation)</p>
<p><strong>IEEE</strong> est l&#8217;acronyme de &#8220;institute of Electrical and Electronics Engineers&#8221;. Il définit aussi des normes spécifiques à des contextes du testing comme les tests unitaires, les plans des tests et de recette, la classification des anomalies etc.</p>
<h1>Types de tests</h1>
<p>Les tests peuvent être catégorisés suivant la manière comme ils sont réalisés. Ils sont soit manuels soit automatisés</p>
<p>Lors des tests manuels, le testeur adopte le point de vue de l’utilisateur final et procède à la recherche d’un comportement non-conforme.  Il y a plusieurs niveaux de profondeur de testing. Ceux-ci seront expliqués par la suite.</p>
<p>Les tests automatisés sont effectués quand le testeur écrit un script d’automatisation et les tests eux-mêmes sont exécutés par un logiciel dédié à l’exécution des tests. L’automatisation permet de dérouler plusieurs fois le même test ce qui est propice aux tests de non régression.  Les domaines qui se prêtent à l’automatisation sont des transactions comme le login ou le remplissage de formulaires ou l’accès simultané peut générer des pics d’utilisation. Il est recommandé d’automatiser dans de très grands projets, quand la même fonctionnalité est testée fréquemment, quand les exigences sont stables, dans des situations visant des  critères de performance et de robustesse d’accès.</p>
<p>Les étapes de l’automatisation sont les suivantes :</p>
<ul>
<li>Identification des domaines d’automatisation</li>
<li>Sélection de l’outil d’automatisation</li>
<li>Ecriture des scripts et des enchainements</li>
<li>Exécution des tests</li>
<li>Génération des rapports</li>
<li>Analyse des résultats</li>
</ul>
<p>Parmi les logiciels d’automatisation on trouve  entre autres HP Quick Test Professional, Selenium, IBM Rational Functional Tester, SilkTest, TestComplete, Testing Anywhere, WinRunner, LaodRunner, Visual Studio Test Professional et WATIR.</p>
<h1>Méthodes de testing</h1>
<p>Dans la <strong>méthode de boite noire</strong>, le testeur n’a pas de connaissances sur le code et l’architecture. Le testeur utilise l’IHM et examine les résultats obtenues. Les avantages sont l’’adaptation à des périmètres très grands, la bonne séparation de la vision de l’utilisateur final et du développeur et l’absence de connaissances techniques poussées.  Le risque de cette méthode est la couverture inappropriée de certaines parties du logiciel.</p>
<p>Dans la <strong>méthode de la boite blanche</strong>, une investigation détaillée de la structure et de la logique du code est conduite.  Une  connaissance technique du langage de programmation et des modules des logiciels testés est requise.  En boite blanche, le code peut être optimisé et il est plus probable de couvrir la totalité des cas. D’un autre côté, cette métode est plus couteuse dans le sens où  il faut maintenir des outils spécialisés comme les analyseurs de code et de débogage. Aussi les ressources sont plus chères car il faut qu’elles aient la connaissance des techniques en lien avec le logiciel testé.</p>
<p>Dans la <strong>méthode de boite grise</strong>, le testeur a accès aux documents de conception et au modèle de base de données. Ceci lui permet de préparer les données de tests et les scénarios de tests.</p>
<h1>Catégories de tests</h1>
<p>Il y a deux niveaux de tests, chacun divisé en sous-catégories : Les tests fonctionnels et les tests non fonctionnels</p>
<p>Les <strong>tests fonctionnels</strong>  se basent sur les spécifications fonctionnelles.  Le logiciel est testé dans un environnement afin de vérifier sa conformité aux exigences (requirements). Les étapes qui les composent sont les suivantes ;</p>
<ul>
<li>Détermination de la fonctionnalité testée</li>
<li>Ecriture des scénarios de test et des cas de test</li>
<li>Création des données de tests</li>
<li>Détermination de la sortie</li>
<li>Comparaison des résultats obtenus et des résultats attendus.</li>
</ul>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="215">Sous catégories des tests fonctionnels</td>
<td valign="top" width="512">Description</td>
</tr>
<tr>
<td valign="top" width="215">Tests unitaires</td>
<td valign="top" width="512">Ce test est réalisé par le développeur afin de vérifier que le module livré est conforme. Il se focalise sur la fonctionnalité livrée</td>
</tr>
<tr>
<td valign="top" width="215">Tests d’intégration</td>
<td valign="top" width="512">Ces tests succèdent les tests unitaires.  Ils vérifient le fonctionnement d’un ensemble de modules et sont exécutés de la forme « bottom-up » et ensuite « top-down ». Dis d’une autre façon, soit les tests sont organisés par empilement de modules testés, soit par un ensemble de modules non-testés et commandés par le module de plus haut niveau qui les testent. Les tests d’intégration sont réalisés par l’équipe de développement</td>
</tr>
<tr>
<td valign="top" width="215">Tests système</td>
<td valign="top" width="512">Après les tests d’intégration, les tests système confrontent l’application à des données réelles dans un environnement proche de celui de production.  Ces tests valident les exigences métier et l’architecture applicative. En général, ils sont exécutés par des testeurs de l’éditeur.</td>
</tr>
<tr>
<td valign="top" width="215">Tests de non régression</td>
<td valign="top" width="512">Les tests de non-régression contrôlent que les évolutions d’un système, les nouveaux modules, n’ont pas d’effet de bord sur les fonctionnalités existantes.  Ceci minimise les risques de l’ensemble suite au rajout  ou la modification d’un fonctionnalité.  Il est donc important de conserver l’historique des tests puisque ceux-ci pourront être rejoués à nouveau sur des livraisons futures</td>
</tr>
<tr>
<td valign="top" width="215">Recette (User Acceptance Test)</td>
<td valign="top" width="512">Les UAT comme son nom l’indique sont réalisés par les utilisateurs finaux. Leur finalité est d’avoir l’accord client sur le bon fonctionnement de l’application.Suivant le type d’application il y aura des tests pour des versions alpha et des versions beta.  Les tests des versions alpha se réalisent en binôme entre les développeurs et l’assurance qualité. L’intention est de corriger des erreurs de cosmétique, des enchainements illogiques, etc. Les tests beta sont réalisés sur une version diffusée auprès d’un échantillon d’utilisateur représentatif du grand public.</td>
</tr>
</tbody>
</table>
<p>Les <strong>tests non-fonctionnels</strong> sont basés sur des critères applicatifs détaillés dans le dossier d’architecture système, les exigences non-fonctionnelles. Ils sont donc menés par des experts techniques</p>
<p>Les <strong>tests de performance</strong> cherchent à identifier des problèmes de performance et des goulots d’étranglement. Les différentes causes peuvent être la lenteur du réseau, les traitements des bases de données,  la répartition de charge (load balancing).   Parmi les tests de performance, les tests de charge simulent des connexions et des manipulations de données avec des scripts d’automatisation. Ainsi l’application dévoile son comportement aux heures de pointe de l’utilisation. Les tests de stress poussent le système à ses limites et dans des situations risqué (perte de connexion au réseau ou à une base de données ou surcharge des processus machine)</p>
<p>Les <strong>tests de convivialité</strong> (usability) permettent d’évaluer la satisfaction de l’utilisateur quand celui-ci se fixe un objectif opérationnel et  quand cet objectif est atteint de manière efficace. Ils mesurent les interactions de l’utilisateur dans l’atteinte d’un but précis.</p>
<p>Les <strong>tests de sécurité</strong> ont pour vocation l’identification de failles et de vulnérabilités en termes de sécurité.  Ces tests garantissent la confidentialité, l’intégrité des données, la protection contre des attaques malveillantes, le respect de réglementations spécifiques à la banque etc…</p>
<p>Les tests de <strong>portabilité</strong> assurent que l’application peut être installée et exécutée dans un autre système.</p>
<p>A part ces catégories de tests, l&#8217;IEEE-Std 830 &#8211; 1993 liste 13 exigences non-fonctionnelles :</p>
<ul>
<li>performance</li>
<li>interface</li>
<li>opérationnel</li>
<li>sur les ressources</li>
<li>vérification</li>
<li>validation / recette</li>
<li>documentation</li>
<li>sécurité</li>
<li>portabilité</li>
<li>qualité</li>
<li>fiabilité</li>
<li>maintenabilité</li>
<li>sauvegarde</li>
</ul>
<h1>Documentation relative aux tests</h1>
<p>Le <strong>plan de tests</strong> résume la stratégie de tests visée pour l’application. Il inclut les sections suivantes :</p>
<ul>
<li>hypothèses</li>
<li>liste des cas de test</li>
<li>liste des fonctionnalités</li>
<li>liste de livrables</li>
<li>liste des ressources humaines et matérielles</li>
<li>risques</li>
<li>planning et jalon</li>
</ul>
<p>Les <strong>scénarios de test</strong> sont des regroupements de cas de tests. Le <strong>cas de test</strong> est un ensemble de pas à suivre. Elle est représentative d&#8217;un situation opérationnelle. Voici l&#8217;exemple du formalisme de représentation.<a href="https://blog.infine.com/wp-content/uploads/2014/05/Capture.jpg" class="fancyboxgroup" rel="gallery-3073"><img decoding="async" class="aligncenter size-full wp-image-3074" src="https://blog.infine.com/wp-content/uploads/2014/05/Capture.jpg" alt="" width="626" height="448" srcset="https://blog.infine.com/wp-content/uploads/2014/05/Capture.jpg 626w, https://blog.infine.com/wp-content/uploads/2014/05/Capture-300x214.jpg 300w" sizes="(max-width: 626px) 100vw, 626px" /></a></p>
<p>A l’issue des tests, des anomalies seront relevées dans des fiches descriptives.  Il sera important donc de dressée <strong>la matrice de traçabilité. </strong> Ce document fait le lien entre les exigences, les tests prévus, les tests exécutés et les anomalies déclarées.</p>
<p>L’outil « <strong>Quality Center </strong>» permet d’informatiser e processus. Le module « requirements » permet de saisir les exigences. Le module « Test Plan » permet de décrire  les cas de tests et les organisent sous forme arborescente de sorte à produire des scénarios de tests. Le module « Test Lab » représente une exécution donnée pour un scénario de tests.   Un scénario de tests peut être exécuté plusieurs fois . L’exécution peut avoir lieu manuellement ou automatiquement. De ce fait, Quality Center permet de générer des scripts d’automatisation.  Après une exécution,  les anomalies déclarées peuvent être liés aux cas de tests. Finalement, Quality Center offre la possibilité de générer des rapport sur l’état d’avancement des tests.</p>
<p><strong><em> Références</em></strong></p>
<table style="width: 640px;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="177">Sujet (Quality Center)</td>
<td valign="top" width="463">Lien</td>
</tr>
<tr>
<td valign="top" width="177">introduction</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=RoHYqeBxcY&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">modules</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=fBREaBJPYc8&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">requirements</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=fBREaBJPYc8&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Test plan module</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=Gm6pnKmFjAA&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Automated test case design</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=6-tcVrnEyAU&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Test linkage</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=QormvqA0_eQ&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Test lab module</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=mvoGw8GRbs4&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Run automated test</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=QSKh-UiVHco&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Defects module</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=rC9noc_FrpU&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Defects linkage</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=VVI-p9YI57w&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">favorites</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=-qCMLvxGfvw&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">traceability</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=j87YjWVewXQ&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Graphs and reports</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=CyDaLj_dhyA&amp;list=PL3751912B18050F7F</td>
</tr>
<tr>
<td valign="top" width="177">Analysis graphs</td>
<td valign="top" width="463">http://www.youtube.com/watch?v=Wdm7RzPbTio&amp;list=PL3751912B18050F7F</td>
</tr>
</tbody>
</table><p>The post <a href="https://blog.infine.com/tests-informatiques-3073">Tests informatiques</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/tests-informatiques-3073/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Les paiements par carte</title>
		<link>https://blog.infine.com/les-paiements-par-carte-2954?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=les-paiements-par-carte</link>
					<comments>https://blog.infine.com/les-paiements-par-carte-2954#respond</comments>
		
		<dc:creator><![CDATA[fabrice]]></dc:creator>
		<pubDate>Fri, 03 May 2019 23:01:40 +0000</pubDate>
				<category><![CDATA[Finance]]></category>
		<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=2954</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">11</span> <span class="rt-label rt-postfix">min.</span></span> Les cartes de paiements sont devenues un instrument courant.  Qui n’en a pas une serait considéré un troglodyte. Cartes de crédit, cartes de débit, porte-monnaies électroniques, cartes à puce, cartes de paiement professionnelle, cartes pétrolières, carte vitale, chacune offre un service adapté aux besoins de l’utilisateur. La monétique s’est érigée au fil du temps comme &#8230;</p>
<p>The post <a href="https://blog.infine.com/les-paiements-par-carte-2954">Les paiements par carte</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">11</span> <span class="rt-label rt-postfix">min.</span></span>Les cartes de paiements sont devenues un instrument courant.  Qui n’en a pas une serait considéré un troglodyte. Cartes de crédit, cartes de débit, porte-monnaies électroniques, cartes à puce, cartes de paiement professionnelle, cartes pétrolières, carte vitale, chacune offre un service adapté aux besoins de l’utilisateur. La monétique s’est érigée au fil du temps comme un corpus de connaissance dans les sciences et techniques de l’ingénieur. C’est la combinaison de l’informatique, de l’électronique et de la télématique au service des paiements électroniques.  Dans cette évolution constante, l’utilisation des cartes se dématérialise avec le commerce électronique,  le paiement par mobile et les paiements sans contact.  Des fournisseurs de services de paiements comme Paypal apparaissent. Les  systèmes anti-fraude se renforcent. Les singles des disques vinyle de 45 tours des tubes de l’été s’achètent maintenant en  ligne dans des plateformes traitant des micro-paiements.</p>
<p>Le présent article se concentre sur l’histoire des cartes bancaires, les bases des transactions par carte et les retraits dans les distributeurs automatiques de billets,  la norme EVM des cartes à puces  et finalement  la norme  SEPA des cartes (SCS, SEPA card scheme).<br />
<span id="more-2954"></span></p>
<h1>Un peu d’histoire</h1>
<p>En France, le groupement des cartes bancaires est le groupement d’intérêt économique qui gère le réseau interbancaire français des distributeurs de billets et de terminaux électroniques de paiement. Ce réseau est indépendant des réseaux Visa et MasterCard et est interconnecté à ceux-ci.  Le site www.cartes-bancaires.com résume l’histoire des avancées technologiques des cinquante dernières années. Il est surprenant d’apercevoir les changements encourus. Ce qui était une innovation pendant le vingtième siècle, du point de vue du vingt-et-unième  n’est qu’un objet de la vie courante comme le sont la voiture, la télévision ou internet.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="64">Année</td>
<td valign="top" width="692">Evènement</td>
</tr>
<tr>
<td valign="top" width="64">1967</td>
<td valign="top" width="692">Première carte de paiement grâce à l’association de six banques</td>
</tr>
<tr>
<td valign="top" width="64">1968</td>
<td valign="top" width="692">Premier distributeur de billets installé à Paris</td>
</tr>
<tr>
<td valign="top" width="64">1971</td>
<td valign="top" width="692">Première carte à piste magnétique</td>
</tr>
<tr>
<td valign="top" width="64">1973</td>
<td valign="top" width="692">Première fois qu’il est possible de payer par carte à l’étranger</td>
</tr>
<tr>
<td valign="top" width="64">1974</td>
<td valign="top" width="692">Invention de la carte à puce</td>
</tr>
<tr>
<td valign="top" width="64">1975</td>
<td valign="top" width="692">Première piste magnétique aux normes ISO</td>
</tr>
<tr>
<td valign="top" width="64">1978</td>
<td valign="top" width="692">Premiers paiements par carte sur l’autoroute de Normandie</td>
</tr>
<tr>
<td valign="top" width="64">1980</td>
<td valign="top" width="692">Premier terminaux de paiements électronique (TPE, minitel)</td>
</tr>
<tr>
<td valign="top" width="64">1984</td>
<td valign="top" width="692">Création du groupement de paiement par carte, début de l’interbancarité</td>
</tr>
<tr>
<td valign="top" width="64">1985</td>
<td valign="top" width="692">Apposition d’un symbole ultraviolet sur les cartes bancaires</td>
</tr>
<tr>
<td valign="top" width="64">1986</td>
<td valign="top" width="692">Première carte à puce commercialisée</td>
</tr>
<tr>
<td valign="top" width="64">1987</td>
<td valign="top" width="692">CB intègre l’hologramme sécuritaire sur les cartes à puces</td>
</tr>
<tr>
<td valign="top" width="64">1990</td>
<td valign="top" width="692">CB lance le code secret à quatre chiffres</td>
</tr>
<tr>
<td valign="top" width="64">1992</td>
<td valign="top" width="692">Commercialisation de la puce à toutes les CB</td>
</tr>
<tr>
<td valign="top" width="64">1996</td>
<td valign="top" width="692">Première hotline pour faire opposition en cas de perte ou de vol</td>
</tr>
<tr>
<td valign="top" width="64">1997</td>
<td valign="top" width="692">La carte à puce modèle français commence à s’exporter à l’étranger</td>
</tr>
<tr>
<td valign="top" width="64">1998</td>
<td valign="top" width="692">La carte à puce passe aux normes EMV</td>
</tr>
<tr>
<td valign="top" width="64">1999</td>
<td valign="top" width="692">Premier paiement par carte en Euros</td>
</tr>
<tr>
<td valign="top" width="64">2000</td>
<td valign="top" width="692">Le cryptogramme visuel est apposé aux cartes bancaires pour sécuriser la VAD (vente à distance)</td>
</tr>
<tr>
<td valign="top" width="64">2001</td>
<td valign="top" width="692">Le nombre de paiement par carte dépasse celui par chèque</td>
</tr>
<tr>
<td valign="top" width="64">2002</td>
<td valign="top" width="692">CB met en place un système de détection des yescards</td>
</tr>
<tr>
<td valign="top" width="64">2005</td>
<td valign="top" width="692">Un nouveau réseau e-rsb (opérateur de routage des autorisations bancaires, e-rsb.com) pour accompagner la croissance des cartes bancaires</td>
</tr>
<tr>
<td valign="top" width="64">2006</td>
<td valign="top" width="692">Lancement du DDA (dynamic date authentification) sur les cartes bancaires</td>
</tr>
<tr>
<td valign="top" width="64">2007</td>
<td valign="top" width="692">Première carte co-brandée</td>
</tr>
<tr>
<td valign="top" width="64">2009</td>
<td valign="top" width="692">Transposition de la directive sur les services de paiement pour la mise en œuvre du SEPA</td>
</tr>
<tr>
<td valign="top" width="64">2010</td>
<td valign="top" width="692">Déploiement des authentifications fortes pour les paiements sur internet</td>
</tr>
<tr>
<td valign="top" width="64">2011</td>
<td valign="top" width="692">CB agrée les premiers TPE pour les paiements sans contact</td>
</tr>
</tbody>
</table>
<h1>Les paiements sur TPE, les retraits sur DAB et les acteurs</h1>
<p>L’expérience de retrait d’argent dans un distributeur automatique de billet et le règlement d’une somme d’argent sur un terminal de paiement électronique chez un commerçant sont des actions courantes. Le <strong>titulaire de la carte</strong> (cardholder) utilise le TPE d’un <strong>commerçant</strong> (merchant)  ou le DAB d’une banque quelconque. Dans les deux cas, le titulaire de la carte initie la demande d’autorisation qui transite par le  <strong>réseau de carte</strong> (card scheme).  La demande est transmise de l’<strong>acquéreur</strong> (acquirer) vers  l’<strong>émetteur de la carte </strong>(issuer). Une fois que l’autorisation est donnée par l’émetteur, celle-ci retourne sur le terminal (DAB,TPE) comme dans la figure ci-après.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/03/opération-carte.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2956" src="https://blog.infine.com/wp-content/uploads/2014/03/opération-carte.jpg" alt="" width="615" height="504" srcset="https://blog.infine.com/wp-content/uploads/2014/03/opération-carte.jpg 615w, https://blog.infine.com/wp-content/uploads/2014/03/opération-carte-300x245.jpg 300w" sizes="(max-width: 615px) 100vw, 615px" /></a></p>
<p align="center">Figure 1, L’opération de paiement (source cartes bancaires)</p>
<p>Dans un deuxième temps, les règlements ont lieu. Régulièrement, les transactions bancaires sont remises à la  banque du commerçant, l’acquéreur,  et celui-ci crédite le compte du commerçant. Les transactions des commerçants, clients de l’acquéreur, sont transmises à la chambre de compensation de détail.  En France, elle s’appelle CORE (COmpensation REtail).  Finalement, les sommes sont débitées des comptes des titulaires de la carte.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/03/règlement-carte.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2957" src="https://blog.infine.com/wp-content/uploads/2014/03/règlement-carte.jpg" alt="" width="617" height="509" srcset="https://blog.infine.com/wp-content/uploads/2014/03/règlement-carte.jpg 617w, https://blog.infine.com/wp-content/uploads/2014/03/règlement-carte-300x247.jpg 300w" sizes="(max-width: 617px) 100vw, 617px" /></a></p>
<p align="center">Figure 2, le règlement et la compensation (source cartes bancaires)</p>
<p>Le tiulaire de la carte (cardholder) est le nom de la personne qui est inscrit sur la carte. Le porteur et le titulaire peuvent être différents. C’est le cas des cartes professionnelles.</p>
<p>Le commerçant (merchant) signe un contrat avec l’acquéreur où sont stipulées les conditions d’utilisation des terminaux et les commissions prélevées sur chaque transaction ou type de carte.</p>
<p>L’acquéreur  (card acquirer) est l’entité qui gère le compte du commerçant. Il transmet les informations des transactions aux émetteurs de cartes pour traitement ultérieur et garantit que le compte du commerçant est crédité.</p>
<p>L’émetteur de cartes (card  issuer) est l’institution financière qui met à disposition la carte au titulaire de la carte. Il gère le compte du titulaire et peut lui octroyer une ligne de crédit. Il autorise les transactions sur les TPE ou DAB et garantit que le paiement sera régler auprès de l’acquéreur en fonction des arrangements commerciaux établis avec le réseau de cartes.</p>
<p>Entre l’émetteur et l’acquéreur se trouve le réseau de d’acceptation de paiements (card scheme).  Le réseau de cartes fait référence à l’infrastructure interbancaire d’acceptation de paiement par carte. En France ce réseau est indépendant  des réseaux internationaux tels que Visa ou Mastercard. Il s’appelle e-rsb.   Le terme « card scheme » fait  aussi référence au  contrat commercial qui permet à une marque donnée  de carte de paiements  de fonctionner dans un cadre légal, organisationnel et opérationnel.  Un réseau de carte assure les standards techniques des TPE, des DAB et de  l’infrastructure technique d’échanges. Il établit aussi  les termes légaux en cas de fraude et de litige.</p>
<p>Il y a deux configurations possibles pour les réseaux de paiements.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes4.jpg" class="fancyboxgroup" rel="gallery-2954"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2958" src="https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes4.jpg" alt="" width="720" height="540" srcset="https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes4.jpg 720w, https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes4-300x225.jpg 300w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p align="center">Figure 3, système quatre coins (source wikipedia)</p>
<p>Le système quatre coins sépare l’acquéreur de l’émetteur. C’est un réseau ouvert ou une banque ou une institution financière peut devenir membre  à condition de respecter le cadre technique du réseau. Visa et Mastercard en sont des exemples.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes3.jpg" class="fancyboxgroup" rel="gallery-2954"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2959" src="https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes3.jpg" alt="" width="720" height="540" srcset="https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes3.jpg 720w, https://blog.infine.com/wp-content/uploads/2014/03/Card_schemes3-300x225.jpg 300w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<p align="center">Figure 4, système 3 coins (source wikipedia)</p>
<p>Le système de trois coins est un réseau ou l’acquéreur et l’émetteur sont le même. Il n’y aura donc pas besoin de passer par une chambre de compensation ni de régler des commissions entre acquéreur et émetteur. C’est un réseau fermé.  Diners et American Express en sont des exemples.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/03/charges-paiement-carte.jpg" class="fancyboxgroup" rel="gallery-2954"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2960" src="https://blog.infine.com/wp-content/uploads/2014/03/charges-paiement-carte.jpg" alt="" width="744" height="532" srcset="https://blog.infine.com/wp-content/uploads/2014/03/charges-paiement-carte.jpg 744w, https://blog.infine.com/wp-content/uploads/2014/03/charges-paiement-carte-300x214.jpg 300w" sizes="(max-width: 744px) 100vw, 744px" /></a></p>
<p align="center">Figure 5, Les commissions (source : payment systems,  ECB)</p>
<p>Chaque fois qu’un paiement par carte a lieu, la commission d’interchange est prélevée.  Elle couvre les coûts  de traitement, les coûts des garantis en cas de fraude et la période de crédit accordée au titulaire de la carte.  Elle est calculée suivant un pourcentage de la transaction, suivant un coût fixe par opération ou une combinaison des deux. La commission d’interchange est payée par l’acquéreur à l’émetteur.  De leur côté, le commerçant paie une commission à l’acquéreur et le titulaire de la carte paie une commission à l’émetteur. Suivant le type de carte, le titulaire aura droit à certains bénéfices comme le service de rapatriement en cas d’accident et autres. Dans le cas d’un retrait d’espèces, les mêmes types de commissions sont prélevées sauf pour le sens de la commission d’interchange. Celle-ci  est payée par l’émetteur à l’acquéreur principalement pour la maintenance du distributeur de billets. On peut se douter que ces commissions peuvent être  un débat houleux entre les commerçants et les acquéreurs ou entre les acquéreurs, les émetteurs et les réseaux d’acceptation de paiement par carte.  Le réseau d’acceptation de cartes peut forcer les commerçants à n’utiliser qu’une marque de carte. Les grands groupes commerciaux peuvent négocier des tarifs à leur avantage.  Enfin, le gouvernement peut intervenir dans l’adoption d’un code de conduite et de transparence comme ç’a pu être le cas au Canada  (cf : http://paymentsystemreview.ca)</p>
<h1>Les specifications  EMV</h1>
<p>EMV est l’acronyme de &#8220;Europay, MasterCard et Visa&#8221;. C’est un standard d’interopérabilité entre les cartes à puces (smartcard, IC card, integrated chip card) les TPE (terminaux de paiements électroniques, POS, point of sale) et les DAB (distributeurs  automatiques de billets, ATM, automated teller machine) destiné à identifier les transactions  des cartes de débit et de crédit par contact direct ou sans contact entre la carte et les terminaux.</p>
<p>EMVco est l’organisme chargé du maintien des spécifications et regroupe des réseaux de cartes américains, japonais et chinois.</p>
<p>Les avantages de la norme EVM sont:</p>
<ul>
<li>l&#8217;interopérabilité</li>
<li>la gestion de plusieurs applications sur une même carte (carte de crédit, carte de débit, porte-monnaie électronique,…)</li>
<li>l&#8217;autorisation en ligne et hors-ligne</li>
<li>&#8216;l&#8217;augmentation des protocoles de sécurité etd&#8217; identification avec le PIN (personal identity code)</li>
</ul>
<p>La normes est composée de quatre volumes. Le premier est consacré aux caractéristiques de la carte à puce. Le deuxième aborde la sécurité, les protocoles de cryptage, les méthodes d&#8217;authentification et ses messages. Le troisième volume s&#8217;enfonce dans les dédales de la programmation de la carte. le quatrième volume détails les exigences des terminaux et des IHM.</p>
<p>Voici un aperçu des volumes 2 et 3. Les étapes du traitement d&#8217;une transaction se divisent comme il suit.</p>
<ul>
<li>« <strong>Selection de l’application</strong> » (Application selection) récupére le code d’identification de l’application d’une institution financière. Une banque peut avoir plusieurs codes correspondant à ses produits</li>
<li><strong>« Initiation du traitement de l’application »</strong> (Initiate application processing) . C’est l’exécution de PDOL (processing options data objects list,  le TEP-DAB envoie des données à la carte) de AIP (application interchange profile, la carte envoie des programmes que le TEP-DAB  devra exécuter) et de AFL (application file locator,  envoi d&#8217;une liste de pointeurs sur des fichiers de la carte)</li>
<li>« <strong>Lecture des données des applications</strong> » (Read application data). Le TEP-DAB lit les fichiers fournis par AFL</li>
<li>« <strong>Traitement des contraintes</strong> »( Processing restrictions) établit le cadre d’utilisation de la carte dans des limites prédéterminée (période d’utilisation, territoire géographique etc). Si les restrictions ne sont pas respectées, l’utilisation de la carte peut être refusée.</li>
<li>« <strong>Authetitfication hors ligne</strong> » (Offline data authentication) est la validation de la carte moyennant un protocole de sécurité de clef publique et de clef privée (clef RAS). SDA (Static data authentication, authetification de données statiques) vérifie que la carte a été fabriquée par une banque émettrice (clef RSA de l&#8217;émetteur). Comme SDA peut être contourné par le clonage des cartes, DDA (Dynamic data authentication)  renforce la sécurité. Le protocole est basé sur la clef RSA de l’émetteur, la clef RSA de la carte elle-même et des données aléatoires et dépendantes de la transaction. CDA  (Combined DDA/generate application cryptogram ) est une authentification combinant DDA et SDA.</li>
<li>« <strong>Vérification du titulaire de la carte</strong> » (Cardholder verification method) est la saisie du code PIN. Dans certains pays le PIN n’est pas implémenté et une signature sera requise.</li>
<li>« <strong>La gestion du risque</strong> »( Terminal risk management ) est le choix entre la transaction hors ligne et en ligne en fonction du montant payé, une vérification aléatoire…</li>
<li>« <strong>Analyse du terminal</strong> » (Terminal action analysis) est l’étape qui  en fonction des résultats des étapes &#8221; traitement des contraintes&#8221;, &#8220;authentification  hors ligne&#8221;, « vérification du titulaire »,  et la  « gestion des risques » aboutit sur 3 résultats possibles : autorisation de la transaction hors ligne, refus de la transaction hors ligne ou autorisation de la transaction en ligne.</li>
<li>« <strong>Première analyse de la carte</strong> »  est l&#8217;étape ou la carte répond avec 3 cryptogrammes: TC (Transaction certificate) autorisation hors ligne, ARQC (Authorization Request Cryptogram) autorosation en ligne, AAC (Application Authentication Cryptogram) refus du hors ligne</li>
<li>Dans « <strong>Autorisation de la transaction en ligne</strong> »,  le terminal construit une demande de transaction en ligne pour être envoyée au terminal de l’émetteur.   Cette étape est obligatoire pour les DAB.</li>
<li>« <strong>Seconde analyse de la carte</strong> » (Second card action analysis) est une étape ou le terminal envoie des données sur la carte.</li>
<li>Le « <strong>traitement du script de l’émetteur</strong> » (Issuer script processing) est l’exécution d&#8217;un programme pour mettre à jour la carte. Elle peut être bloquée ou mise à jour avec des nouvelles données en provenance de l’émetteur.</li>
</ul>
<h1>La norme de cartes SEPA (SCS , SEPA card scheme)</h1>
<p>Le conseil européen sur les paiements (european payment council)  maintient la norme SCS. La migration vers CSC a eu lieu en 2010 et la norme continue d’être mise à jour par exemple sur les paiements par mobile et paiements sans contact.</p>
<p>D’après la source http://sepafrance-temp.fr, Conformément au cadre d’interopérabilité SEPA, les paiements par carte doivent respecter les principes suivants :</p>
<ul>
<li>Les porteurs peuvent réaliser des paiements dans l&#8217;ensemble de l’espace SEPA avec leur carte, chez les commerçants qui l’acceptent.</li>
<li>Les commerçants peuvent accepter dans les mêmes conditions les cartes sans distinction liée à leur pays d &#8216; émission.  Ils conservent le choix des systèmes de cartes qu’ils acceptent.</li>
<li>Les paiements par cartes utilisent la technologie EMV et sont le plus souvent authentifiés par un code PIN.</li>
<li>Le paiement est garanti dans les conditions prévues par le réseau de cartes.</li>
</ul>
<p>La norme CSC comporte six volumes.</p>
<ul>
<li>Le premier volume est un introduction qui souligne l’importance  de l’harmonisation des exigence du cadre SEPA pour les cartes. Ce volume explique le composition du groupe chargé de la maintenance et de la mise à jour de la norme et une liste exhaustive des termes et définitions et acronymes utilisés dans les autres volumes</li>
<li>Le deuxième volume balaye les exigences (requirements) , les règles de gestion et les cas d’utilisation des transactions effectuées par carte sans perdre de vue les spécifications EMV sur laquelle la norme est basée. Les exigences couvrent l’utilisation de la carte, des DAB, des services pouvant être associés à la carte</li>
<li>Le troisième volume est la description des données définies avec le standard XML 20022 et les formats d’échanges garantissant l’interopérabilité. Ce volume est accompagné d’une feuille Excel facilitant la conception architecturale  et l’harmonisation des messages d’autorisation et de compensation. Ceci peut être comparé à la définition des classes en langage objet.</li>
<li>Le quatrième volume se spécialise sur le sujet de la sécurité des cartes et se réfère aux standards internationaux de la sécurité des cartes et s’adresse aux développeurs et experts en sécurité.</li>
<li>Le cinquième volume aborde les procédures de vérification de la conformité aux normes SEPA des cartes, TPE et DAB.</li>
<li>Le sixième volume est un guide d’implémentation. Il indique le calendrier de migration , des choix techniques de la norme EMV ( la liste des étapes décrites dans le chapitres EMV de cette article) et des cas d’utilisation  ou plutôt des contextes de paiements avec les parties obligatoires et optionnelles.</li>
</ul>
<h1>Conclusion</h1>
<p>La norme CSC basée sur le standard EMV est la pierre angulaire des paiements sur terminaux auprès des commerçants et distributeurs de billets.  Mais ces modes de paiements ne seraient pas désuets? Le conseil européen sur les paiements a déjà commencé les discussions sur les normes des paiements sans contact et des paiements par mobile. Ces deux modes de paiement utilisent l&#8217;identification par radio-fréquence (RDFI, radio frequency identification). Soit la puce électronique de la carte est équipée de cette technologie, soit elle est intégrée à une puce insérée dans le téléphone portable. Il ne reste plus qu&#8217;à expérimenter ces nouveaux modes de paiement. Et si on manque d&#8217;imagination, il y des mises en scène sur le net:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="225">Mode de paiement</td>
<td valign="top" width="531">Mise en scène</td>
</tr>
<tr>
<td valign="top" width="225">Paiement sans contact (01 net)</td>
<td valign="top" width="531">https://www.youtube.com/watch?v=0t8Gksf3_I8</td>
</tr>
<tr>
<td valign="top" width="225">Paiement par mobile (BPCE)</td>
<td valign="top" width="531">https://www.youtube.com/watch?v=k9CThqQUJcw</td>
</tr>
</tbody>
</table>
<p><strong><em>Références</em></strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="225">Document, Sujet</td>
<td valign="top" width="531">Lien, contenu</td>
</tr>
<tr>
<td valign="top" width="225">Università Ca Foscari, payment systems, Maurizio Marek</td>
<td valign="top" width="531">http://www.dsi.unive.it/~marek/files/09.5%20-%20payment%20systems.pdf</td>
</tr>
<tr>
<td valign="top" width="225"></td>
<td valign="top" width="531"></td>
</tr>
<tr>
<td valign="top" width="225">SCS , SEPA card scheme (books of the 7th version)</td>
<td valign="top" width="531">http://www.europeanpaymentscouncil.eu/content.cfm?page=sepa_vision_for_cards</td>
</tr>
<tr>
<td valign="top" width="225">EMV (Europay, Visa, Mastercard)</td>
<td valign="top" width="531">Wikipedia en anglais et en Francais</td>
</tr>
<tr>
<td valign="top" width="225">Introduction to EMV specifications</td>
<td valign="top" width="531">https://www.emvco.com/best_practices.aspx?id=217</td>
</tr>
<tr>
<td valign="top" width="225">Groupe de travail sur l’examen du système de paiement : le marché des cartes de crédit et de débit</td>
<td valign="top" width="531">http://paymentsystemreview.ca/index.php/rapports/a-propos-du-dialogue-nos-documents-de-discussion/les-marches-des-cartes-de-credit-et-de-debit/indexe68f.html?lang=fr</td>
</tr>
<tr>
<td valign="top" width="225">http://www.cartes-bancaires.com/</td>
<td valign="top" width="531">http://www.cartes-bancaires.com/</td>
</tr>
<tr>
<td valign="top" width="225">Wikipedia on card payment topics</td>
<td valign="top" width="531"><strong>Major cards :     </strong>American Express, MasterCard, Debit MasterCard, Maestro, Visa, Visa Debit, Visa Electron<strong>Regional and specialty cards:</strong>   Carte Bleue, Electronic Payment Services (EPS)<strong>Accounts :</strong>          Bank card number,Card enclosure,Credit card balance transfer,Credit limit,Revolving account,Deposit account,Current/Checking account,Savings account<strong>Debt :</strong>   Cash advance, Charge-off, Maxed out, Interest, Grace period, Introductory rate, Universal default<strong>Payment :</strong>Card not present transaction, Chargeback, Controlled payment number, Dispute<strong>Fees:</strong>Interchange fee ,Interchange fee, Surcharge<strong>Security :</strong>Card security code,Chargeback fraud,Credit card fraud,Credit card hijacking,Enculturation<strong>Technology :</strong>Automated teller machine,Contactless payment,Credit card terminal,EMV,Interbank network,Magnetic stripe card,Smart card</td>
</tr>
<tr>
<td valign="top" width="225">Autres sujets (Wikipedia)</td>
<td valign="top" width="531">Payment card industryPayments as a platformList of online payment service providersPayment service providerelectronic commerceMobile TicketingMobile BankingMobile commerce service providerMobile dial codeMobile PaymentsLa monétiqueLa billettiqueLa carte téléphoniqueLe prépaiementLa carte cadeau dématérialisée (ou e-gift)Le DCC (Dynamic Currency Conversion)Le PME (Porte-Monnaie Electronique)Le paiement par téléphone mobileLe marketing monétique</p>
<p>Le paiement sans contact (NFC)</td>
</tr>
<tr>
<td valign="top" width="225">Sur e-RSB</td>
<td valign="top" width="531">http://www.cartes-bancaires.com/cbmag/fr/26/actu/actu.htm</td>
</tr>
<tr>
<td rowspan="3" valign="top" width="225">Sur STET-CORE</td>
<td valign="top" width="531"><a href="https://www.banque-france.fr/eurosysteme-et-international/sepa/systeme-de-paiement-de-masse.html">https://www.banque-france.fr/eurosysteme-et-international/sepa/systeme-de-paiement-de-masse.html</a></td>
</tr>
<tr>
<td valign="top" width="531">http://www.stet.eu</td>
</tr>
<tr>
<td valign="top" width="531">http://fr.wikipedia.org/wiki/Syst%C3%A8me_STET-CORE</td>
</tr>
</tbody>
</table>
<p>&#8211;&gt;</p><p>The post <a href="https://blog.infine.com/les-paiements-par-carte-2954">Les paiements par carte</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/les-paiements-par-carte-2954/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Introduction aux accords de Bâle I, II et III</title>
		<link>https://blog.infine.com/introduction-aux-accords-de-bale-i-ii-et-iii-2927?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introduction-aux-accords-de-bale-i-ii-et-iii</link>
					<comments>https://blog.infine.com/introduction-aux-accords-de-bale-i-ii-et-iii-2927#respond</comments>
		
		<dc:creator><![CDATA[fabrice]]></dc:creator>
		<pubDate>Fri, 29 Mar 2019 18:26:47 +0000</pubDate>
				<category><![CDATA[Finance]]></category>
		<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=2927</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">11</span> <span class="rt-label rt-postfix">min.</span></span> Bâle est une ville en Suisse  où se concentrent beaucoup d’horlogers. Elle abrite aussi le musée Tinguely, un artiste connu grâce à ses sculptures animées. La banque des règlements internationaux (BRI ou International Settlement Bank, ISB), la banque centrale de toutes les banques centrales,  y siège aussi.  Celle-ci héberge le comité de Bâle sur le &#8230;</p>
<p>The post <a href="https://blog.infine.com/introduction-aux-accords-de-bale-i-ii-et-iii-2927">Introduction aux accords de Bâle I, II et III</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">11</span> <span class="rt-label rt-postfix">min.</span></span></p>
<p style="text-align: justify;">Bâle est une ville en Suisse  où se concentrent beaucoup d’horlogers. Elle abrite aussi le musée Tinguely, un artiste connu grâce à ses sculptures animées. La banque des règlements internationaux (<strong>BRI</strong> ou International Settlement Bank, <strong>ISB</strong>), la banque centrale de toutes les banques centrales,  y siège aussi.  Celle-ci héberge le comité de Bâle sur le contrôle bancaire (Basel Committee on Banking Supervision, <strong>BCBS</strong>) .  Ce club des gouverneurs des banques centrales  se réunit quatre fois par an et mène des discussions autour du contrôle, de la surveillance et  de la règlementation des banques. Cherchons de comprendre le contexte économique conduisant aux trois différents accords de Bâle et comment la vie des  banques se synchronise à l’heure de l’application des  normes prudentielles émanant du comité de Bâle.</p>
<p><span id="more-2927"></span></p>
<h1>Accords de Bâle I</h1>
<p style="text-align: justify;">Pendant les années 80, le comité de Bâle a tablé sur l’établissement de normes internationales sur le capital minimum qu’une banque devait détenir afin de garantir sa stabilité. En  1987, le  « capital adequacy framework »  (accord de  Bâle I) est  proposé par le comité. Celui-ci est validé en l’espace de 2 ans par 150 pays et adapté au cadre juridique de chacun d’entre eux. Le comité  fixe des normes (guidelines) et celles-ci, une fois transposées dans les pays, par consensus, deviennent des &#8220;lois internationales&#8221;.</p>
<p style="text-align: justify;">Les banques peuvent investir comme bon leur semble mais il est important qu’elles ne fassent pas faillite et qu’elles ne prennent pas de risques excessifs.  Donc, la logique veut que plus la banque investit, plus elle doit avoir de capitaux propres.</p>
<p style="text-align: justify;">Les représentants des États-Unis et des états européens sont arrivé à un accord sur une formule du capital réglementaire, le ratio de Cooke. Ce capital  doit être supérieur ou égal à 8% des actifs pondérés. Par actif, il est sous-entendu crédit accordé aux clients.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/cooke.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2928" src="https://blog.infine.com/wp-content/uploads/2014/02/cooke.jpg" alt="" width="130" height="68" /></a></p>
<ul>
<li>RC est le capital réglementaire (regulatory capital)</li>
<li> A est l’actif (asset), ce sont des crédits.</li>
<li> w est la pondération (weight)</li>
</ul>
<p style="text-align: justify;">Au moment de la validation du texte, fin des années 80, les banques des deux côtés de l’Atlantique vivaient des contextes différents. En Europe, la plupart de banques appartenaient aux états et,  si elles étaient déficitaires, les états les renflouaient avec l’argent du contribuable.  Une vague de privatisation a commencé et les accords de Bâle I permettaient aux banques européennes de constituer « un capital privé ».  De leur côté, les banques américaines étaient déjà privatisées et capitalisées. Elles ont demandé l’introduction du tableau de  pondérations pour ne pas être désavantagées dans leurs affaires.</p>
<p>Les valeurs des pondérations  W des crédits sont les suivantes :</p>
<ul>
<li>0% pour les financements des pays OCDE (Argentine, Mexique) soumis à des crises régulières mais terrain d’investissement des banques américaines pendant les années 80</li>
<li>20% pour les pays à haut risque comme l’Irak ou l’Angola (non-OCDE)</li>
<li>50% pour les crédits immobiliers aux particuliers</li>
<li>100% pour tout autres types de crédits (entreprise, gouvernement, autres banques)</li>
</ul>
<p style="text-align: justify;">Il est important de noter qu’à ce stade les notions de risque et de pricing (valorisation des actifs) sont absentes. La valeur de l’actif est la valeur du crédit. C’est une valeur directe.  Le texte de Bâle I ne faisait que trente pages.  Les publications successives atteindront 350 pour Bâle II et 1000 pour Bâle III.</p>
<h1>Accords de Bâle II</h1>
<p style="text-align: justify;">De 1989 à 1993, les banques européennes cherchent du capital privé et sont, en conséquence, cotées en bourse. Le but de Bâle I est atteint. Dès 1996, le premier accord commence à dévoiler ses défaillances dans un contexte économique ayant muté.  Il y  a quatre défaillances :</p>
<ul>
<li>Les seuls acteurs financiers qui appliquent les accords sont les banques or il existe d’autres établissements de crédit. Une parade de contournement des accords de Bâle I  est la création  d’une division juridiquement indépendante comme par exemple un établissement de crédit-bail. L&#8217;arbitrage réglementaire se profile déjà.</li>
<li>Les banques, au lieu de donner des crédits directs,  demandent à leur clientèle entreprise d’émettre des obligations. Elles échappent donc à la règle du 8% de capitalisation. De même, les banques peuvent investirent dans des dérivés pour lesquels les règles n’existent pas encore.</li>
<li>La formule de Cooke ne tient pas compte du risque des collatéraux.</li>
<li>La formule de Cooke ne considère pas la qualité de la contrepartie : bon payeur ou mauvais payeur.</li>
</ul>
<p style="text-align: justify;">En 2007, les accords de Bâle II en sont à une cinquième version et deviennent une loi applicable à tous les pays membres du BRI. En voici les conséquences.</p>
<ul>
<li>Le nouvel accord est appliqué à n’importe quel intermédiaire financier qui gère le risque de crédit : banque, leasing , factoring, crédit à la consommation, participation dans un établissement financier…</li>
<li>On ajoute toute activité qui contient un risque de crédit : obligations, actions, dérivés, opérations de change. Les banques dont le fond de commerce est la «  corporate finance » et les marchés des capitaux sont sous pression pour augmenter leur capital réglementaire.  Parmi les stratégies de recapitalisation, les établissements peuvent choisir de faire appel au capital des actionnaires, ouvrir le capital à d’autres actionnaires, vendre des actifs, titriser des crédits, voire, acheter une banque qui a beaucoup de fonds propres.</li>
<li> W (la pondération dans la formule de Cooke) devient fonction du type de collatéral et du crédit associé à celui-ci. Si avec les accords de Bâle I, le capital réglementaire pouvait être considéré comme un coût fixe, avec Bâle II, il devient un coût variable. La valorisation (le pricing) est aussi une variable dépendante du type de client (client fiable ou mauvais payeur). La gestion du risque devient une compétence très recherchée.</li>
</ul>
<p style="text-align: justify;">Bâle II se structure en 3 piliers : l&#8217;exigence de fonds propres, la procédure de surveillance de la gestion des fonds propres et la discipline de marché. La documentation disponible consacre plus son attention sur le premier d&#8217;entre eux.</p>
<p style="text-align: justify;"><strong>Le premier pilier</strong>, l&#8217;exigence de fonds propres, se base principalement sur le risque de crédit. Celui-ci a deux composantes. D’abord le risque de contrepartie (default risk). Ce risque est l’éventualité de ne plus être payé par son débiteur. La deuxième composante est le risque de recouvrement (recovery risk) qui mesure l’éventualité ou pas de récupérer une partie du capital prêté à la contrepartie défaillante.  Plus une banque se protège avec des instruments facilitant le recouvrement (collatéral), plus elle peut assumer  des profils de clients risqués. Le risque de contrepartie se déclenche dès lors qu’il y a un retard de 90 jours dans un paiement. Si le taux de rotation des créances client et des dettes fournisseurs est supérieur à 90 jours, les entreprises devront donc les raccourcir.</p>
<p style="text-align: justify;">Indépendamment de la maturité du prêt ou de l’instrument, le risque de crédit (probability of default, PD) est calculé à un an puis il est recalculé chaque année. Les banques devront connaitre quatre variables (LGD, EAD, MVC et RR) pour chaque client et pour chaque opération de chaque client.  Les impacts sur l’organisation et les systèmes d’information sont évidents.</p>
<p>LGD (loss given default) mesure le risque de recouvrement:</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/LGD.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2929" src="https://blog.infine.com/wp-content/uploads/2014/02/LGD.jpg" alt="" width="303" height="54" srcset="https://blog.infine.com/wp-content/uploads/2014/02/LGD.jpg 303w, https://blog.infine.com/wp-content/uploads/2014/02/LGD-300x53.jpg 300w" sizes="(max-width: 303px) 100vw, 303px" /></a></p>
<ul>
<li>EAD (exposure at default) est l’exposition au défaut, soit l’actif de la transaction</li>
<li>MVC (market value of collateral) est la valeur de marché du collatéral</li>
<li>RR (recovery rate) est le taux de recouvrement</li>
</ul>
<p>Le ratio de Cooke pour le calcul du capital réglementaire devient le ratio de McDonough où  RWA signifie  risk weighted asset (Ai.Wi).  Les RWA,  ,  du ratio de Cooke sont comptabilisés pour 3 types de risques différents  Wi(crédit), Wj (marché) et  Wk (opérationnel) .</p>
<p style="text-align: center;"><a href="https://blog.infine.com/wp-content/uploads/2014/02/mcdonough.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2930" src="https://blog.infine.com/wp-content/uploads/2014/02/mcdonough.jpg" alt="" width="461" height="37" srcset="https://blog.infine.com/wp-content/uploads/2014/02/mcdonough.jpg 461w, https://blog.infine.com/wp-content/uploads/2014/02/mcdonough-300x24.jpg 300w" sizes="(max-width: 461px) 100vw, 461px" /></a>RWA = f(PD;LGD) x EAD où f respecte une loi normale</p>
<p style="text-align: center;">Expected Loss = EL = PDxLGDxEAD</p>
<p style="text-align: justify;">Le <strong>risque de crédit</strong> peut être calculé suivant trois méthodes: une approche standard, IRB (Internal Rating-Based Approach), IRB avancée . Le <strong>risque de marché</strong> peut être calculé avec la méthode VaR (value at risk). Le<strong> risque opérationnel</strong> peut être calculé avec trois méthodes: BIA (basic indicator approach) , STA (standardized approach) et AMA (advanced measurement approach).</p>
<p style="text-align: justify;"><strong>RC</strong> est divisé en trois couches (tier en anglais). Tier 1 est l&#8217;ensemble de les capitaux propres de la banque (equity, les parts de actionnaires et les réserves). Tier 2 est du capital supplémentaire incluant par exemple des provisions. Tier 3 est la composante requise pour faire face au risque de marché.</p>
<p style="text-align: justify;">Le <strong>deuxième pilier</strong> est la procédure de surveillance de la gestion des fonds propres au cours de laquelle les banques doivent être capables de prouver l’origine et la validité des calculs du ratio de McDonough. C’est le back testing.  En cas de crise d’un secteur de l’économie, les banque devront prouver que leurs capitaux réglementaires leur permettent de résister aux conditions défavorables.</p>
<p style="text-align: justify;">Le t<strong>roisième pilier</strong>, la discipline de marché , est la mise à disposition  publique d&#8217;informations sur l&#8217;actif, les risques et leur gestion. C&#8217;est de l&#8217;information disponible pour les investisseurs avertis.</p>
<p style="text-align: justify;">Après la crise de 2008, en 2009 le comité de Bâle s’est réuni afin de retoucher certains fondements de Bâle II. La nouvelle mouture a été nommée <strong>Bâle 2.5</strong>. Bâle 2.5 s’est appliqué principalement en Europe à partir de 2011 via la transposition de normes en lois votées par le parlement.  Elles sont connues sous le nom de CRD2 et CRD3 (CRD : capital requirement directive). Les améliorations impactent les risques sur les titrisations et les instruments financiers complexes. Les capitaux hybrides sont diminués dans la constitution de la couche « Tier 1 » du capital réglementaire.  Aussi, dans le domaine des risques de marché, les pondérations sont modifiées.</p>
<h1>Bâle III</h1>
<p style="text-align: justify;">Bâle II se focalise principalement sur le niveau de capital que les prêteurs d’argent devaient avoir.  Les prêts ont un risque et constituer une réserve permet en principe de faire face à des crises. Bâle III augmente le niveau de ce capital de réserve de base de 2,5% à 7%. En plus de la réforme sur la qualité du niveau de capital requis, Bâle III introduit deux autres axes d’améliorations.</p>
<p style="text-align: justify;">Le premier axe est un effort de <strong>réduction de la taille du bilan</strong> via une limite sur le volume d’activité en fonction du volume des capitaux propres. Ainsi le <strong>ratio sur l’effet de levier</strong> (leverage ratio)  contrôle la taille du bilan.</p>
<p style="text-align: justify;">Le second axe est la <strong>règle sur la liquidité</strong>. Les coffres d’une banque se remplissent au passif  du bilan avec les dépôts des clients et se vident à l’actif du bilan avec les crédits accordés aux clients. Avec le temps, les intérêts sur les crédits reviennent au passif sous forme d’encaissements. Bâle III soumet les banques à des simulations de scénarios de stress de 30 jours et d’un an au cours desquels la possibilité de se refinancer dans le marché interbancaire et de recevoir les intérêts est interrompue.</p>
<p style="text-align: justify;">Quel est l’impact sur le fonctionnement des banques ? La règle sur la liquidité impacte  le  ROE (return on équity). En effet, le ROE diminue puisqu’il est défini comme le résultat net sur le capital disponible. Au numérateur, le résultat net diminue et au dénominateur le capital augmente.  Ceci pousse les banques à chercher ou à retenir plus de liquidité. En conséquence, les activités de cash management et de factoring deviennent complémentaires aux activités  « traditionnelles » de dépôt et de prêt. Plus la relation avec un client est « intime », plus les capitaux resteront au sein de la banque. Autrement dit, si un client regroupe ses activités de cash management avec une banque, au final, les opérations ne seront que du book to book et le besoin en liquidité sera moindre car la liquidité est retenu et ne part pas vers d’autres banques.</p>
<h2>La constitution des capitaux réglementaires</h2>
<p>La Figure 1 montre l&#8217;évolution des capitaux réglementaires entre Bâle II et Bâle III.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/modifRegCap.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2935" src="https://blog.infine.com/wp-content/uploads/2014/02/modifRegCap.jpg" alt="" width="609" height="433" srcset="https://blog.infine.com/wp-content/uploads/2014/02/modifRegCap.jpg 609w, https://blog.infine.com/wp-content/uploads/2014/02/modifRegCap-300x213.jpg 300w" sizes="(max-width: 609px) 100vw, 609px" /></a></p>
<p align="center">Figure : la recomposition des parts du capital réglementaire entre Bâle II et III</p>
<p style="text-align: justify;">Le <strong>Common Equity Tier 1 (CET1)</strong> est composé de fonds propres (titres émis par la banque conservés sur le long terme), bénéfices non-répartis (retained earnings) et de réserves. Il sera augmenté progressivement  sur plusieurs années (voir calendrier plus bas).</p>
<p style="text-align: justify;">La part « <strong>conservation buffer</strong> »  doit être mise de côté pour faire face à des périodes de récession. Les banques qui ne le constituent pas ne pourront pas distribuer des dividendes ou des bonus.</p>
<p style="text-align: justify;">La <strong>part contrecyclique</strong> (coutercyclical buffer) fait partie de la part « conservation buffer » et sera garni suivant la législation de chaque pays. Par contre-cycle, il est entendu qu&#8217;en période de &#8220;boom&#8221;, quand les crédits s&#8217;accordent facilement, les banques épargnent. En période de récession, alors que la liquidité s&#8217;assèche, la part contrecyclique est utilisée pour accorder des crédits.</p>
<p style="text-align: justify;"><strong>La part Tier 2 </strong>est composée de   réserves inattendues (undisclosed reserves, revaluation reserves), de  provisions générales, d’ instruments hybrides (ie : Ce type d’instrument a des caractéristiques de dette et de fond propre. Il  exige un décaissement sous forme de coupon et s’intègre après aux fonds propres. Les obligations convertibles en actions à maturité en sont un cas) et d’actions préférentielles (preferred stock).</p>
<p>La <strong>part tier 3</strong> disparait dans les accords de Bâle III.</p>
<p style="text-align: justify;">Ici le leitmotiv est &#8220;amasser de l&#8217;argent de réserve en cas de coup dur&#8221;. Certaines banques voient leur rentabilité menacée. Certains analystes prédisent le retrait des banques de certains pans d&#8217;activités, l&#8217;octroi de plus en plus difficile de crédits ou le basculement vers le shadow banking comme solution de repli vers une rentabilité majeure.</p>
<h2>Modification du calcul des risques</h2>
<p>La figure ci-après montre les changements dans le calcul des risques entre Bâle II, Bâle 2.5 et Bâle III.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/risquesB3.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2934" src="https://blog.infine.com/wp-content/uploads/2014/02/risquesB3.jpg" alt="" width="730" height="515" srcset="https://blog.infine.com/wp-content/uploads/2014/02/risquesB3.jpg 730w, https://blog.infine.com/wp-content/uploads/2014/02/risquesB3-300x211.jpg 300w" sizes="(max-width: 730px) 100vw, 730px" /></a></p>
<p align="center">Figure : Modification du calcul des risques (source : Moodyesanalytics)</p>
<ul>
<li>Le CVA (credit valuation adjustment) est maintenant calculé. C&#8217;est le rajout des pertes potentielles en cas de défaut de la contrepartie.  Avant la valorisation des portefeuilles ne prenait compte que de l’évolution des marchés (risk free-portfolio).</li>
<li>Les produits dérivés et les pensions livrées (repurchase agreements) sont échangés via une chambre de compensation.</li>
<li> WWR (wrong way risk) est maintenant inclu. WWR est la  présence d’une forte  corrélation entre l’exposition et le risque de défaut. Si le montant de la perte augmente  (exposition) de pair avec la probabilité de défaut, le WWR se manifeste.</li>
</ul>
<h2>LCR Liquidity Coverage Ratio</h2>
<p style="text-align: justify;">Le LCR couvre la notion de « stress test » pendant 30 jours.  Ce ratio à calculer régulièrement montre que la banque est prête à tout moment à affronter une crise de liquidité pendant un mois.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/LCR.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2938" src="https://blog.infine.com/wp-content/uploads/2014/02/LCR.jpg" alt="" width="427" height="60" srcset="https://blog.infine.com/wp-content/uploads/2014/02/LCR.jpg 427w, https://blog.infine.com/wp-content/uploads/2014/02/LCR-300x42.jpg 300w" sizes="(max-width: 427px) 100vw, 427px" /></a></p>
<ul>
<li><strong>Stock d’actifs liquides</strong> : réserves auprès des banques centrales, titres commercialisables sur le marché et faisant partie du Tier 1.  Seulement 40% peut être représenté par le Tier 2.</li>
<li>Le <strong>net total des décaissements</strong> est  le total des décaissements moins le total des encaissements en situation de stress pendant 30 jours.  Les décaissements augmentent.   Le retrait des dépôts et l’évaporation d’autres éléments du passif sont simulés avec des pondérations par type de client. Les encaissements  diminuent. Les cash-flows habituellement positifs comme les commissions et les paiements d’intérêts diminuent pendant la période de stress.</li>
</ul>
<h2>NSFR  Net Stable Funding Ratio</h2>
<p>Le respect de ce ratio permet à la banque de résister à une crise de liquidité qui se prolongerait pendant un an.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/NSFR.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2939" src="https://blog.infine.com/wp-content/uploads/2014/02/NSFR.jpg" alt="" width="442" height="64" srcset="https://blog.infine.com/wp-content/uploads/2014/02/NSFR.jpg 442w, https://blog.infine.com/wp-content/uploads/2014/02/NSFR-300x43.jpg 300w" sizes="(max-width: 442px) 100vw, 442px" /></a></p>
<ul>
<li><strong>ASF</strong> est constitué par le Tier 1 comme les fonds propres, des dettes à long termes, des dépôts à terme. D’autres éléments peuvent être inclus mais diminués avec une pondération inférieure à 1.</li>
<li><strong>RSF</strong> est constitué par des éléments de l’actif  et des engagements hors bilan ayant des maturités supérieurs à un an. Suivant le type d’actif, il y a une pondération particulière .</li>
</ul>
<h2>Ratio de levier</h2>
<p>Ce ratio est calculé de sorte à éviter une croissance excessive du bilan. C’est un ratio qui ne se base pas sur des calculs de risques.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/LR.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2940" src="https://blog.infine.com/wp-content/uploads/2014/02/LR.jpg" alt="" width="221" height="54" /></a>Ce ratio est généralement respecté par les banques. Il oscille entre 10% et 40%.</p>
<h2>Calendrier</h2>
<p style="text-align: justify;">Le calendrier ci-dessous souligne l’application progressive des mesures prises par Bâle III. Bâle II n’a pas été appliqué par les banques américaines. En ce moment, les banques américaines se focalisent dans l’application du Dood-Franck Act. Cependant, elles se conformeront à Bâle III. Le chantier d’application sera plus complexe pour les banques américaines que pour les européennes.</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/02/calendar.jpg" class="fancyboxgroup" rel="gallery-2927"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2933" src="https://blog.infine.com/wp-content/uploads/2014/02/calendar.jpg" alt="" width="727" height="548" srcset="https://blog.infine.com/wp-content/uploads/2014/02/calendar.jpg 727w, https://blog.infine.com/wp-content/uploads/2014/02/calendar-300x226.jpg 300w" sizes="(max-width: 727px) 100vw, 727px" /></a></p>
<p align="center">Figure: calendrier de Bâle III</p>
<h1>Conclusion</h1>
<p style="text-align: justify;">Les accords de Bâle I ont renforcé la constitution du capital réglementaire (CR). Bâle II a introduit 3 piliers. Les risques de crédit, de marché et opérationnels sont pris en compte dans les calculs du CR. A ce premier pilier s’ en ajoutent deux autres, à savoir, les procédures de surveillance et la discipline de marché.  Bâle 2.5 a incorporé des mesures contre les défaillances dévoilées par les évènements de la crise de 2008. Les risques de la titrisation et les expositions sur le trading book devaient être prise en compte. Bâle III  améliore les 3 piliers existants et rajoute des mesures sur la liquidité.  Le comité de Bâle se réunit régulièrement. Les discussions récentes abordent le shadow banking , ce système bancaire parallèle basé sur le crédit financé par des activités de marché et échappant aux normes prudentielles des accords Bâle.  C’est une source de financement alternative mais aussi un mécanisme par où les banques peuvent s’adonner à l’arbitrage réglementaire et diminuer les effets voulus par les accords de Bâle.</p>
<p><strong><em>références</em></strong></p>
<table style="height: 1088px;" border="1" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr style="height: 30px;">
<td style="height: 30px; width: 143px;" valign="top">Source</td>
<td style="height: 30px; width: 423px;" valign="top">liens</td>
</tr>
<tr style="height: 170px;">
<td style="height: 170px; width: 143px;" valign="top">Università di Bocconi,Corporate and Investment Banking 05/23 (accordo di Basilea I)</td>
<td style="height: 170px; width: 423px;" valign="top"><a href="https://www.youtube.com/watch?v=LGDrOR3cJrg">https://www.youtube.com/watch?v=LGDrOR3cJrg</a></td>
</tr>
<tr style="height: 170px;">
<td style="height: 170px; width: 143px;" valign="top">Università di Bocconi,Corporate and Investment Banking 06/23 (accordo di Basilea II)</td>
<td style="height: 170px; width: 423px;" valign="top"><a href="https://www.youtube.com/watch?v=WMv2qZoJ4oI">https://www.youtube.com/watch?v=WMv2qZoJ4oI</a></td>
</tr>
<tr style="height: 86px;">
<td style="height: 86px; width: 143px;" valign="top">Basel III verständlich erklärt</td>
<td style="height: 86px; width: 423px;" valign="top"><a href="https://www.youtube.com/watch?v=8zEu3PkvOOg">https://www.youtube.com/watch?v=8zEu3PkvOOg</a></td>
</tr>
<tr style="height: 58px;">
<td style="height: 58px; width: 143px;" valign="top">Basel III (BNP Paribas)</td>
<td style="height: 58px; width: 423px;" valign="top"><a href="https://www.youtube.com/watch?v=CVsjFVEZnCE">https://www.youtube.com/watch?v=CVsjFVEZnCE</a>&amp;l<em>ist</em></td>
</tr>
<tr style="height: 58px;">
<td style="height: 58px; width: 143px;" valign="top">WIkipedia</td>
<td style="height: 58px; width: 423px;" valign="top">Versions françaises et anglaises sur les accords de Bâle, la ville de Bâle, Bâle I, Bâle II, Bâle III, la banque des règlements internationaux, conseil de stabilité financière</td>
</tr>
<tr style="height: 58px;">
<td style="height: 58px; width: 143px;" valign="top">Fimarkets : shadow banking</td>
<td style="height: 58px; width: 423px;" valign="top"><a href="http://www.fimarkets.com/pages/shadow_banking.php">http://www.fimarkets.com/pages/shadow_banking.php</a></td>
</tr>
<tr style="height: 170px;">
<td style="height: 170px; width: 143px;" valign="top">THE CREDIT MELTDOWN AND THE SHADOW BANKING SYSTEM: WHAT BASEL III MISSED</td>
<td style="height: 170px; width: 423px;" valign="top"><a href="http://www.webofdebt.com/articles/basel3_fail.php">http://www.webofdebt.com/articles/basel3_fail.php</a></td>
</tr>
<tr style="height: 114px;">
<td style="height: 114px; width: 143px;" valign="top">Basel III: Stronger Banks and a More Resilient Financial System</td>
<td style="height: 114px; width: 423px;" valign="top"><a href="http://www.bis.org/speeches/sp110406.pdf" target="_blank" rel="noopener noreferrer">http://www.bis.org/speeches/sp110406.pdf</a></td>
</tr>
<tr style="height: 58px;">
<td style="height: 58px; width: 143px;" valign="top">Bâle I (texte de la BRI)</td>
<td style="height: 58px; width: 423px;" valign="top"><a href="https://www.bis.org/publ/bcbs04a.pdf">https://www.bis.org/publ/bcbs04a.pdf</a></td>
</tr>
<tr style="height: 58px;">
<td style="height: 58px; width: 143px;" valign="top">Bâle II (texte de la BRI)</td>
<td style="height: 58px; width: 423px;" valign="top"><a href="https://www.bis.org/publ/bcbs128.pdf">https://www.bis.org/publ/bcbs128.pdf</a></td>
</tr>
</tbody>
</table><p>The post <a href="https://blog.infine.com/introduction-aux-accords-de-bale-i-ii-et-iii-2927">Introduction aux accords de Bâle I, II et III</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/introduction-aux-accords-de-bale-i-ii-et-iii-2927/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SEPAMAIL</title>
		<link>https://blog.infine.com/sepamail-3058?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sepamail</link>
					<comments>https://blog.infine.com/sepamail-3058#respond</comments>
		
		<dc:creator><![CDATA[fabrice]]></dc:creator>
		<pubDate>Tue, 22 Apr 2014 13:44:07 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=3058</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">10</span> <span class="rt-label rt-postfix">min.</span></span> Imaginé par le groupe BPCE, la société « SEPAmail.eu » réunit cinq grands groupes bancaires Français dans un projet visant la simplification des échanges entre banques, entreprise et grand public d’une manière rapide, sécurisée,  dématérialisée et à coût réduit. SEPAmail est un réseau interbancaire sécurisé de messagerie privée. Il permet d’échanger des messages identifiés par BIC et &#8230;</p>
<p>The post <a href="https://blog.infine.com/sepamail-3058">SEPAMAIL</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">10</span> <span class="rt-label rt-postfix">min.</span></span>Imaginé par le groupe BPCE, la société « SEPAmail.eu » réunit cinq grands groupes bancaires Français dans un projet visant la simplification des échanges entre banques, entreprise et grand public d’une manière rapide, sécurisée,  dématérialisée et à coût réduit. SEPAmail est un réseau interbancaire sécurisé de messagerie privée. Il permet d’échanger des messages identifiés par BIC et IBAN et de numériser des documents (avis, factures, mandats, etc…). SEPAmail se greffe aux applications bancaires (banque en ligne, mobile en ligne, automates, plates-formes EDI bancaires) et lie un ensemble d’informations aux données de règlement dans un même écosystème. Les adhérents de SEPAmail deviennent ainsi des fournisseurs d&#8217;accès  au réseau sécurisé et aux applications bâties sur celui-ci.  C’est un socle technique d’échanges au-dessus duquel se développent des services à valeur ajoutée.</p>
<h1>Notions de base et principes</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/SEPAMAIL.jpg" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3059" src="https://blog.infine.com/wp-content/uploads/2014/04/SEPAMAIL.jpg" alt="" width="674" height="420" srcset="https://blog.infine.com/wp-content/uploads/2014/04/SEPAMAIL.jpg 674w, https://blog.infine.com/wp-content/uploads/2014/04/SEPAMAIL-300x186.jpg 300w" sizes="(max-width: 674px) 100vw, 674px" /></a></p>
<ul>
<li>Messagerie au minimum 4 coins, 2 utilisateurs, 2 adhérents, couverts par au moins trois contrats</li>
<li>Echanges de dialogues structurés formalisés au sein d&#8217;applications, qui, lorsqu&#8217;elles sont éditées par la norme, ont une portée globale (à tous les adhérents)</li>
<li>Mise  en œuvre un procédé d’accusé de réception systématique (l&#8217;acquittement) qui est garanti par les adhérents. Cet accusé de réception induit l&#8217;authentification des adhérents et l&#8217;intégrité des messages échangés</li>
<li>Garantie de l&#8217;authentification des personnes physiques liés à un identifiant (le qxban). Le transcodage entre un IBAN et un QXBAN est toujours assuré par l&#8217;adhérent émetteur du QXBAN. L&#8217;IBAN est ainsi protégé dans le dialogue entre les utilisateurs, même lorsque un message articule un paiement</li>
<li>Proposition de services à valeur ajoutée : enrichissement du flux, vérification, articulation d&#8217;un paiement (le rôle des établissements de paiement est un plus pour l&#8217;utilisateur)</li>
<li>Garantie du respect de règles communes. Il ya une charte des adhérents et un cadre juridique édicté par la banque de France</li>
<li>Transport par les messages de l’information permettant de réaliser l&#8217;action suivante</li>
<li>Utilisation et accès à     SEPAmail par divers  canaux d&#8217;échange de l&#8217;information entre un adhérent et son client, l&#8217;utilisateur et notamment le moyen de l&#8217;authentification de l&#8217;utilisateur par l&#8217;adhérent</li>
<li>Fonctionnement en mode canonique avec les infrastructures et les protocoles de messageries électroniques standards. SEPAmail est une messagerie sur internet, le mode d&#8217;échange canonique est donc celui de la messagerie électronique, c&#8217;est à dire le mécanisme d&#8217;échange proposé par le protocole SMTP.</li>
</ul>
<h1>Les services à valeur ajoutée ou les pierres précieuses</h1>
<h2>Rubis</h2>
<p><strong>RUBIS :</strong> Règlement Universel Bancaire Immédiat &amp; SEPA (application SEPAmail)</p>
<p>L&#8217;application permet de gérer des demandes de règlement, et peut aussi permettre d&#8217;initier des paiements correspondant à ces demandes.</p>
<p>La circulation des flux se fait en respectant le modèle 4 coins : créancier, banque du créancier, banque du débiteur, débiteur.</p>
<ol start="1">
<li>Envoi de la demande de paiement comportant
<ul>
<li>Les références de la demande de règlement, qui serviront de références pour le virement (libellé, end2end, ultimate, sur la base des champs du virement SEPA)</li>
<li>Le montant</li>
<li>Le compte du créancier à créditer</li>
<li>D’éventuelles informations complémentaires sur la livraison des biens ou la mise à disposition du service</li>
</ul>
</li>
<li>Acceptation par le débiteur en donnant un ordre de règlement à sa banque</li>
<li>Génération d’un message de retour en confirmant l’acceptation par le donneur d’ordre (débiteur)</li>
<li>virement de fonds réalisé par la banque du débiteur vers la banque du créancier</li>
<li>Réception des fonds</li>
<li>Contrôle et dénotage du virement, de la confirmation de règlement vis-à-vis de la demande de règlement émise par le créancier</li>
</ol>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/450px-RUBISSchemaFlux.png" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3060" src="https://blog.infine.com/wp-content/uploads/2014/04/450px-RUBISSchemaFlux.png" alt="" width="450" height="266" srcset="https://blog.infine.com/wp-content/uploads/2014/04/450px-RUBISSchemaFlux.png 450w, https://blog.infine.com/wp-content/uploads/2014/04/450px-RUBISSchemaFlux-300x177.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></a></p>
<h2>Gemme</h2>
<p><strong>GEMME :</strong>  Global European Mandate Management &amp; Exchange (Application SEPAmail)</p>
<p>L&#8217;application permet d&#8217;initier des mandats de prélèvements ainsi que tous les flux autour du prélèvement : pré-notification des échéances, acceptation ou refus d&#8217;échéance, acceptation ou refus de l&#8217;autorisation de mandat de prélèvement, demande de copie.</p>
<p>Sur ce concept les interactions initiales peuvent se représenter sur le schéma suivant :</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/GEMME.jpg" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3062" src="https://blog.infine.com/wp-content/uploads/2014/04/GEMME.jpg" alt="" width="474" height="313" srcset="https://blog.infine.com/wp-content/uploads/2014/04/GEMME.jpg 474w, https://blog.infine.com/wp-content/uploads/2014/04/GEMME-300x198.jpg 300w" sizes="(max-width: 474px) 100vw, 474px" /></a></p>
<ol start="1">
<li>le flux commercial entre le client et le créancier se conclut par un accord sur le bien ou le service, le mode de paiement par prélèvement et l&#8217;échange de l&#8217;IBAN</li>
<li>le créancier formate un mandat avec le numéro et tous les élements constitutifs dont l&#8217;IBAN et donne le tout à sa banque</li>
<li>celle-ci le route vers la banque du débiteur <em>facilement avec SEPAmail car elle connait l&#8217;IBAN</em></li>
<li>cette dernière met le mandat à disposition du client-débiteur dans la banque à distance ou tout autre canal de son choix (choix de la banque du débiteur). Le débiteur peut donc valider, avec les moyens d’authentification proposés par la banque, le mandat. Le routage vers la banque du créancier puis vers le créancier complétera le processus.</li>
<li>le créancier peut envoyer les notifications d&#8217;échéances sous un format électronique : l&#8217;adresse de son client reste l&#8217;IBAN ; le débiteur peut recevoir directement, par sa banque à distance ou tout autre canal mis à disposition par sa banque, les notifications et y répondre rapidement en cas de désaccord</li>
<li>un message complémentaire de <a title="Standards:IG Gemme RequestForCopy" href="http://documentation.sepamail.eu/wiki/Standards:IG_Gemme_RequestForCopy"><em>“Demande de Copie”</em></a> permet de compléter le dispositif. En effet si un client réclame car il indique ne pas avoir signé de mandat pour un prélèvement, sa banque prend l&#8217;IBAN du créancier dans le prélèvement et est ainsi capable de formater un message de demande de copie vers la banque du créancier.</li>
</ol>
<h2>Diamond</h2>
<p>DIAMOND : Direct Identity control for Account Management ON Demand.</p>
<p>L&#8217;application permet pour un utilisateur SEPAmail de fiabiliser un ou plusieurs identifiants de type IBAN</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestGlobalDIAMOND.png" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3063" src="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestGlobalDIAMOND.png" alt="" width="400" height="295" srcset="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestGlobalDIAMOND.png 400w, https://blog.infine.com/wp-content/uploads/2014/04/400px-TestGlobalDIAMOND-300x221.png 300w" sizes="(max-width: 400px) 100vw, 400px" /></a><a href="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonneMoraleDIAMOND.png" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3064" src="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonneMoraleDIAMOND.png" alt="" width="400" height="254" srcset="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonneMoraleDIAMOND.png 400w, https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonneMoraleDIAMOND-300x190.png 300w" sizes="(max-width: 400px) 100vw, 400px" /></a><a href="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonnePhysiqueDIAMOND.png" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3065" src="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonnePhysiqueDIAMOND.png" alt="" width="400" height="282" srcset="https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonnePhysiqueDIAMOND.png 400w, https://blog.infine.com/wp-content/uploads/2014/04/400px-TestPersonnePhysiqueDIAMOND-300x211.png 300w" sizes="(max-width: 400px) 100vw, 400px" /></a></p>
<h2>AGATE</h2>
<p><strong>AGATE :</strong> A Generic ATtachment Exchange</p>
<p>L&#8217;application permet d&#8217;envoyer un ou plusieurs courts messages de 140 caractères et une pièce jointe.</p>
<p>La séquence pour l&#8217;envoi d&#8217;un message générique :</p>
<ol start="1">
<li>l&#8217;émetteur transmet de 0 à n chaînes de caractères (encodage ISO) ainsi qu&#8217;un contenu indéfini pour la banque de l&#8217;émetteur</li>
<li>la banque de l&#8217;émetteur utilise message SEPAmail SendRequest</li>
<li>un accusé de réception du message est envoyé via un acquittement SEPAmail</li>
<li>la banque du destinataire transmet à son client le contenu du message via son interface avec le client sans traitement métier du message</li>
</ol>
<h2>IOLITE</h2>
<p><strong>IOLITE :</strong>  InvOincing LITE</p>
<p>L&#8217;application permet de transmettre à un partenaire commercial (client, fournisseur) une facture</p>
<p>Le cœur de cible de IOLITE est la dématérialisation de la facturation, notamment pour toutes les entités de taille moyenne et les cas d&#8217;<em>asymétrie</em> coûteuse entre les acteurs :</p>
<ul>
<li>des entreprises spécialistes de l&#8217;intermédiation sur le web transmettant une facture fournisseur et une facture de commission avant virement du solde ou demande de règlement du solde</li>
<li>des entreprises désirant transmettre à son client une structure agrégée et détaillée de facturation (facturation de fluide, au poids, au forfait)</li>
<li>des entreprises facturant à l&#8217;acte et cumulant la demande de règlement sur une période</li>
</ul>
<h2>JADE</h2>
<p><strong>JADE</strong><strong> :</strong> Jointed Additional Data &amp; Exchange</p>
<p>L&#8217;application permet d&#8217;initier un avis de virement en lui joignant un document explicatif, puis le virement, éventuellement en fonction de la réponse attendue.</p>
<p>Voici le diagramme de séquence type de cette application :</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJade1.png" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3066" src="https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJade1.png" alt="" width="450" height="263" srcset="https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJade1.png 450w, https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJade1-300x175.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></a></p>
<p>un diagrammede séquence type de JADE</p>
<p>On y trouve les acteurs :</p>
<ul>
<li>celui qui initie le virement : le donneur d&#8217;ordre</li>
<li>la banque du donneur d&#8217;ordre</li>
<li>celui qui reçoit le virement, le bénéficiaire</li>
<li>la banque du bénéficiaire</li>
</ul>
<p>Ce qui donne la séquence d&#8217;opérations suivante :</p>
<ul>
<li>1. la génération du justificatif de virement par le donneur d&#8217;ordre</li>
<li>2. la transmission du justificatif et de l&#8217;ordre de virement (il est possible d&#8217;utiliser un message SEPAmail JADE CreditTransferAdvise) du donneur d&#8217;ordre à sa banque</li>
<li>3. la génération du message d&#8217;avis de virement CreditTransferAdvise et sa transmission par la banque du donneur d&#8217;ordre à la banque du bénéficiaire. Ce message précise la date prévue du virement et si ce virement est conditionné à une réponse et quelle réponse</li>
<li>4. un accusé de réception de l&#8217;avis de virement est envoyé via un acquittement SEPAmail</li>
<li>5. l&#8217;avis de virement est distribué par la banque du bénéficiaire à son client</li>
</ul>
<p>Si le payé répond :</p>
<ul>
<li>6. le bénéficiaire répond avec son interface à sa banque</li>
<li>7. la banque du bénéficiaire transmet la réponse sous la forme d&#8217;un message CreditTransferReply</li>
<li>8. un accusé de réception de la réponse est envoyé via un acquittement SEPAmail</li>
<li>9. cette réponse est transmise par la banque du donneur d&#8217;ordre au donneur d&#8217;ordre</li>
</ul>
<p>Dans tous les cas :</p>
<ul>
<li>10. le virement est émis à date si les conditions de l&#8217;avis initial sont réunies</li>
</ul>
<h2>JASPE</h2>
<p><strong>JASPE</strong><strong> :</strong> Jointed Attached Signed PDF &amp; Exchange</p>
<p>L&#8217;application est orientée document. Elle permet à plusieurs acteurs de signer un document (format pdf) selon un parcours défini.</p>
<p>Voici le diagramme de séquence type de cette application pour un parcours simple de signature (un émetteur/signataire et un signataire) :</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJaspe.png" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3067" src="https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJaspe.png" alt="" width="450" height="338" srcset="https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJaspe.png 450w, https://blog.infine.com/wp-content/uploads/2014/04/450px-DiagrammeSequenceJaspe-300x225.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></a></p>
<p>un diagramme de séquence JASPE pour un parcours simple de signature</p>
<p>On y trouve les acteurs :</p>
<ul>
<li>l&#8217;émetteur du document et du parcours de signature qui peut éventuellement être lui même signataire du document</li>
<li>la banque de l&#8217;émetteur</li>
<li>le destinataire signataire du document</li>
<li>la banque de ce signataire</li>
</ul>
<p>Ce qui donne la séquence d&#8217;opérations suivante :</p>
<ul>
<li>1. l&#8217;émetteur génère le document au format PDF à signer, éventuellement avec le formulaire à remplir avant signature</li>
<li>2. l&#8217;émetteur transmet ce document ainsi qu&#8217;un parcours de signature à sa banque pour gestion de ce parcours de signature</li>
<li>3. la banque de l&#8217;émetteur vérifie le parcours et sa capacité à le traiter (traitement parallèles ou en série, nombre et niveaux des signataires)</li>
<li>4. la banque de l&#8217;émetteur transmet à la banque du signataire via un message SEPAmail SignatureRequest</li>
<li>5. un accusé de réception du message précédent est envoyé via un acquittement SEPAmail</li>
<li>6. la banque du signataire distribue le document à signer à son client</li>
<li>7. le client signe le document, en remplissant préalablement si besoin le formulaire inclus dans le document</li>
<li>8. la banque du signataire transmet à la banque de l&#8217;émetteur le document signé via un message SEPAmail SignatureReport</li>
<li>9. un accusé de réception du message précédent est envoyé via un acquittement SEPAmail</li>
<li>10. la banque de l&#8217;émetteur transmet une notification pour chaque retour à l&#8217;émetteur si celui-ci a demandé un suivi/pilotage</li>
<li>11. la banque de l&#8217;émetteur transmet le document final à l&#8217;émetteur</li>
</ul>
<p>Si cela est prévu</p>
<ul>
<li>12. la banque de l&#8217;émetteur transmet à la banque du signataire le document signé via un message SEPAmail SignatureCopy</li>
<li>13. un accusé de réception du message précédent est envoyé via un acquittement SEPAmail</li>
<li>14. la banque du signataire met à disposition de son client le document signé</li>
</ul>
<h2>SAPPHIRE</h2>
<p><strong>SAPPHIRE</strong><strong> :</strong> Security, Authentication, Privacy, Public Key Infrastructure, Highly Innovative, Interoperable, Reliable &amp; Exchange</p>
<p>SAPPHIRE spécifie les conditions d&#8217;une authentification d&#8217;un client avec sa banque avec la possibilité de signature et plusieurs niveaux dans la sécurisation de l&#8217;échange. C’est une proposition fonctionnelle d&#8217;authentification permettant la signature numérique.</p>
<p>Sapphire est un protocole permettant d&#8217;utiliser :</p>
<ul>
<li>un terminal électronique (pc, téléphone portable, tablette),</li>
<li>une interface applicative hors « banque à distance »,</li>
<li>le réseau internet</li>
<li>un dispositif cryptographique (matériel et éventuellement logiciel)</li>
</ul>
<p>pour :</p>
<ul>
<li>s&#8217;authentifier sur une prise SEPAmail,</li>
<li>signer électroniquement (plusieurs niveaux) des messages d&#8217;une famille SEPAmail pour l&#8217;envoyer sur le connecteur SEPAmail de sa banque</li>
<li>s&#8217;authentifier sur tout autre système de la banque ou un système partenaire</li>
</ul>
<p>Sapphire vise donc à implémenter une sécurisation maîtrisée du canal internet entre l&#8217;utilisateur et sa banque, avec des procédures d&#8217;enregistrement (enrollment) utilisant les canaux sécurisés existants.</p>
<p>L&#8217;espace de confiance entre un utilisateur et sa banque s&#8217;enrichit ainsi d&#8217;une prise d&#8217;authentification sécurisée utilisant :</p>
<ul>
<li>le réseau internet pour le transport</li>
<li>une application sur le terminal de l&#8217;utilisateur</li>
<li>un certificat permettant une authentification de l&#8217;utilisateur (authentification sapphire) puis des données envoyées selon le niveau de service demandé (signature électronique, signature électronique avancée, signature électronique qualifiée)</li>
</ul>
<h1>La messagerie</h1>
<p>Le système SEPAmail se compose :</p>
<ul>
<li>d’un réseau interbancaire sécurisé assurant le transport de messages structurés conformément aux normes partagées par les utilisateurs de SEPAmail. Le réseau SEPAmail se déploie par l’interconnexion entre serveurs conformes à la norme installés dans chaque établissement adhérent.</li>
<li>de services métiers à valeur ajoutée, supportés par le système SEPAmail au travers de l’utilisation d’une famille de messages structurés liés à chaque service métier mis en ligne sur ce réseau.</li>
</ul>
<p>SEPAmail décrit également les connecteurs permettant aux entreprises d&#8217;envoyer, de recevoir et de gérer des messages –- ou plus exactement, en termes SEPAmail, des missives – à travers diverses formes d&#8217;interfaces : courriel, Web service, et même échange de fichiers.</p>
<h2>Les espaces de confiance</h2>
<p>Pour assurer une parfaite sécurisation des échanges et des données, SEPAmail repose sur trois espaces de confiance complètement distincts et indépendants :</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/securite.jpg" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3068" src="https://blog.infine.com/wp-content/uploads/2014/04/securite.jpg" alt="" width="495" height="345" srcset="https://blog.infine.com/wp-content/uploads/2014/04/securite.jpg 495w, https://blog.infine.com/wp-content/uploads/2014/04/securite-300x209.jpg 300w" sizes="(max-width: 495px) 100vw, 495px" /></a></p>
<ul>
<li>L’espace expéditeur – banque de l’expéditeur, dont la sécurité repose sur les systèmes en place : banque à distance et authentification associée, remise de fichiers &#8230;</li>
<li>Le réseau interbancaire SEPAmail dont la sécurité repose sur :
<ul>
<li>Un nom de domaine unique géré par le « scheme-manager » et associant l’adresse BIC.sepamail.eu à la bonne adresse physique de routage de la banque possédant le BIC</li>
<li>Une déclaration au scheme-manager de la clé publique qui sera utilisée par S/MIME, déclaration faite en même temps que la fourniture de l’adresse IP de la banque</li>
</ul>
</li>
<li>L’espace banque du destinataire – destinataire, dont la sécurité repose également sur les systèmes en place : banque à distance et authentification associée, remise de fichiers, &#8230;</li>
<li>Il y a un certificat S/MIME de signature et un certificat S/MIME de chiffrement par BIC et par application SEPAmail.</li>
</ul>
<h2>La structuration du système</h2>
<p>L&#8217;élément de base pour les échanges d&#8217;informations, dans SEPAmail, est la missive. Quel que soit le canal d&#8217;échange, et quels que soient l&#8217;expéditeur et le destinataire, toutes les informations circulant dans le système sont systématiquement structurées en missives. Il existe quatre types de missives, qui seront décrites en détail par la suite :</p>
<ul>
<li>la missive nominale, qui sert d&#8217;acheminement à un message</li>
<li>la missive d&#8217;acquittement, élément essentiellement protocolaire qui permet notamment à l&#8217;expéditeur d&#8217;être sûr de la réception des informations transmises</li>
<li>la missive de service, permettant d&#8217;échanger des commandes et des réponses entre des éléments actifs du système. Elle ne peut pas être utilisée en interbancaire.</li>
<li>la missive d&#8217;interfaçage (SMAPI), permettant à l&#8217;éditeur d&#8217;une solution SEPAmail de donner accès à des fonctions internes de sa plate-forme. Elle ne peut être utilisée qu&#8217;en intrabancaire.</li>
</ul>
<p>La missive est sécurisée par des mécanismes de signature et de chiffrement. Elle peut être vue comme une enveloppe, dont le contenu peut être quelconque, mais n&#8217;est accessible qu&#8217;au destinataire. Dans la plupart des cas, et notamment dans le cas des missives nominales, le contenu d&#8217;une missive est un message SEPAmail. Le message contient des informations relatives au service mis en jeu, la nature de ces informations variant bien entendu selon le message. L&#8217;ensemble des éléments de SEPAmail, missives et messages, sont des structures XML. Tous les éléments sont décrits par des schémas XML précis, s&#8217;appuyant, dans la mesure du possible, sur la norme et le dictionnaire de données ISO 20022. Enfin, les missives sont échangées, entre les acteurs du système SEPAmail, par le biais d&#8217;un mécanisme d&#8217;échange. Trois mécanismes, qui sont détaillés par ailleurs, sont actuellement définis et implémentés dans le système :</p>
<ul>
<li>le courrier électronique</li>
<li>un web-service</li>
<li>un système d&#8217;échange de fichiers.</li>
</ul>
<p>Le schéma ci-dessous récapitule les éléments de structure du système SEPAmail:</p>
<p><a href="https://blog.infine.com/wp-content/uploads/2014/04/ESPACE-SEPAMAIL.jpg" class="fancyboxgroup" rel="gallery-3058"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3069" src="https://blog.infine.com/wp-content/uploads/2014/04/ESPACE-SEPAMAIL.jpg" alt="" width="421" height="301" srcset="https://blog.infine.com/wp-content/uploads/2014/04/ESPACE-SEPAMAIL.jpg 421w, https://blog.infine.com/wp-content/uploads/2014/04/ESPACE-SEPAMAIL-300x214.jpg 300w" sizes="(max-width: 421px) 100vw, 421px" /></a></p>
<h2>Rappel S/MIME</h2>
<ul>
<li>Le standard S/MIME étend le format de courrier MIME pour permettre, au travers de plusieurs mécanismes cryptographiques, de chiffrer et signer les différents composants d&#8217;un message. Il s&#8217;applique donc directement sur le contenu du message et non sur le canal de transport de ce contenu.</li>
</ul>
<ul>
<li>La clé de session est insérée dans l&#8217;en-tête de chaque partie S/MIME, après avoir été chiffrée à l&#8217;aide de la clé publique de chacun des destinataires. Ainsi ces derniers pourront par la suite déchiffrer, à l&#8217;aide de leurs clés privées, la clé de session et accéder au contenu de la partie S/MIME.</li>
</ul>
<ul>
<li>Par ailleurs, la signature d&#8217;une partie S/MIME est générée à l&#8217;aide de la clé privée de l&#8217;expéditeur. La vérification de cette signature à l&#8217;aide de la clé publique de l&#8217;expéditeur permet de garantir au destinataire l&#8217;identité de celui-ci et de contrôler l&#8217;intégrité de la partie S/MIME.</li>
</ul>
<h1>Références</h1>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="234"></td>
<td valign="top" width="503"></td>
</tr>
<tr>
<td valign="top" width="234">Site SEPAMAIL</td>
<td valign="top" width="503">http://www.sepamail.eu/fr/</td>
</tr>
<tr>
<td valign="top" width="234">Site SEPAMAIL</td>
<td valign="top" width="503">http://documentation.sepamail.eu/wiki/Accueil</td>
</tr>
<tr>
<td valign="top" width="234">Site SEPAMAIL</td>
<td valign="top" width="503">http://sepamail.blogspot.fr</td>
</tr>
<tr>
<td valign="top" width="234">Article de presse</td>
<td valign="top" width="503">http://www.bnpparibas.com/actualites/presse/communiqu%C3%A9-presse-bnp-paribas-sepamail</td>
</tr>
<tr>
<td valign="top" width="234">Article de presse</td>
<td valign="top" width="503">http://www.itespresso.fr/sepamail-eu-5-reseaux-bancaires-dematerialisent-reglement-factures-73846.html</td>
</tr>
<tr>
<td valign="top" width="234">Article de presse</td>
<td valign="top" width="503">http://www.banques-en-ligne.fr/actualites/detail.php?idactu=594</td>
</tr>
<tr>
<td valign="top" width="234">Article de presse</td>
<td valign="top" width="503">http://www.lesechos.fr/31/05/2013/LesEchos/21447-129-ECH_le-paiement-de-facture-en-ligne-lance-en-2014.htm</td>
</tr>
<tr>
<td valign="top" width="234">HP et SEPAMAIL</td>
<td valign="top" width="503">http://www8.hp.com/fr/fr/campaigns/sepamail/overview.html</td>
</tr>
<tr>
<td valign="top" width="234">Utilisation de RUBIS (NATIXIS)</td>
<td valign="top" width="503">https://www.youtube.com/watch?feature=player_embedded&amp;v=H6dSpFCOfro#!</td>
</tr>
<tr>
<td valign="top" width="234">Syrtals SI et SEPAMAIL</td>
<td valign="top" width="503"><a href="https://www.youtube.com/watch?v=eszFJIMVl3I">https://www.youtube.com/watch?v=eszFJIMVl3I</a><a href="https://www.youtube.com/watch?v=oN0MsNlUglg">https://www.youtube.com/watch?v=oN0MsNlUglg</a></p>
<p>https://www.youtube.com/watch?v=VemL_hyCcnY</td>
</tr>
</tbody>
</table><p>The post <a href="https://blog.infine.com/sepamail-3058">SEPAMAIL</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/sepamail-3058/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RequestFactory ou comment faire du CRUD avec GWT</title>
		<link>https://blog.infine.com/requestfactory-ou-comment-faire-du-crud-avec-gwt-1108?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=requestfactory-ou-comment-faire-du-crud-avec-gwt</link>
					<comments>https://blog.infine.com/requestfactory-ou-comment-faire-du-crud-avec-gwt-1108#comments</comments>
		
		<dc:creator><![CDATA[aina.razafimahefa]]></dc:creator>
		<pubDate>Fri, 24 Feb 2012 16:54:35 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1108</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">5</span> <span class="rt-label rt-postfix">min.</span></span> Historique Lors de la sortie de la version 2.1 de Google Web Toolkit, une nouvelle API : RequestFactory a fait son apparition. Cette API a été conçue dans le but de simplifier l&#8217;interaction et la manipulation de données côté serveur depuis le client (javascript). Auparavant, les développeurs utilisaient essentiellement GWT-RPC pour les appels de service &#8230;</p>
<p>The post <a href="https://blog.infine.com/requestfactory-ou-comment-faire-du-crud-avec-gwt-1108">RequestFactory ou comment faire du CRUD avec GWT</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">5</span> <span class="rt-label rt-postfix">min.</span></span></p>
<h2>Historique</h2>
<p>Lors de la sortie de la version 2.1 de Google Web Toolkit, une nouvelle API : RequestFactory a fait son apparition. Cette API a été conçue dans le but de simplifier l&#8217;interaction et la manipulation de données côté serveur depuis le client (javascript).<br />
Auparavant, les développeurs utilisaient essentiellement GWT-RPC pour les appels de service impliquant des manipulations de données côté serveur.<br />
Etant donné que le code côté client interagit avec du Java côté serveur, GWT-RPC fournit nativement<br />
un mécanisme de sérialisation de données puissant. Cependant, cela ajoutait également un certain nombre de contraintes. Entres autres, le fait que tout objet échangé entre le client et le serveur devait être Serializable (au sens GWT), l&#8217;utilisation du pattern DTO qui induisait une redondance du code métier serveur au niveau du client etc.</p>
<h2>Différence entre GWT-RPC et RequestFactory</h2>
<p>La différence fondamentale entre les deux API réside dans l&#8217;orientation. GWT-RPC  est une API orientée service. A la base, elle permet d&#8217;invoquer des méthodes distantes d&#8217;une couche service pour interagir avec les données.</p>
<p>RequestFactory quant à elle est une API orientée donnée. Elle invoque directement des méthodes exposées non pas sur une couche service, mais sur les entités métiers (selon la terminologie GWT) elles-mêmes. C&#8217;est comme si on rendait les données serveurs disponibles au niveau du client. Les méthodes invoquées sont alors les méthodes des objets métiers.</p>
<h2>Concepts de base</h2>
<p>RequestFactory se base sur la notion de Proxy. Pour effectuer des opérations sur les données côté serveur, il définit un objet proxy qui &#8220;représente&#8221; cet objet serveur au niveau du client. Ce proxy est en fait une &#8220;interface&#8221; qui définit l&#8217;ensemble des méthodes qu&#8217;on voudrait exposer sur l&#8217;objet métier lui-même. Pour déclencher l&#8217;exécution d&#8217;une action sur l&#8217;objet côté serveur, il suffit de l&#8217;invoquer sur l&#8217;interface du proxy et RequestFactory se charge de l&#8217;envoi de la requête ainsi que de la sérialisation/déserialisation des données. Il est à noter qu&#8217;il utilise un protocole de sérialisation qui lui est propre et qui est différent de GWT-RPC.</p>
<h2>Quelques règles à respecter</h2>
<p>Le fonctionnement interne de RequestFactory impose quelques contraintes au niveau des classes métiers dont :</p>
<p>L&#8217;objet métier doit avoir un constructeur sans argument</p>
<p>la nécéssité d&#8217;avoir un champ VERSION dans la classe métier (annoté @Version en JPA). Ce champ permet à RequestFactory de tester si un objet a changé d&#8217;état.</p>
<p>Chaque Entité doit également disposer d&#8217;une méthode statique permettant de retrouver une instance de l&#8217;objet par son identifiant. Par exemple, pour l&#8217;entité de type Person, ce sera :</p>
<pre class="brush: java; title: ; notranslate">
public static findPerson(Long id) {

// retrieving object by Id using EntityManager

}
</pre>
<h2>Cas d&#8217;utilisation</h2>
<p>Supposons alors qu&#8217;on ait un objet métier Personne dans notre application. Les objets de cette classe sont déstinés à être sauvegardés dans une base de données. On les appelle tout naturellement des &#8220;Entités&#8221; dans RequestFactory. On supposera que la persistance est gérée par Hibernate dans notre application et que tout a déjà été configuré (hibernate.cfg.xml, etc.). Nous avons donc dans notre domaine, le code suivant :</p>
<pre class="brush: java; title: ; notranslate">
@Entity public class Person {
  @Id
@Column(name = &quot;id&quot;)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Version
@Column(name = &quot;version&quot;)
private Integer version;

@Version
@Column(name = &quot;name&quot;)
private String name;
@Column(name = &quot;surname&quot;)
private String surname;

  @JoinColumn(name=&quot;address_id&quot;)
  Address address;

  public Personne() { }  // Getters and setters ...

}
</pre>
<p>Après avoir défini notre objet métier, on va donc lui adjoindre un &#8220;Proxy&#8221; qui sera une représentation de cet objet métier côté client. RequestFactory se charge alors de<br />
propager les opérations invoquées sur les proxy vers les entités côté serveur. Il est également important de noter que RequestFactory envoie seulement les différences entre<br />
ce qu&#8217;il y a côté serveur et côté client, économisant ainsi la bande passante.</p>
<h3>Entity Proxy</h3>
<p>Une entity proxy est un proxy qui comme son nom l&#8217;indique, représente une entité côté serveur. Pour la définir il suffit de créer une interface qui étend EntityProxy<br />
et d&#8217;indiquer la classe métier qu&#8217;il représente via l&#8217;annotation @ProxyFor.</p>
<pre class="brush: java; title: ; notranslate">
@ProxyFor(Person.class)
public interface PersonProxy extends EntityProxy {
public Person() { }
// Les méthodes exposées ...
public String getName();
public void setName(String name);
public AddressProxy getAddress();
public void setAddress(AddressProxy address);
// Les méthodes exposées ...
public String getName();
public void setName(String name);
public AddressProxy getAddress();
public void setAddress(AddressProxy address);
}
</pre>
<p>Les méthodes qu&#8217;on a défini dans le proxy sont les méthodes &#8220;invocables&#8221; sur l&#8217;objet métier. Ainsi, si on veut restreindre l&#8217;appel à certaines méthodes de l&#8217;objet métier<br />
côté serveur, il suffit de ne pas l&#8217;indiquer dans le proxy. Ici par exemple, on a omis les modificateurs de Surname, ce qui veut dire qu&#8217;on ne pourra pas invoquer la méthode<br />
de modification du prénom depuis le côté client.<br />
Remarquons également que si une Entité A possède une référence vers une autre Entité B, les signatures du proxy AProxy feront référence à des BProxy (dans notre cas, AddressProxy).</p>
<h3>Le lien entre le client et le serveur : RequestFactory</h3>
<p>Après avoir défini les entités et leurs proxy, on crée maintenant la RequestFactory elle-même. C&#8217;est une interface qui comme son nom l&#8217;indique va créer les &#8220;stubs&#8221;<br />
permettant la communication entre le client et le serveur.</p>
<pre class="brush: java; title: ; notranslate">
public interface ApplicationRequestFactory extends RequestFactory

{

    PersonRequest personRequest();

    AddressRequest addressRequest();
}
</pre>
<p>PersonRequest et AddressRequest sont nos stubs pour les opérations concernant respectivement les entités Person et Address.</p>
<pre class="brush: java; title: ; notranslate">
@Service(PersonServiceDAO.class)
public interface PersonneRequestContext extends RequestContext {

Request&lt;List&lt;PersonProxy&gt;&gt; getPersonList();

Request&lt;PersonProxy&gt; findPersonById(Long id);

}
</pre>
<p>Notons que les stubs utilisent toujours Request comme type de retour, où X est le paramètre de retour de la méthode de service.<br />
Le stub doit nommer via une annotation, la méthode qui implémente les services côté serveur. Ainsi, dans notre exemple on a deux méthodes qu&#8217;on peut invoquer côté serveur<br />
pour les entités de la classe Personne : on peut retrouver la liste complète ou encore retrouver une Personne par son identifiant.<br />
On pourrait imaginer une classe service comme la suivante ( j&#8217;ai omis volontairement toute la partie de gestion des exceptions liées à la persistance des données pour une raison de lisibilité) :</p>
<pre class="brush: java; title: ; notranslate">
public class PersonServiceDAO {

public List&lt;PersonProxy&gt; getPersonList()
  {
      List&lt;Person&gt; personList = new ArrayList();
      EntityManager entityManager = PersistenceManager.getEntityManagerFactory().createEntityManager();
      try {
          personList = entityManager.createQuery(&quot;FROM Person&quot;).getResultList();
      } catch (Exception e) {
          e.printStackTrace();
      }
      return personList;
  }

public Personne findPersonById(Long id) {
      EntityManager entityManager = PersistenceManager.getEntityManagerFactory().createEntityManager();
      Person person = null;
      try {
          person = entityManager.find(Person.class, id);
      } catch (Exception e) {
          e.printStackTrace();
      }
      return person;
  }
}
</pre>
<h3>Utiliser RequestFactory</h3>
<p>Enfin la dernière étape pour l&#8217;exécution de RequestFactory est de l&#8217;invoquer depuis le code client. Dans un premier temps, on doit initialiser le bus d&#8217;évènement. Une manière de procéder c&#8217;est de faire l&#8217;initialisation dans le constructeur de la classe dans laquelle on va utiliser RequestFactory.</p>
<pre class="brush: java; title: ; notranslate">
public class OurClassWindow {
final EventBus eventBus = new SimpleEventBus();
ApplicationRequestFactory requestFactory = GWT.create(ApplicationRequestFactory.class);

public OurClassWindow() {
// Initialize event bus
requestFactory.initialize(eventBus);
}

}
</pre>
<p>Le mécanisme d&#8217;appels dans RequestFactory est très similaire à ce que l&#8217;on retrouve dans GWT-RPC. Après avoir retrouvé la requestContext, on invoque la méthode tout en<br />
passant un callback qui sera appelé par RequestFactory au retour de la fonction.</p>
<pre class="brush: java; title: ; notranslate">
Receiver&lt;List&lt;PersonProxy&gt;&gt; receiver = new Receiver&lt;List&lt;PersonProxy&gt;&gt;(){
@Override 	public void onSuccess(List&lt;PersonProxy&gt; response) {

// Do something with the response from RequestFactory

} };

requestFactory.personRequestContext.getPersonList().fire(receiver);
</pre>
<p>receiver ici, représente la méthode callback qui sera appelée au retour de la fonction. Comme dans GWT-RPC, il dispose de méthodes onSuccess et onFailure permettant de gérer<br />
les cas de réussite ou d&#8217;échecs après l&#8217;appel.</p>
<h3>Conclusion</h3>
<p>Si vous avez déjà codé en GWT, vous savez à quel point il est fastidieux d&#8217;écrire des services uniquement pour ramener des données stockées en base  : RequestFactory est une manière <del>élégante</del> simple pour effectuer à moindre coût des appels vers un backend. L&#8217;API et la mise en oeuvre sont similaires à ceux de GWT-RPC, il est ainsi très facile de l&#8217;appréhender même si on est habitué à GWT-RPC.</p>
<p>pour aller plus loin : <a href="https://developers.google.com/web-toolkit/doc/latest/DevGuideRequestFactory">https://developers.google.com/web-toolkit/doc/latest/DevGuideRequestFactory</a></p><p>The post <a href="https://blog.infine.com/requestfactory-ou-comment-faire-du-crud-avec-gwt-1108">RequestFactory ou comment faire du CRUD avec GWT</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/requestfactory-ou-comment-faire-du-crud-avec-gwt-1108/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Ou comment reporter à plus tard&#8230;</title>
		<link>https://blog.infine.com/ou-comment-reporter-a-plus-tard-891?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ou-comment-reporter-a-plus-tard</link>
					<comments>https://blog.infine.com/ou-comment-reporter-a-plus-tard-891#respond</comments>
		
		<dc:creator><![CDATA[Laurent Magnin]]></dc:creator>
		<pubDate>Wed, 15 Jun 2011 05:44:53 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[brms]]></category>
		<category><![CDATA[sgrm]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=891</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span> Tel que l&#8217;analyse Neal Ford à travers son concept d&#8217;Emergent Design, plus un projet (informatique) avance, plus les connaissances sur celui-ci sont avancées, ce qui demande à reculer au maximum toute prise de décision concernant ce projet. La connaissance acquise est essentiellement métier et ergonomique (pour autant que la technologie employée est maitrisée). Si pour &#8230;</p>
<p>The post <a href="https://blog.infine.com/ou-comment-reporter-a-plus-tard-891">Ou comment reporter à plus tard…</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span>Tel que l&#8217;analyse Neal Ford à travers son concept d&#8217;<a href="http://www.ibm.com/developerworks/java/library/j-eaed11/index.html">Emergent Design</a>,  plus un projet (informatique) avance, plus les connaissances sur celui-ci sont avancées, ce qui demande à reculer au maximum toute prise de décision concernant ce projet.</p>
<p>La connaissance acquise est essentiellement métier et ergonomique (pour autant que la technologie employée est maitrisée). Si pour les aspects ergonomiques, un prototypage graphique peut (ou devrait) être proposé, comment faire de même avec le code sous-jacent, le code représentant les connaissances métier ?</p>
<p>Un première approche se base sur un processus itératif, suivant un processus dit &#8220;agile&#8221;. Cela est toutefois rarement compatible avec des langages de développement &#8220;classiques&#8221;. En effet, il faut alors prendre très tôt des décisions majeures et structurantes. De plus les changements deviennent de plus en plus difficiles et coûteux. Il conviendrait donc de pouvoir poursuivre le plus tardivement possible la phase de conception, ce qui peut apparaître contradictoire avec cette approche &#8220;agile&#8221;. De plus, l&#8217;expérience montre que même les meilleures des conceptions ne peuvent prévenir de nécessités de correctifs en phase de réalisation.</p>
<p>L&#8217;idéal serait donc de pouvoir disposer d&#8217;un langage tout à la fois de spécification tout en étant exécutable pour pouvoir valider cette même spécification à travers des cas de test. Cela est rendu possible par des langages de type &#8220;règles métier&#8221;. En effet, ceux-ci permettent pour la plupart de construire des modèles objets (dits &#8220;BOM&#8221;) de façon souple, voire dynamique, tout en proposant (plus ou moins automatiquement suivant le <em>Business Rule Management System</em> utilisé) un langage de type DSL permettant d&#8217;exprimer et d&#8217;exécuter des règles métier s&#8217;appliquant sur ces objets.</p>
<p>À noter que les principaux BRMS proposant une couche d&#8217;interfaçage entre le code décrivant les règles et le <em>framework</em> sous-jascent (Java, .NET, xml, Cobol, etc.), il est tout à fait possible de ne faire le choix de ce(s) <em>framework(s)</em> (plusieurs pouvant cohabiter) que tardivement en fonction des contraintes finales de l&#8217;application à développer.</p>
<p>On s&#8217;aperçoit également que cette technologie permet de gérer beaucoup plus facilement les cas particuliers. En effet, ces &#8220;cas&#8221; sont en général caractérisables par un ensemble de contraintes, pouvant être soit  directement exprimées au niveau des règles, soit être gérées par le <em>ruleflow</em>. De plus, le fait d&#8217;exprimer clairement le domaine métier au sein de règles fait ressortir beaucoup plus facilement ces cas &#8220;hors normes&#8221;.</p>
<p>Enfin, il est bien rare que la première mise en production d&#8217;une application soit la dernière pierre de l&#8217;édifice. Les phases de maintenance et de migrations sont primordiales dans la vie d&#8217;un logiciel. Des correctifs et évolutions sont donc à prévoir. Ici aussi, les points soulignés ci-dessus (changement de <em>framework</em> sous-jascent, traitement des cas particuliers, etc.) pourront être mis à profit. Avec de plus un avantage décisif par rapport aux langages informatiques traditionnels : le code des règles étant tout à la fois le code exécuté (et donc évoluant avec les mises à jour) et les spécifications de l&#8217;application, il y a alors garantie de non divergence entre ces deux aspects, ce qui bien qu&#8217;essentiel pour la maintenance est rarement le cas pour la plupart des applications informatiques.</p>
<p>En conclusion, l&#8217;usage d&#8217;une approche &#8220;règles métier&#8221; permet de changer radicalement le mode de développement d&#8217;applications informatiques, tout particulièrement en permettant de retarder les prises de décisions au moment où la connaissance du sujet est enfin suffisamment avancée, tout en facilitant les ajustements rendus nécessaires dans les phases ultérieures du projet.</p><p>The post <a href="https://blog.infine.com/ou-comment-reporter-a-plus-tard-891">Ou comment reporter à plus tard…</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/ou-comment-reporter-a-plus-tard-891/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>L’offshoring: le nouveau mal du siècle?</title>
		<link>https://blog.infine.com/loffshoring-le-nouveau-mal-du-siecle-142?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=loffshoring-le-nouveau-mal-du-siecle</link>
					<comments>https://blog.infine.com/loffshoring-le-nouveau-mal-du-siecle-142#respond</comments>
		
		<dc:creator><![CDATA[Emmanuelle Michel]]></dc:creator>
		<pubDate>Thu, 02 Dec 2010 08:00:22 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[offshoring]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=142</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> L’offshore n’est pas, un lieu de forage sous-marin, ni une optimisation fiscale, mais juste la délocalisation d’activités vers un pays distant de la France. Il est généralement admis que l’offshore concerne les délocalisations vers les pays à faible coûts de main d’œuvre. Ainsi, l’offshore vers des pays à coûts identiques ou supérieurs, qui fournissent de &#8230;</p>
<p>The post <a href="https://blog.infine.com/loffshoring-le-nouveau-mal-du-siecle-142">L’offshoring: le nouveau mal du siècle?</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span>L’offshore n’est pas, un lieu de forage sous-marin, ni une optimisation fiscale, mais juste la délocalisation d’activités vers un pays distant de la France. Il est généralement admis que l’offshore concerne les délocalisations vers les pays à faible coûts de main d’œuvre. Ainsi, l’offshore vers des pays à coûts identiques ou supérieurs, qui fournissent de meilleures prestations, n’est, en général, pas comprise dans la problématique des délocalisations. La politique de délocalisation peut s’effectuer sous la forme d’une externalisation des activités vers un partenaire local, ou avec la création d’une succursale distante. Mais il ne faut pas confondre la problématique de l’externalisation avec celle de la délocalisation, car même si elles peuvent être liées et cumulées, elles sont indépendantes, et chacune peut être appliquée sans l’autre. Ainsi, l’externalisation n’est que l’évolution des Directions des Systèmes d’Informations vers un métier d’acheteur plutôt que de gestionnaire de ressources internes.</p>
<p>Il existe plusieurs degrés de l’offshore, en fonction de la distance géographique avec la France. Avec l’offshore, les pays qui hébergent les services sont très éloignés de la France, comme peuvent l’être la Chine ou l’Inde. Quand les délocalisations concernent des pays plus proches, comme ceux d’Europe de l’Est, ou du Maghreb on parle alors de Nearshore, qui est parfois également utilisé pour les délocalisations vers des régions françaises moins chères. L’onshore consiste à employer le personnel étranger au sein des établissements français, à des conditions qui sont proches de celles du pays d’origine. En France, l’offshore informatique est principalement concerné par la délocalisation des prestations en Inde, parfois associée à des externalisations des services. A long terme, l’offshore peut représenter 10% à 15% des services liés aux technologies de l’information.</p>
<p>Au travers de l’exemple de La Société Générale Global Services Center (SG GSC)  qui existe depuis l’an 2000, l’offshore des services prend tout son sens. SG GSC  propose des services de recherche et développement logiciel, de gestion de projets et d’assistance technique. L’objectif est de créer à Bangalore un centre de connaissance IT pour l’ensemble de la Société Générale, en y incluant les meilleures pratiques utilisées dans le monde de la banque.</p>
<h1><span style="text-decoration: underline;">Pourquoi les entreprises délocalisent-elles ?</span></h1>
<p>Les principales raisons qui poussent les entreprises à délocaliser sont : la réduction des coûts, l’obtention de compétences indisponibles, une amélioration de la qualité des prestations  et l’occasion d’implémenter des normes de conformités. En Inde, plus de compétences, que ce soit en variété ou en quantité, sont disponibles pour un coût inférieur à celui nécessaire en France. Ceci permet d’atteindre des objectifs de qualité, de charge de travail et d’organisation sans augmenter les dépenses, et permet de libérer des ressources en France pour des activités à plus forte valeur ajoutée.</p>
<p><span id="more-142"></span></p>
<h1><span style="text-decoration: underline;">Quelles sont les difficultés rencontrées par les équipes ?</span></h1>
<p>Les principales craintes liées aux délocalisations sont le risque de la dégradation de la qualité de service, la difficulté du pilotage d’une activité dispersée, le respect des exigences réglementaires, la publicité négative induite par la suppression de certains postes en interne, la sécurité des données. Ces différentes craintes découlent des expériences négatives que certains ont vécues lors de tentatives de délocalisations ratées. Ainsi, ces tentatives échouées peuvent être les conséquences de mauvaises pratiques ou de difficultés qui ont mal été appréhendées. Par exemple, la barrière de la langue est plus difficile à gérer qu’il n’y parait. L’anglais est bien entendu maîtrisé par les équipes françaises et indiennes, mais une conversation téléphonique grésillant entre les deux équipes peut s’avérer compliquée.  Les différences culturelles ne sont pas négligeables, car pour les indiens, la frontière entre la vie privée et la vie professionnelle est bien différente de celle présente en France. Les indiens ont une tendance à toujours répondre positivement à une question, pour ne pas frustrer leurs interlocuteurs, ou juste pour indiquer qu’ils ont bien compris la question. La communication est plus compliquée à distance, ce qui demande plus de formalisation et de structuration qu’au sein d’une équipe située uniquement en France. Ces besoins de formalisation demandent beaucoup de travail du coté Français, et représentent une charge de travail que les personnes ne sont pas habituées à avoir. De plus, les différents moyens de transport et de communication, ainsi que le surcoût engendré par la gestion de projet et les cadres expatriés, augmentent les dépenses au delà des simples salaires des ingénieurs indiens.  Par ailleurs, il faut prendre le temps  d’assurer un suivi suffisant pour vérifier la qualité fournie des services.</p>
<p>Il faut également bien considérer les effectifs distants comme faisant partie à part entière de l’équipe. Ainsi, 20% des projets d’offshore n’aboutissent pas, à cause d’un manque de suivi ou de qualité dans le processus de migration des activités</p>
<h1><span style="text-decoration: underline;">Quel est le bilan économique et humain de l’Offshore ?</span></h1>
<p>La spécialisation des pays offshore est inévitable et la culture de la complémentarité plutôt que de la différence entre les pays est bénéfique pour tous.  Ainsi, les compétences d’analyse et de conception, et celles qui sont proches du cœur de métier du client, et qui demandent des compétences dans ce domaine, gagnent à être effectuées en France, même si cela demande un surcoût par rapport à des ingénieurs indiens. Par contre les compétences à plus faible valeur ajoutée peuvent être délocalisées et sont associées par certains à des activités moins intéressantes. Les compétences qui sont développées en France sont celles de gestion de projet, d’expertise métier ou de qualité fournie au client, ce qui permet des emplois plus variés pour ceux qui conservent leur emploi. Ainsi, les sommes économisées retournent aux autres salariés qui montent en compétences ou en responsabilités.</p>
<h1><span style="text-decoration: underline;">Existe-t-il des alternatives à l’Offshore ?</span></h1>
<p>Se mettre à l’écart de la délocalisation est le risque de laisser les sociétés de services informatiques indiennes remporter les contrats de prestations des clients français. Souvent beaucoup plus structurées que les sociétés européennes, avec des certifications, les SSII indiennes sont en passe de devenir des multinationales de premier plan. Cependant, les délocalisations ne sont pas l’unique solution pour baisser les coûts. La réduction de la sous-traitance et une intégration forte des équipes, ainsi la mutualisation des ressources permettent d’obtenir un levier d’économies importantes.</p>
<h1><span style="text-decoration: underline;">Comment se positionner face à l’Offshore ?</span></h1>
<p>Pour pouvoir rester compétitif et converser les seuls postes à valeur ajoutée qu’il restera, il est utile de rester à l’écoute des besoins des clients, pour développer les compétences qui leur sont utiles sur place. Par ailleurs, une remise en cause permanente et une évolution de ses compétences est nécessaire pour rester compétitifs et prendre de l’avance sur la concurrence.  L’offshore permet de participer à la construction des pays en voie de développements en leur apportant un savoir-faire et en gagnant des marchés économiques importants. Les entreprises des pays développés se doivent, quant à elles, d&#8217;investir dans l’innovation et la recherche et développements afin de rester leader et de continuer leur rôle de moteur de l’économie mondiale.</p><p>The post <a href="https://blog.infine.com/loffshoring-le-nouveau-mal-du-siecle-142">L’offshoring: le nouveau mal du siècle?</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/loffshoring-le-nouveau-mal-du-siecle-142/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>BRMS, But When?</title>
		<link>https://blog.infine.com/brms-but-when-146?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=brms-but-when</link>
					<comments>https://blog.infine.com/brms-but-when-146#respond</comments>
		
		<dc:creator><![CDATA[Laurent Magnin]]></dc:creator>
		<pubDate>Thu, 04 Nov 2010 06:00:22 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[brms]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=146</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span> &#8220;When should we, or not, use BRMS?&#8221; is the Question that arises almost every time Business Rules Management Systems are under discussion. Well, that&#8217;s a decision making, which may be handled by rules, in the form of a Decision Table&#8230; The proposed rules to answer that question are not only based on technical aspects of BRMS, but &#8230;</p>
<p>The post <a href="https://blog.infine.com/brms-but-when-146">BRMS, But When?</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span>&#8220;When should we, or not, use BRMS?&#8221; is the Question that arises almost every time <a href="http://en.wikipedia.org/wiki/Business_rule_management_system" target="_blank">Business Rules Management Systems</a> are under discussion. Well, that&#8217;s a decision making, which may be handled by rules, in the form of a Decision Table&#8230;</p>
<p>The proposed rules to answer that question are not only based on technical aspects of BRMS, but also on organizational ones. In fact, those organizational aspects are often more important than the technical ones in the adoption of BRMS. Of course, those rules are not well formalized and their &#8220;Right Hand Side&#8221; (&#8220;then&#8221; part) may vary depending on the case. However, we hope that the following table could help in choosing or not a BRMS to develop an application.</p>
<p><span id="more-146"></span></p>
<p>The pluses and minuses of using BRMS:</p>
<table style="width: 650px" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr align="center">
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">When</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">And</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Short Term Benefits</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Long Term Benefits</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Classical Programming</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Comments</td>
</tr>
</thead>
<col width="158"></col>
<col width="155"></col>
<col width="100"></col>
<col width="110"></col>
<col width="90"></col>
<col width="265"></col>
<tbody>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Specifications in the form of</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Data Sheet</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Most BRMS are mainly based on Decision Tables</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">If / Then (/ Else)</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8220;If&#8221; may become &#8220;when&#8221; (&#8220;else&#8221; is   a rules anti-pattern)</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Natural Language (DSL)</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Some BRMS allow rules in the form of Natural Language</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">BRMS already in place</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&amp; supporting team</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Let&#8217;s go!</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&amp; future supporting team</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Use what you already have, before improving the   expertise</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&amp; no future supporting team</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Well, long term maintenance is compromised,   specially since initial bad choices may be taken</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">No BRMS already in place</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&amp; supporting team</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">The supporting team will first put in place the   BRMS.</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&amp; future supporting team</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Well, you will have to wait till expertise is   available…</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&amp; no future supporting team</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">No Infrastructure, Nobody, No Go!!!</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Needs for</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Hot Deployment</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Deployment of rules is usually easier than of standard code</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Explanation / Traceability</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8220;because of such (intelligible) rules… &#8220;</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Fast Code Changes</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Rules are self sufficient pieces of code</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">(Unit) Testing</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Sets of Rules defined in a Rule Flow can be unit tested</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Evolution of Non BRMS Existing Application</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Number / Complexity of Rules</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">High</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Long term benefits regarding maintenance</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Medium</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Low</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Data Matching</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Small size</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">RETE is an efficient pattern matching algorithm.</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Large Scale</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">See Record Linkage</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Cases available instead of Rules</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Instead use Case-Based Reasoning</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Organisation</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Rigid</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">+++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">BRMS may dramatically change the balance between BA,   developers and production</td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">BA involved</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Management</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Supporting</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Opposed</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
</tr>
<tr>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">Sense of Security / Confidence</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"></td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">&#8211; &#8211;</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000">++</td>
<td style="text-align: center;background-color: #f5f5f5;border: 1px solid #000000"><span style="color: #000080;font-size: small"><span style="line-height: 19px"><span style="color: #000000;font-size: small"><span style="line-height: normal"><br />
</span></span></span></span></td>
</tr>
</tbody>
</table>
<p>Of course, that table is not complete nor rigid and your comments to improve it are welcomed.</p><p>The post <a href="https://blog.infine.com/brms-but-when-146">BRMS, But When?</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/brms-but-when-146/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
