summaryrefslogblamecommitdiff
path: root/devel/requirements/5_nonfunctional.xml
blob: bf5365af16b2b88c3ffd35202ffeb073f7f6ca04 (plain) (tree)
1
2
3
4
5
6
7
8





                                               
                                                                                                               
                                               

















                                                                             
                                                 

















                                                                        





















































                                                                                                                                                                                                                                                                                                                                                    

                                                  

                                     
                                                                                         


                                  
                                                                                                                                                                                                                                                                              


                                  
                                                                                                                     













                                                                   


                                          







                                                                                                                                                                                                


                                            



                                                                                                                                                                                                                


                                                  



                                                                                                                                                                         







                                                                                                                                                                 





                                                                                                                                             
                                                                                                                                                                                                                         


                                                  
                                                                                                                                                                                                      
























                                                                                                                                                                                                            

              
<?xml version="1.0" encoding="utf-8"?>
<chapter label="5" id="nonfunctional">
    <title>Non-functional Requirements</title>
    <para/>
    <section id="performance">
        <title>Performance Requirements</title>
        <para>For the purposes of this section, the base hardware platforms shall be defined as follows.</para>
        <variablelist id="Performance.BasePPC">
            <title>Base hardware platform, PowerPC</title>
            <varlistentry>
                <term>CPU</term>
                <listitem><para>PowerPC "G3" 750 at 600 MHz</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>RAM</term>
                <listitem><para>640 MB PC133</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Disk drive</term>
                <listitem><para>40 GB PATA</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Optical drive</term>
                <listitem><para>8X DVD-ROM drive</para></listitem>
            </varlistentry>
        </variablelist>
        <variablelist id="Performance.BaseIntel">
            <title>Base hardware platform, Intel</title>
            <varlistentry>
                <term>CPU</term>
                <listitem><para>Pentium III at 550 MHz</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>RAM</term>
                <listitem><para>256 MB PC133</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Disk drive</term>
                <listitem><para>80 GB PATA</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Optical drive</term>
                <listitem><para>24X CD-ROM drive</para></listitem>
            </varlistentry>
        </variablelist>
        <variablelist id="Performance.BootToX">
            <title>Performance.BootToX</title>
            <varlistentry>
                <term>Ambition</term>
                <listitem><para>Fast boot times for the installation environment.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Scale</term>
                <listitem><para>Seconds elapsed between the kernel being loaded by GRUB and the display of the initial Horizon UI window accepting input.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Meter</term>
                <listitem><para>Stopwatch testing performed five times on each base hardware platform.  Does not include <xref linkend="UI.Early.MultiGfx" />.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Must</term>
                <listitem><para>70 seconds.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Plan</term>
                <listitem><para>60 seconds.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Wish</term>
                <listitem><para>45 seconds.</para></listitem>
            </varlistentry>
        </variablelist>
        <variablelist id="Performance.ScreenChange">
            <title>Performance.ScreenChange</title>
            <varlistentry>
                <term>Ambition</term>
                <listitem><para>Responsiveness for screen changes in the Horizon UI.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Scale</term>
                <listitem><para>Milliseconds elapsed between choosing the "Next" button in the Horizon UI and the next screen being displayed and able to accept input.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Meter</term>
                <listitem><para>Printed statements to the stderr log including a timestamp when the system is aware of the Next button being pressed and when the system has fully loaded the next screen and is accepting input.  Test each screen through a complete installation flow on each base hardware platform ten times.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Must</term>
                <listitem><para>1000 milliseconds for the worst case.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Plan</term>
                <listitem><para>750 milliseconds for the worst case.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Wish</term>
                <listitem><para>300 milliseconds for the worst case.</para></listitem>
            </varlistentry>
        </variablelist>
        <variablelist id="Performance.Validation">
            <title>Performance.Validation</title>
            <varlistentry>
                <term>Ambition</term>
                <listitem><para>Fast validation of HorizonScript files.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Scale</term>
                <listitem><para>Seconds elapsed between the start and completion of a validation job.  Test validation of "typical" installation scripts on each base hardware platform 50 times.  Do not include network resources in installation scripts.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Meter</term>
                <listitem><para>Shell <command>time</command> built-in running the validation tool.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Must</term>
                <listitem><para>5 seconds.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Plan</term>
                <listitem><para>3 seconds.</para></listitem>
            </varlistentry>
            <varlistentry>
                <term>Wish</term>
                <listitem><para>1 second or less.</para></listitem>
            </varlistentry>
        </variablelist>
    </section>
    <section id="safety">
        <title>Safety Requirements</title>
        <formalpara id="Safety.DiskLock.UI">
            <title>Safety.DiskLock.UI</title>
            <para>The Horizon UI system shall not write any data to any block device, except to save log files and/or an HorizonScript file explicitly requested to be saved by the User.</para>
        </formalpara>
        <formalpara id="Safety.DiskLock.Runner">
            <title>Safety.DiskLock.Runner</title>
            <para>The Horizon Runner system shall not write any data to any block device until the HorizonScript is fully validated.</para>
        </formalpara>
    </section>
    <section id="security">
        <title>Security Requirements</title>
        <formalpara id="Security.PasswordHash">
            <title>Security.PasswordHash</title>
            <para>The Horizon UI system shall store passwords in memory in their hashed versions only, and securely clear the memory storage that contained plain-text passwords once the hash is stored.</para>
        </formalpara>
    </section>
    <section id="sqa">
        <title>Software Quality Attributes</title>
        <formalpara id="SQA.Flexibility.ScriptFormat">
            <title>SQA.Flexibility.ScriptFormat</title>
            <para>A programmer with two years of C++ experience shall be able to change the on-disk format of HorizonScript with no more than two hours of labour.</para>
        </formalpara>
        <formalpara id="SQA.Flexibility.Firmware">
            <title>SQA.Flexibility.Firmware</title>
            <para>The firmware support described under the UI.Firmware.* requirements branch shall be disableable at compile-time.</para>
        </formalpara>
        <formalpara id="SQA.Flexibility.FirmwareConf">
            <title>SQA.Flexibility.FirmwareConf</title>
            <para>The firmware support described under the UI.Firmware.* requirements branch shall be disableable at run-time via a configuration setting.</para>
        </formalpara>
        <formalpara id="SQA.Robustness.ScriptSync">
            <title>SQA.Robustness.ScriptSync</title>
            <para>The system shall provide a method to save the executed HorizonScript and log messages in the event of a fatal error.</para>
        </formalpara>
        <formalpara id="SQA.Usability.TTI.Experienced">
            <title>SQA.Usability.TTI.Experienced</title>
            <para>A User with experience installing other Linux distributions shall be able to complete the Horizon UI flow from language selection through <xref linkend="ui_perform" /> in less than 15 minutes.</para>
        </formalpara>
        <formalpara id="SQA.Usability.TTI.Green">
            <title>SQA.Usability.TTI.Green</title>
            <para>A User with no prior experience with Linux shall be able to complete the Horizon UI flow from language selection through <xref linkend="ui_perform" /> in less than one hour.</para>
        </formalpara>
        <formalpara id="SQA.Portability.Bitness">
            <title>SQA.Portability.Bitness</title>
            <para>A HorizonScript shall be readable on 32-bit and 64-bit computers regardless of what type of computer was used to create it.</para>
        </formalpara>
        <formalpara id="SQA.Portability.Endianness">
            <title>SQA.Portability.Endianness</title>
            <para>A HorizonScript shall be readable on big endian and little endian computers regardless of what type of computer was used to create it.</para>
        </formalpara>
        <formalpara id="SQA.Verifiability.BlockMock">
            <title>SQA.Verifiability.BlockMock</title>
            <para>The system shall support the ability to use "mock" block devices for purposes of testing and verification.</para>
        </formalpara>
        <formalpara id="SQA.Maintainability.Comments">
            <title>SQA.Maintainability.Comments</title>
            <para>All functions and methods in the system shall have a comment describing what action the function or method performs, and its inputs, outputs, and any side effects (if applicable).</para>
        </formalpara>
        <formalpara id="SQA.Maintainability.Methods">
            <title>SQA.Maintainability.Methods</title>
            <para>Each class in the system shall have no more than 20 methods.</para>
        </formalpara>
        <formalpara id="SQA.Maintainability.NoOPFuncs">
            <title>SQA.Maintainability.NoOPFuncs</title>
            <para>Each function or method in the system shall take no more than six input parameters.</para>
        </formalpara>
    </section>
</chapter>