[email protected]


TESTING : our job

   1. Test every requirement listed in the DSS. 
   2. Get 100% TCA (cover all if-then branches). 
   3. Sign off all FPTEST SCRs. 

this is about #2.

COVERAGE

Run TCA on the section using the baseline PTH.

$! tca  -x b.xil -p b.ptl -c b.cul -r b.tcr -"BATS" -t 3
$ tca  -x b.xil -p b.ptl -c b.cul -r b.tcr -"BATS" -t 3   --"ignore=A,I,G,H"


COVERAGE

     InspectFN - Inspects File Names - Looks at working config directory
     and reports on source and output files per specified sub
     functional area.  So if your .exc report is older than any
     sources, like an .ADA driver, a flag is raised.

     InspectSCR - Inspects SCRs - Looks at the user-supplied SCR with ACM
     Report ONE_SCR, gets the elements off of it, and then
     searches all the .ins files in the working config containing
     the SCR, for accepted and inspected generations.

     InspectSCT - Rolls up all the .tce files in the working config and
     builds a report.




COVERAGE

if we do not exercise one or more lines of code 
in our testing (for any reason) that there is a systems/software analysis 
that needs to be done to verify that the unexercised code does what it is 
supposed to do and that there is no possibility of a safety issue with the 
code.  We need to get these analyses going as soon as possible, so that the 
systems/software people here in Phoenix can do them on a non-panic basis. 
 From a certification standpoint, either the test coverage or the analysis is 
acceptable, but one or the other must be done.


COVERAGE

TCA_SRC logical to point to multiple directories
$ setup_tca_src == "@EBWR1:[bennettp]setup_tca_src.com"

COVERAGE

Running TCA on the w-node is probably more efficient.  You then do not 
have to worry about whether you have the proper source files in 
Bangalore.  The original source files can always be accessed from the 
w-node. 

TCE

the TCE files contain TCA hole excuses.
we have standard excuses that can be found in the test ACM dir
in the file fpd.tch.
in addition, the is one more: {missing_testcases}

these are not excuses or analysis, these are admissions of error
and need to get fixed.

search the TCE files for {missing_testcases} and you will
see them all. this is not good.

please spend some time. 
it shouldn't take much to fix them, as most holes are obvious.
if it is NOT obvious, skip it.

COVERAGE

1. connect w node.
2. $gtce xxxxxxx.tcr
3. edit xxxxxxx.tce with appropriate elements in fpd.tch.
(use "<" & ">" brackets)
4. $gtce xxxxxxx.tce b737test:fpd.tch   
After instruction 4, you will have the elements provided in 3, expanded
with the description for the element.


COVERAGE

   In order to run TCA from the VAX, you probably only need to know a few 
things:

1) VAX login must execute department common startup
2) need to define tca_src on the VAX
3) tca command line on the VAX uses -"BTA" rather than -BTA

I assume that all of you already have a login which calls the department 
common startup.  If you are able to execute tca on the VAX, you are 
calling the department startup.  Just type TCA.  If you get a help 
screen, you're O.K.  If not, you may need to include 1 or both of the 
following commands in your login.com:

$ @ebs12:[737cds_disp.fp_profile]startup_common_profile.com
$ @ebvr3:[fpinteg.com]ite90_login

Defining tca_src is just a little more involved.  Fortunately, Tim Inman 
created a command procedure which allows us to define tca_src very 
easily.  A copy of Tim's command procedure can be executed from 
ebs2:[fpdtest.tools]define_tca.com.  You can execute this command 
procedure and define tca to point to the software for the desired load.


COVERAGE

TCE: use the gtce routine on the w node.
just type gtce to learn to use it, but it's simple.
use gtce the first time on a tcr file to create a tce,
edit it, adding the  in b7376test:fpd.tch,
then use gtce a second time on the tce with b7376test:fpd.tch 
to create the final tce.

the first time is only to create a tcr file named TCE:

gtce file.tcr  produces file.tce

i will use the TCE files from -800 to guide me in 
creating the TCE files for -600.

i will open up 2 windows, one with the -800 TCE and the
other with the -600 TCE. the TCE files look exactly like
the TCR files, except we add comments only to TCE files.
if you have ever examined TCR files, you will know that it
lists lines of code that were not recorded as
covered. when i see a section listed in the -600 TCE,
i will check to see if the -800 has a corresponding
section listed, with an appropriate "excuse"  
in the format of:  followed by a description. 
this description is added by the second running of gtce. 
so i only need to add the same  into the -600 TCE. 
once you do it a few times, you start to understand 
what excuse goes where and when. Then you are
ready to handle cases where -600 is unique from -800.

then, i am reading for the second running of gtce.

gtce file.tce b7376test:fpd.tch  produces the final file.tce


GTCE -ver 1.01  PS5540-00353, description:

  GTCE must be run at least twice.  Syntax for first time is:

    GTCE <.tcr file>

  where:

    <.tcr file> is the name of the TCA Report file name.

  The purpose of this initial run is to create a .tce file.
  Any subsequent runs of GTCE will be on the .tce file.  This
  method (of 'multiple' gtce runs) ensures that the .tce file
  contains ALL of the structural holes in the .tce file, at least
  after the first run, and, this method provides the user a way to
  modify the .tce file, without changing the original .tcr file.

  Following is the syntax for subsequent GTCE runs:

  GTCE <.tce file> <.tch file(s)> [<-flags>]
                   <.thl file   >
  where:

    <.tce file> is the name of the TCA structural coverage
                     exception report.

    <.tch file(s)> is the name of the file(s) containing at least
                   some of the structural coverage hole analysis.
    <.thl file is a file of .tch file names.
                   The format for .tch is as follows:


Analysis of the structural hole.  Blank lines require at lease
one space, " ", as end of  analysis are 2 blank lines.
    [<-flags>] is the user-selected flag:

      -o .tce where user can specify output file name.

For the complete description of the format of the .tch file, refer
to file user5:[gibsonc.bin.gtce]tch_format.gtce


FILLING COVERAGE HOLES

THE FOLLOWING IS FOUND IN PPD_LND.TCE:

........................................................................
SubUnit: PFD1_ADI_ILS_PKG.UPDATE_ILS_DATA
[486-6 JMPF]Condition 3 line 621 ONLY taken. Independently affects decision.
[486-6 JMPF]Decision ending on line 621 ONLY taken.
  .  621       Update_Glideslope
  *  622           (Source       => Source,
  *  623            PBlock       => PBlock,
  *  624            ROC          => ROC);
        Inlined from compilation unit PFD1_ADI_ILS_PKG
           in /blr5_india3/737_800/sourcefiles/b38swit502/pfd1_adi_ils_pkg.ada
      .  104          ((IN1_ILS_DPkg.Glideslope_Dev(Source).Stat =
      .  105                                             Disp_Common_TPkg.NCD) and then
      .  106            NCD_ILS_Flag)) then
      *  107         Glideslope.Stat := Disp_Common_TPkg.INVALID;

{shortcircuitand}
The "and then" control structure causes the second argument to not be
evaluated if the first argument is FALSE. This structure is fully covered
if ALL TRUE, ALL FALSE and SINGULAR FALSE conditions are tested.

<<< Covered in ppd_ln0010.tdf

FIRST OF ALL, YOU STATE THAT THIS IS COVERED IN PPD_LN0010.TDF. 
HOWEVER, IF YOU ACTUALLY LOOK AT THE PROBLEM CODE, YOU SEE THAT THE
INLINED CODE, LINE 106, IS THE ACTUAL CULPRIT CODE, NOT LINE 621 OF THE
MAIN LINE CODE.  THE SOFTWARE IMPLEMENTS THIS LOGIC IN GLIDESLOPE_DEV.I
AND IS THUS COVERED BY TESTS IN PPD_DI0070.TDF, NOT PPD_LN0010.TDF. 
   THE NEXT STEP IS TO SEE IF WE ACTUALLY HAVE TESTS THAT COVER THE
LOGIC IN QUESTION.  (WE DON'T WANT TO JUST SAY WE HAVE TESTS WHICH
COVER THE LOGIC, OR THAT THE TESTS SHOULD COVER THE LOGIC, BUT WE NEED
TO ACTUALLY VERIFY THAT THE TESTS DO COVER THE LOGIC).  WHEN LOOKING
AT PPD_DI0070.TDF, IT APPEARS THAT THE "B=0" CASE IS COVERED IN TEST
#3 AND THE "B=1" CASE IS COVERED IN TEST#9.  

   I TOOK PPD_DI0070.TDF, DAP'ED IT, DID A STUCCOS LOAD ON THE DWS,
RERAN ONLY TEST #3 AND TEST #9, THEN DID A STUCCOS DATA SAVE TO CREATE
PPD_DI0070_PKG.XIN.  I THEN INCLUDED PPD_DI0070_PKG.XIN IN THE .XIL
FILE, AND RERAN TCA TO OBTAIN PPD_LND.TCR.  THE HOLE AT [486-6]
DISAPPEARS.  

   TO CORRECT THE PROBLEM, I WILL SIMPLY RERUN TCA TO CREATE
PPD_LND.TCR USING PPD_DI1.XIN,PPD_DI2.XIN,PPD_DI3.XIN,AND PPD_DI4.XIN
IN THE .XIL FILE PPD_LND.XIL.  
   

COVERAGE

[487-13 JMPF]Condition 1 line 450 NOT taken. Independently affects decision.
[487-13 JMPF]Decision ending on line 451 ONLY taken.
[487-16 JMPF]Condition 2 line 450 NOT taken. Independently affects decision.
[487-16 JMPF]Decision ending on line 451 ONLY taken.
  .  447       Graph_Timer_Pkg.TDT
  .  448           (Start_Time => Frequency_Disagree_Timer(Source),
  .  449            Time_Delay => Sixty_Seconds,
  .  450            Expression => (Valid_ILS1_BCD and then Valid_ILS2_BCD) and then
  *  451                          (Freq_ILS1 /= Freq_ILS2),
  *  452            Result     => Frequency_Disagree);

{tca_problem1}
For some reason TCA is showing unexecuted code. After investigating the
source and disasembly code for this unit it is clear that all of the
code is executed in the test and that there is a TCA problem

<<< covered in ppd_ln0040.tdf


ACTUALLY, THIS IS NOT A TCA PROBLEM, AND THIS TEST CASE IS NOT COVERED
IN PPD_LN0040.TDF.  IN ORDER TO FIND THE CORRECT ANSWER TO THIS TCA
HOLE, WE HAVE TO LOOK AT WHAT DSS REQUIRMENT IS BEING COVERED BY THE
ABOVE CODE.  I FOUND THE REQUIREMENT IN 3.7.4, v05_appr_ref_data.  THE
FOLLOWING LOGIC OCCURS IN THE DSS:

if sta.FREQUENCY_ILS1.e = (valid or test) and
   sta.FREQUENCY_ILS2.e = (valid or test) and
   tdt{t=60s}(FREQUENCY_ILS1 <> FREQUENCY_ILS2) then
  ILS_FREQ_DISAG.t = true.

PLEASE NOTE HOW THE DSS USES sta.FREQUENCY_ILS....  THE TESTS ALSO
CHECK FOR A STATUS VARIABLE.  HOWEVER, THE CODE (AS SEEN IN THE .TCE
ITSELF), IS LOOKING FOR 

  .  450            Expression => (Valid_ILS1_BCD and then Valid_ILS2_BCD) and then
  *  451                          (Freq_ILS1 /= Freq_ILS2),

THE CODE AND THE DSS DO NOT MATCH EXACTLY.  TO COVER THE STRUCTURAL
COVERAGE HOLE, TESTS ARE NECESSARY TO
MAKE SURE THAT ILS_FREQ_DISAG.T IS SET TO TRUE AND FALSE DUE TO
VALID_ILS_BCD AND VALID_ILS2_BCD.


COVERAGE

THE FOLLOWING WAS FOUND IN PPD_LND.TCE
........................................................................
SubUnit: PFD1_ADI_ILS_PKG.CHECK_IDENT_CHARACTER
[488-3 JMPT]Condition 1 line 352 ONLY taken. Independently affects decision.
[488-3 JMPT]Decision ending on line 353 ONLY taken.
  .  352       if ((Input in 'A'..'Z') or else
  *  353           (Input in '0'..'9')) then
  *  354         Char := Input;

{tca_problem1}
For some reason TCA is showing unexecuted code. After investigating the
source and disasembly code for this unit it is clear that all of the
code is executed in the test and that there is a TCA problem

<<< covered in ppd_ln0041.tdf

ACTUALLY, TCA IS CORRECTLY INDICATING THAT THERE IS MISSED CODE HERE. 
IN ORDER TO DETERMINE THIS, IT MIGHT HELP TO LOOK AT:

B3850SRC:PFD1_ADI_ILS_PKG.ADA
B3850DIS:PFD1_ADI_ILS_PKG.DIS
PPD_LND.TCB

THERE IS ONE MISSING CONDITION HERE.  THE CODE FROM
B3850SRC:PFD1_ADI_ILS_PKG.ADA SHOWS THE FOLLOWING:

      if ((Input in 'A'..'Z') or else
          (Input in '0'..'9')) then
        Char := Input;
        Status := Status + 1;
      else
        Char := SPACE;
      end if;

THE DISASSEMBLY LISTING FROM B3850DIS:PFD1_AID_ILS_PKG.DIS SHOWS THE
FOLLOWING:

  352        if ((Input in 'A'..'Z') or else
-----------------------------------------------------------------------------
| 00000008 | 41588241        cplt              gr88, lr2, 65
| 0000000C | AC005805        jmpt              gr88, 0x00000020
| 00000010 | 70400101        nop
| 00000014 | 4559825A        cple              gr89, lr2, 90
| 00000018 | AC005908        jmpt              gr89, 0x00000038
| 0000001C | 70400101        nop

  353            (Input in '0'..'9')) then
-----------------------------------------------------------------------------
| 00000020 | 415A8230        cplt              gr90, lr2, 48
| 00000024 | AC005A08        jmpt              gr90, 0x00000044
| 00000028 | 70400101        nop
| 0000002C | 495B8239        cpgt              gr91, lr2, 57
| 00000030 | AC005B05        jmpt              gr91, 0x00000044
| 00000034 | 70400101        nop

THERE ARE 2 JMPT CONDITIONS IN THIS DISASSEMBLY.  TO DETERMINE THE
JMPT WHICH CORRESPONDS TO [488-3], YOU NEED TO LOOK AT THE ABSOLUTE
ADDRESSES STORED IN PPD_LND.TCB.  FROM PPD_LND.TCB:

488-1 JMPT   BC:--:--:--:--:--:--:BN:BT:BX 352 352  50e20  50e24  
      ............................  PFD1_ADI_ILS_PKG.CHECK_IDENT_CHARAC

488-2 DSLOT  BC:--:--:--:--:--:--:--:--:BX 352 352  50e28  50e28 

488-3 JMPT   BC:--:--:--:--:--:--:--:BT:BX 352 352  50e2c  50e30    

THIS INFORMATION SHOWS THAT THE FIRST JMPT FOR THE SUBROUTINE
CHECK_IDENT_CHARAC.. IN PFD1_ADI_ILS_PKG.ADA IS LOCATED AT ABSOLUTE
ADDRESS 50E20.  THE JMPT FOR [488-3] IS LOCATED AT 50E2C.  SINCE THE
JMPT FOR [488-3] IS THE NEXT JMPT AFTER THE FIRST ONE OF THE
SUBROUTINE, YOU DO NOT HAVE TO LOOK ANY FURTHER.  HOWEVER, IF IT
WASN'T THIS SIMPLE, YOU COULD FIND THE RELATIVE LOCATION OF THE JMPT
AT [488-3] BY FINDING THE ADDRESS DIFFERENCE (50E2C - 50E20) = C.  THE
FIRST JUMP IS LOCATED (FROM THE .DIS FILE) AT 0C, THE JMPT IN QUESTION
WOULD BE LOCATED AT 18.

NOW, THE 2ND JUMP OF THE SUBROUTINE IS ACTUALLY FROM LINE 352.  TCA
HAS GIVEN SLIGHTLY ERRONEOUS DATA BY INDICATING THAT THE PROBLEM IS ON
LINE 353.  TCA INDICATES THAT THE JMPT IS ONLY TAKEN, INDICATING THAT
TESTS HAVE NOT CHECKED AN ASCII VALUE WHICH IS GREATER THAN "Z".

IN ORDER TO COVER THIS STRUCTURAL COVERAGE HOLE, WE WOULD HAVE TO ADD
TESTS WHICH TRY TO SET ASCII CHARACTERS GREATER THAN 90.  THIS COULD
BE DONE BY ADDING TESTS TO CHECK ANY OF THE LOWERCASE LETTERS.

FROM PPD_BAR.TCE:
.........................................................................
[436-39 JMPT]Condition 1 line 137 NOT taken. Independently affects decision.
[436-39 JMPT]Decision ending on line 140 ONLY taken.
  .  137       (Ref_Display(Source) in PRESET_QFE..PRESET_QNH) and then
  *  138       (EFIS_CP.Selected_Baro_Corr_Preset_In_Status(Source) >= TEST) and then
  *  139       (EFIS_CP.Selected_Baro_Corr_Preset_HPa_Status(Source) >= TEST) and then
  *  140       ((Inches_Preset /= Baro_Preset(Source)) or else Display_Preset(Source)); 

{improper_decision_flags}
This compilation unit reported a missing decision, but analysis of the
TCA block report showed no conditional logic related to an 'if'
statement. Therefore, this appears to be a case of decision flags
being erroneously set in a block, a known HADS problem.

<<<  Covered by
ppd_ba0120.tdf,ppd_ba0180.tdf,ppd_ba0190.tdf,ppd_ba0200.tdf
..........................................................................

THE TCA HOLE ACTUALLY DOES NOT INDICATE A HADS PROBLEM, BUT INDICATES
THAT WE HAVE NOT TESTED VALUES FOR THE ENUMERATED VARIABLE
"REF_DISPLAY" GREATER THAN PRESET_QNH.  NO ADDITIONAL TEST CASES ARE
NEEDED.  I HAVE INCLUDED STEPS WHICH I FOLLOWED TO COME TO THIS CONCLUSION.

1) [436-39] Seems to indicate that more than one problem has
   occurred.  Yet, the tca tag [436-39] only refers to one assembly
   language "JMPT" instruction.  We can look at the .tcb to
   determine which instruction is causing the problem.

   [436-39 JMPT]Condition 1 line 137 NOT taken. Independently affects decision.
   [436-39 JMPT]Decision ending on line 140 ONLY taken.

2) Look at ppd_bar.tcb

   The problem "tag" is as follows:

   436-39 JMPT   BC:--:--:--:--:--:--:BN:--:BX   137   137    4a2ec    4a2f0    

   The "BN:--:BX" indicates "branch not taken".  If both branches for
   the JMPT were taken, you would see something like "BN:BT:BX", where
   the "BT" stands for branch taken.

   The above listing in the .tcb indicates that the JMPT was never
   taken.  This indicates that the TRUE condition never occurred. 

3) Find the specific "JMPT" instruction in the disassembly 

   To know exactly what condition has not been met, looking at the
   disassembly listings in b3850dis is handy.  The information in the
   .tcr can sometimes identify the specific missed condition, but
   sometimes not.  The disassembly listing leaves no doubt.

   The .tcb gives information about all decisions in the assembly
   language code (all JMP,JMPF,JMPT instructions).  To identify where
   in the disassembly listing the "JMPT" occurs, you could use the
   absolute addresses listed for the "tag".  However, it might be
   easier just to count the number of "JMP" instructions listed in the
   .tcb, then compare this with the disassembly listing.

   The following is from ppd_bar.tcb:

   436-1 ASSERT BC:--:--:--:--:--:--:BN:--:BX    17    17    4a068    4a06c 
   436-2 LABEL  BC:--:--:--:--:--:--:--:--:BX    17    67    4a070    4a100 
   436-3 LABEL  BC:--:--:--:--:--:--:--:--:BX    72    72    4a104    4a140 
   436-4 LABEL  BC:--:--:--:--:--:--:--:--:BX    72    72    4a144    4a148 
   436-5 LABEL  BC:--:--:--:--:--:--:--:--:BX    72    72    4a14c    4a158 
   436-6 LABEL  BC:--:--:--:--:--:--:--:--:BX    72    72    4a15c    4a164 
   436-7 LABEL  BC:--:--:--:--:--:--:--:--:BX    72    72    4a168    4a174 
   436-8 LABEL  BC:--:--:--:--:--:--:--:--:BX    72    72    4a178    4a184 
   436-9 JMPF   BC:--:--:--:--:--:--:BN:BT:BX    72    96    4a188    4a1bc 
   36-10 DSLOT  BC:--:--:--:--:--:--:--:--:BX    96    96    4a1c0    4a1c0 
   36-11 JMPF   BC:--:--:--:--:--:--:BN:BT:BX    97    97    4a1c4    4a1d0 
   36-12 DSLOT  BC:--:--:--:--:--:--:--:--:BX    97    97    4a1d4    4a1d4 
   36-13 JMPF   BC:--:--:--:--:--:--:BN:BT:BX    98    98    4a1d8    4a1ec 
   36-14 DSLOT  BC:--:--:--:--:--:--:--:--:BX    98    98    4a1f0    4a1f0 
   36-15 JMPF   BC:--:--:--:--:--:--:BN:BT:BX    99    99    4a1f4    4a200 
   36-16 DSLOT  BC:--:--:--:--:--:--:--:--:BX    99    99    4a204    4a204 
   36-17 JMPF   BC:--:--:--:--:--:--:BN:BT:BX   101   101    4a208    4a208 
   36-18 DSLOT  BC:--:--:--:--:--:--:--:--:BX   101   101    4a20c    4a20c 
   36-19 JMPF   BC:--:--:--:--:--:--:BN:BT:BX   102   102    4a210    4a218 
   36-20 DSLOT  BC:--:--:--:--:--:--:--:--:BX   102   102    4a21c    4a21c 
   36-21 LABEL  BC:--:--:--:--:--:--:--:--:BX   103   103    4a220    4a228 
   36-22 JMPT   BC:--:--:--:--:--:--:BN:BT:BX   103   103    4a22c    4a22c 
   36-23 DSLOT  BC:--:--:--:--:--:--:--:--:BX   103   103    4a230    4a230 
   36-24 JMPF   BC:--:--:--:--:--:--:BN:BT:BX   106   106    4a234    4a23c 
   36-25 DSLOT  BC:--:--:--:--:--:--:--:--:BX   106   106    4a240    4a240 
   36-26 JMPF   BC:--:--:--:--:--:--:BN:BT:BX   107   107    4a244    4a24c 
   36-27 DSLOT  BC:--:--:--:--:--:--:--:--:BX   107   107    4a250    4a250 
   36-28 LABEL  BC:--:--:--:--:--:--:--:--:BX   108   108    4a254    4a25c 
   36-29 LABEL  BC:--:--:--:--:--:--:--:--:BX   108   108    4a260    4a260 
   36-30 LABEL  BC:--:--:DN:DT:DV:BA:--:--:BX   108   108    4a264    4a264 
   36-31 JMPT   BC:--:--:DN:DT:DV:--:BN:BT:BX   108   125    4a268    4a294 
   36-32 DSLOT  BC:--:--:--:--:--:--:--:--:BX   125   125    4a298    4a298 
   36-33 JMP    BC:--:--:--:--:--:--:--:BT:BX   126   126    4a29c    4a2ac 
   36-34 DSLOT  BC:--:--:--:--:--:--:--:--:BX   126   126    4a2b0    4a2b0 
   36-35 JMPF   BC:--:--:DN:DT:DV:--:BN:BT:BX   133   133    4a2b4    4a2b4 
   36-36 DSLOT  BC:--:--:--:--:--:--:--:--:BX   133   133    4a2b8    4a2b8 
   36-37 JMPT   BC:--:--:--:--:--:--:BN:BT:BX   134   137    4a2bc    4a2e4 
   36-38 DSLOT  BC:--:--:--:--:--:--:--:--:BX   137   137    4a2e8    4a2e8 
   36-39 JMPT   BC:--:--:--:--:--:--:BN:--:BX   137   137    4a2ec    4a2f0 
   36-40 DSLOT  BC:--:--:--:--:--:--:--:--:BX   137   137    4a2f4    4a2f4 
   36-41 LABEL  BC:--:--:--:--:--:--:--:--:BX   137   137    4a2f8    4a2f8 

   The "tag" we are trying to identify is [436-39].  The "tag" for the
   beginning of the procedure in question is [436-1].  If we look at
   [436-1], we see the following:

   436-1 ASSERT BC:--:--:--:--:--:--:BN:--:BX  .......   
                                   PFD1_ALT_PKG.PROCESS_10HZ.PROCESS_10HZ_1

   Thedisassembly listing we need to look at is thus 
   b3850dis:PFD1_ALT__PROCESS_10HZ.DIS.

   We could count the number of JMPF,JMPT,and JMP instructions in the
   .tcb from [436-1] to [436-39] to find the specific problem JMPT in
   the disassembly.  An easier way might be to notice that there is a
   single JMP at [436-33].  This corresponds to a JMP in the
   disassembly.  There is then a JMPF at [436-35], a JMPT at [436-37],
   and finally the JMPT in question at [436-39].  We can now find the
   specific JMPT instruction in the disassembly.

   The disassembly in b3850dis: shows the following:

-----------------------------------------------------------------------------
  126      Ref_Display(Source) := INVALID;
-----------------------------------------------------------------------------
...
...
| 0000024C | A000007F        jmp               0x00000448
...
...
-----------------------------------------------------------------------------
  127  
  128  -------------------------------------------------------------------------------
  129  -- A change in the Preselected Baro Correction since Standard Correction was
  130  -- selected will indicate to display the Preselected Correction.  Truncate
  131  -- several bits from the Preselected Correction to ignore conversion error.
  132  -------------------------------------------------------------------------------
  133    elsif Standard_Correction then
-----------------------------------------------------------------------------
| 00000254 | A4008D35        jmpf              lr13, 0x00000328
| 00000258 | 70400101        nop

-----------------------------------------------------------------------------
  134      Inches_Preset := Disp_Comm.LS16_Type
  135                                 (EFIS_CP.Selected_Baro_Corr_Preset_In(Source)); 
  136      Preset := 
  137        (Ref_Display(Source) in PRESET_QFE..PRESET_QNH) and then
-----------------------------------------------------------------------------
...
...
| 0000027C | 417B8205        cplt              gr123, lr2, 5
| 00000280 | 87837808        sra               lr3, gr120, 8
| 00000284 | AC007B06        jmpt              gr123, 0x0000029C
| 00000288 | 70400101        nop
| 0000028C | 49748206        cpgt              gr116, lr2, 6
| 00000290 | AC007403        jmpt              gr116, 0x0000029C
| 00000294 | 70400101        nop
| 00000298 | 60B00101        cpeq              lr48, rsp, rsp
| 0000029C | A400B015        jmpf              lr48, 0x000002F0
| 000002A0 | 1589B000        move              lr9, lr48


   The JMPT in question is at address 290.  It is the result of a cpgt
   instruction.  The cpgt will JMPT only when the value in lr2 is
   greater than 6.  We can look further at the code to help us answer
   this problem.  The variable REF_DISPLAYED is defined to be of
   REF_DISPLAY_TYPE, which has the following enumerations:

   (INVALID,NONE,COLD_START,QFE,QNH,PRESET_QFE,PRESET_QNH).

   The fact that we never jumped on true for the cpgt indicates that
   we never set REF_DISPLAYED > PRESET_QNH.  Since values greater than
   PRESET_QNH are not possible, due to the enumerated type definition
   of REF_DISPLAYED, we can conclude that it is not possible to take
   this branch.  This is unreachable code due to the enumerated type
   of REF_DISPLAYED.

COVERAGE

   Please remember that ALL TCA warnings, such as those for boolean 
assignments, must be analyzed to ensure that we have not missed any 
important test cases.  The warnings are produced because TCA gets lost 
and cannot tell if our tests have adequately covered all the code paths.  
You need to make sure that the code paths indicated in the .tcr are 
covered by tests.  You need to include a reference to the testid which 
covers the tca warning condition.  The reference goes inside the.tce file.




back
1
Hosted by www.Geocities.ws