Certification

cancel
Showing results for 
Search instead for 
Did you mean: 
Reply

Sample Exam Solutions for Review

Thanks Wiebe,

 


Why not OO instead of OO-light?


To be honest, the main reason is that I learned LCOD from studying for the ATM exam and started using it in practice so am now quite familiar with it.  

I've tended to steer clear of classes if possible since administering a large LabVIEW project with 10+ developers.  The code was meant to be used by all but only two of us really understood the class structure and many of the engineers used to get scared when modifying a class as the change would propagate resulting in a large number of saves which had to be pushed to a repository. 

 

I find LCOD a nice blend but if it isn't suitable am happy to move to actor for the exam.

0 Kudos
Message 491 of 503
(670 Views)
Highlighted

@SeanJ wrote:

Thanks Wiebe,

 


Why not OO instead of OO-light?


To be honest, the main reason is that I learned LCOD from studying for the ATM exam and started using it in practice so am now quite familiar with it.  

I've tended to steer clear of classes if possible since administering a large LabVIEW project with 10+ developers.  The code was meant to be used by all but only two of us really understood the class structure and many of the engineers used to get scared when modifying a class as the change would propagate resulting in a large number of saves which had to be pushed to a repository. 

 

I find LCOD a nice blend but if it isn't suitable am happy to move to actor for the exam.


I'll see if I can have a look at it first. Others might beat me to it. It shouldn't matter for the CLD, just do what you're used to do.

 

I use OO exclusively, but not the AF. AFAIK, AF should be useable with normal LV, LCOD and\or OO, although OO probably blends in the best.

 

As for the code changing, a lot of people suggest that separating compiled code is a requirement for any serious kind of development. It will reduce the number of affected VIs after a change. I personally haven't turned it on, as it doesn't bother me much. But then I'm developing in a 1-3 (, mostly 1) person team.

Message 492 of 503
(663 Views)

@SeanJ wrote:

Hi All,

 

I gave the carwash exam a go using the LCOD architecture from the ATM example in LabVIEW 2017.

 

I'm hoping to take the exam soon, so feedback would be appreciated.  Also, would be good to know if I am crazy for using LCOD and whether Actor is more or less a prerequisite.

 

Thanks, 

Seán


First comment would be a general cleanup of  the wiring. Lots of unnecessary bends and things aren't always aligned. It's a minor point but it can be improved. The comments regarding the requirements could be aligned, especially on the front panel of the UI.It looks very disorganized with them haphazardly dropped on the front panel. Overall structure is pretty good.

 

When I tried running the code nothing shows up. I don't get the UI. You need to make sure that the user facing components display their front panels.

 

After opening the front panels I don't see how to actually run the system or interact with it. It is not clear how to actual use the system. Playing with it for a brief time I couldn't seem to actually run anything. It appears there are issues with your queues.

 

I would not use the default icon for any of your code. The Step Buttons icon is the default LabVIEW icon.

 

The DB has a broken arrow. You have an unconnected tunnel on the case statement.

 

I would put comments in the empty cases of your message handlers. Be explicit that there is no code necessary. Without the comment it is not clear if the code wasn't implemented or it was not needed. If the action truly isn't needed, remove it from the typedef. Only valid actions should be included in the action typedefs. Also, remove the default case from the case structures. This way the code will break if a new action is added. With the default you can add a new action but not implement since the default case will handle it. A bug yes, but at least broken code is very easy to find.

 

 With respect to source code control, definitely separate the compiled from the source code. Why mark things as changed in the repository when they were only recompiled. This making actually tracking what changed impossible. Changing a class should not mean that lots of code need to be saved. Good OO design means that your method API is essentially static. Once you create it you shouldn't be messing with it. If you are, you are doing something wrong. Look at the SOLID principles of OO design. Well design classes should be easy for non-OO people to use. Modifying the internals of a class should not require any code that uses the class to change or be saved. Changes should be transparent to the users of the class. that is the beauty of OO design.



Mark Yedinak
Certified LabVIEW Architect
LabVIEW Champion

"Does anyone know where the love of God goes when the waves turn the minutes to hours?"
Wreck of the Edmund Fitzgerald - Gordon Lightfoot
Message 493 of 503
(654 Views)

@Mark_Yedinak wrote:
When I tried running the code nothing shows up. I don't get the UI. You need to make sure that the user facing components display their front panels

 

After opening the front panels I don't see how to actually run the system or interact with it. It is not clear how to actual use the system. Playing with it for a brief time I couldn't seem to actually run anything. It appears there are issues with your queues.

 

 


Hi Mark,

 

If this is for the CLA exam, I don't think running the code is necessary.



CLA // LabVIEW 2016 // BALUG // Unofficial Forum Rules and Guidelines
0 Kudos
Message 494 of 503
(648 Views)

@Gregory wrote:

@Mark_Yedinak wrote:
When I tried running the code nothing shows up. I don't get the UI. You need to make sure that the user facing components display their front panels

 

After opening the front panels I don't see how to actually run the system or interact with it. It is not clear how to actual use the system. Playing with it for a brief time I couldn't seem to actually run anything. It appears there are issues with your queues.

 

 


Hi Mark,

 

If this is for the CLA exam, I don't think running the code is necessary.


Oops, I thought it was for a CLD. I would still make sure that the launcher actually opened the UI. Given this is for a CLA then I think the code needs way more comments indicating what types of things need to be implemented where. There is no guidance for developers who are picking up this code to complete it.



Mark Yedinak
Certified LabVIEW Architect
LabVIEW Champion

"Does anyone know where the love of God goes when the waves turn the minutes to hours?"
Wreck of the Edmund Fitzgerald - Gordon Lightfoot
0 Kudos
Message 495 of 503
(645 Views)

Hi Mark,

 

Thanks for your feedback.

 

 



Given this is for a CLA then I think the code needs way more comments indicating what types of things need to be implemented where. There is no guidance for developers who are picking up this code to complete it.

I'm a bit uncertain here, there's 4 hours so I've put in what I hoped would be good enough instruction for a CLD.  Is it possible you could reference a comment and let me know what it should have been versus what it is.  I'm also trying to get a feel for whether the answer would have failed or passed, any clues there would be appreciated.

0 Kudos
Message 496 of 503
(641 Views)

I guess my biggest issue is with all of the empty cases in the structures. As I mentioned earlier, is this that there is no implementation for that action or is it required? If required, what is supposed to be implemented. I didn't read through the requirements document so areas where there are comments stated that this covers Req. XYZ would be sufficient for a CLD to implement provided the requirements are well written.

 

In terms of passing, my biggest complaint is the wiring. I'm not sure if that would be enough to drop the score low enough. I doubt it. This looks pretty good. I am very anal about wiring though. At times my team doesn't like it but it has become second nature now for us. It's even gotten easier now that you can align wires using the alignment tools.



Mark Yedinak
Certified LabVIEW Architect
LabVIEW Champion

"Does anyone know where the love of God goes when the waves turn the minutes to hours?"
Wreck of the Edmund Fitzgerald - Gordon Lightfoot
0 Kudos
Message 497 of 503
(634 Views)

For CLA, nothing has to function, or run. I'd actually go for 0 functionality, as it is less work and gets you no points.

 

But every requirement given (the exact number), needs to be in the final result. Either as a comment to describe things, or as a requirement specification for a CLD. But they all need to be there. I think this is tested with VI Analyzer, there's 0 margin for error.

 

Just copy\pasting them there isn't enough. You'll have to add text to each one of them explaining how it should be done or how it was done.

 

As you then have 0 functionality, I'd put simple icons in the VIs that are there. Their number should be low.

 

In my experience, the CLA lends itself perfectly for OO. There is usually some sort of Model\View\Control requirement, where the M, V and C have a simulation and physical implementation. That means, make an abstract parent, and add in the comment that a simulation and physical child should be implemented. I'm not sure how to do it without OO anymore (except of course case selectors around code). You could even explain that a parent should be made, and that methods should me created, and that children should be implemented. As long as it is described, you'll get points.

 

Making a full functional application does not make you pass the CLA. It's not about that. It shouldn't be finished. The goal is to hand it over to other developer(s), and they should be able to finish the code without thinking too much (that is CLD level Smiley Tongue).

 

Theoretically, you should be allowed to hand over a word document with a complete UML class diagram, and maybe some sequence diagrams. As long as all the requirements are in there, it should be enough. Haven't tested this though.

 

AF would be perfect for a CLA. Simply describe that actors should be made for the M\V\C, and what they should do, and that would be it. But you'll need to familiarize yourself with the AF so know what you're doing.

0 Kudos
Message 498 of 503
(627 Views)

Thanks Mark/ Wiebe,

 

FWIW, the empty cases are covered by comment in underbody car wash which directs developers to follow the structure in underbody car wash in the other cases.  I guess what I'm hearing from you both is that LCOD is antiquated and it's better to go AF.

 

That's a bit of a nuisance as I have spent so much time on LCOD but better to fail fast!  I guess I'll start digging into AF and try the ATM example.  I did the AF course but I reckon there's a good bit of time to get back up to speed!

 

Thanks,

Seán 

0 Kudos
Message 499 of 503
(596 Views)

@SeanJ wrote:

I guess what I'm hearing from you both is that LCOD is antiquated and it's better to go AF.


Not from me.

 

I'd go for OO, not the AF per se. Or at least OO first, then AF.

 

I know AF is used for CLD\A exams, and successfully. I personally don't use it, and never did.

 

I have nothing against LCOD, but what I got from reading about it, is that it's a 'poor mans' OO (no inheritance\polymorphism). Dating from times before OO was there in LV? OO in LV works pretty great nowadays, and especially when experienced with LCOD, getting into OO sound be very easy.

 

I think you'll find OO to be a perfect fit for LCOD designs\experience, but with benefits. Don't have to be scared about it, it will get easier fast, and then you'll love it.

 

For the CLA, I'd just stick to what you normally do. It should not matter.

0 Kudos
Message 500 of 503
(571 Views)