Re: Fwd: Compiler Guided Refactoring.

Andrew McDonagh <[email protected]> Wed, 10 Jul 2013 06:58:56 +0100
Newsgroups gmane.comp.programming.refactoring
Message-ID <[email protected]>
This topic is covered in Michael Feathers book: Working With Legacy Code. =
=20

Regards
Andrew

On 10 Jul 2013, at 05:07, J Arrizza <[email protected]> wrote:

> John, I may be beating a dead horse here, but I'm going to throw it out
> there anyway.
>=20
> I remember vaguely from a comp-sci course that a flow-graph can be
> generated from source, and in your case from the generated assembly code.
> Comparing the before and after flow-graphs would give you a true/false as
> to functional equivalence of a refactoring operation. But I'm pretty sure
> that flow-graphs do not include timing.
>=20
> So here's the pitch: extend the concept of a flow-graph to tally the timi=
ng
> on the branches of the graph. Then the before/after comparison would give
> you both functional and timing equivalence. Sounds like a pain, but it
> might make a nice master's thesis.
>=20
> Not sure what exactly this would bring to the table, but it would --
> potentially -- allow some refactorings to occur that a strict diff of the
> before/after executables would not. From a practical perspective, you'd
> have to trust the theory and also the utility that generates the
> flow-graphs, of course.
>=20
> Bottom line: Is it worth the effort? no idea....
>=20
> John
>=20
> On Mon, Jul 8, 2013 at 3:54 PM, J Arrizza <[email protected]> wrote:
>=20
>> On Mon, Jul 8, 2013 at 3:02 PM, John Carter <[email protected]>w=
rote:
>>=20
>>> **
>>>=20
>>>=20
>>>> The key aspect to the Extract Method with no arguments and void return
>>>> value (i.e. void-void extraction) is that it minimizes the risk of
>>>> introducing side-effects.
>>>=20
>>> That is what appeals to me most about it....
>>>=20
>>> However, it is steps a largish notch away from the idea... ie. Tweaking
>>> the Declarations to Tighten the constraints enforced by the compiler.
>>>=20
>>> I see, so the code is that critical... You're looking for absolutely no
>> change in the generated executable but still refactorings on the source.
>>=20
>>> ie. Your void-void is low risk, provided the person doing the refactori=
ng
>>> doesn't,,,
>>> * accidentally reorder something,
>>> * drop a step,
>>> * or extract copypasta into a single method that isn't copypasta but
>>> copypasta and tiny easily missed tweak.
>>>=20
>>> :) copy and pasta, had it for supper last night.
>>=20
>> I wonder if there is any way of doing a reliable cross check, or a varia=
nt
>>> of this, or a way of injecting additional steps to increase safety.
>>>=20
>>> So clearly UTs are not available. What about Pair Programming? Or code
>> review after a small set of changes?
>> On the other hand, if the code is as critical as it seems to be, even
>> those won't guarantee no changes in the executable.
>>=20
>> Hmm. It might need an additional check, gcc will always inline something
>>> like that so could diff the disassembly output.
>> Sure, it could be used in lieu of UTs:
>> - If the disassembly output matches, then all is well.
>> - If they don't match, then a quick review of the disassembly output and
>> the source to see why the mismatch. A mismatch might still be acceptable=
,
>> right??
>>=20
>> On the bright side... you might find a compiler bug.
>>=20
>>=20
>>> On Sun, Jul 7, 2013 at 5:31 AM, J Arrizza <[email protected]> wrote:
>>>=20
>>>> The key aspect to the Extract Method with no arguments and void return
>>>> value (i.e. void-void extraction) is that it minimizes the risk of
>>>> introducing side-effects.
>>>>=20
>>>> The conversion of the function parameters to consts is slightly
>>> different,
>>>> its purpose is to highlight the fact that the function won't introduce=
 a
>>>> side-effect via those parameters.
>>>=20
>>>>=20
>>>> Further to this, one additional refactoring I've used is Rename
>>> Variable to
>>>> add a "g" prefix to all global variables. I personally don't like
>>> hungarian
>>>> notation but adding the "g" is a very useful exception to this rule. A=
ll
>>>> the globals show up clearly in the code.
>>>>=20
>>>> One other way to achieve this is to put all globals into a single stru=
ct
>>>> called "globals". Then all uses show up as "globals.some_variable" whi=
ch
>>>> makes it very clear that there is a global side-effect in that part of
>>> the
>>>> code. But note the compiler may generate more code for this technique.
>>>>=20
>>>> John
>>>=20
>>>>=20
>>>>=20
>>>>=20
>>>> On Thu, Jul 4, 2013 at 3:28 PM, J Arrizza <[email protected]> wrote:
>>>>=20
>>>>> On Thu, Jul 4, 2013 at 7:27 AM, Richard <[email protected]>
>>> wrote:
>>>>>=20
>>>>>> **
>>>>>>=20
>>>>>> n article <
>>>>>> CAEyOLyBfwH6uD6Z5RxBmmne4NA90cpF6N6LGacJPmRTSz7Enyg@mail.gmail.com>,
>>>=20
>>>>>> J Arrizza <[email protected]> writes:
>>>>>>=20
>>>>>>> is. IMO the biggest bang for buck is the void-void extraction.
>>>>>>=20
>>>>>> This is Extract Method/Extract Function with no arguments
>>>>> ... and void return value.
>>>>>=20
>>>>>>> The next best is the void-const extraction.
>>>>>=20
>>>>>> This is Extract Method/Extract Function with arguments
>>>>> ... and void return value and all the arguments are const.
>>>>>=20
>>>>>>=20
>>>>>> I think it's important to use the established names for well known
>>>>>> refactorings for clear communication.
>>>>> Absolutely.
>>>>>=20
>>>>>>=20
>>>>>>=20
>>>>>>=20
>>>>>> Start a New Topic<
>>> http://groups.yahoo.com/group/refactoring/post;_ylc=3DX3oDMTJlazgzdWgyB=
F9TAzk3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xr=
A250cGMEc3RpbWUDMTM3Mjk0ODA2Ng--
>>>>=20
>>>> Messages
>>>>>> in this topic<
>>> http://groups.yahoo.com/group/refactoring/message/10661;_ylc=3DX3oDMTM2=
dTY1ZDY3BF9TAzk3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0l=
kAzEwNjY0BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTM3Mjk0ODA2NgR0cGNJZAMxMDY2MQ--
>>>>> (4)
>>>>>> Recent Activity:
>>>>>>=20
>>>>>>=20
>>>>>> Visit Your Group<
>>> http://groups.yahoo.com/group/refactoring;_ylc=3DX3oDMTJlOW1ucG5jBF9TAz=
k3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3Zna=
HAEc3RpbWUDMTM3Mjk0ODA2Ng--
>>>>>=20
>>>>>> [image: Yahoo! Groups]<
>>> http://groups.yahoo.com/;_ylc=3DX3oDMTJkbWt0N2dqBF9TAzk3MzU5NzE0BGdycEl=
kAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMzcyOT=
Q4MDY2
>>>>>=20
>>>>>> Switch to: Text-Only<
>>>> [email protected]
>>> ?subject=3DChange+Delivery+Format:+Traditional
>>>>> ,
>>>>>> Daily Digest<
>>>> [email protected]?subject=3DEmail+Delivery:+Digest>=
=E2=80=A2
>>>>>> Unsubscribe <
>>>> [email protected]?subject=3DUnsubscribe>=E2=80=
=A2 Terms
>>>>>> of Use <http://docs.yahoo.com/info/terms/> =E2=80=A2 Send us Feedbac=
k
>>>>>> <
>>>> [email protected]
>>> ?subject=3DFeedback+on+the+redesigned+individual+mail+v1
>>>>>=20
>>>>>> .
>>>>=20
>>>>=20
>>>> [Non-text portions of this message have been removed]
>>>>=20
>>>>=20
>>>>=20
>>>> ------------------------------------
>>>>=20
>>>> Yahoo! Groups Links
>>>=20
>>> --
>>> John Carter Phone : (64)(3) 358 6639
>>> Tait Electronics Fax : (64)(3) 359 4632
>>> PO Box 1645 Christchurch Email : [email protected]
>>> New Zealand
>>>=20
>>> --
>>>=20
>>> ------------------------------
>>> This email, including any attachments, is only for the intended
>>> recipient.
>>> It is subject to copyright, is confidential and may be the subject of
>>> legal
>>> or other privilege, none of which is waived or lost by reason of this
>>> transmission.
>>> If you are not an intended recipient, you may not use, disseminate,
>>> distribute or reproduce such email, any attachments, or any part thereo=
f.
>>> If you have received a message in error, please notify the sender
>>> immediately and erase all copies of the message and any attachments.
>>> Unfortunately, we cannot warrant that the email has not been altered or
>>> corrupted during transmission nor can we guarantee that any email or an=
y
>>> attachments are free from computer viruses or other conditions which ma=
y
>>> damage or interfere with recipient data, hardware or software. The
>>> recipient relies upon its own procedures and assumes all risk of use an=
d
>>> of
>>> opening any attachments.
>>> ------------------------------
>>>=20
>>>=20
>>> [Non-text portions of this message have been removed]
>=20
>=20
> [Non-text portions of this message have been removed]
>=20
>=20
>=20
> ------------------------------------
>=20
> Yahoo! Groups Links
>=20
>=20
>=20


------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/refactoring/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/refactoring/join
    (Yahoo! ID required)

<*> To change settings via email:
    [email protected]=20
    [email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/