NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

How to Evaluate Embedded Software package Testing Tools
Weight loss Evaluate an experiment Tool simply by Reading an information Sheet

All data bedding look more or less alike. The buzzwords are the same: "Industry Leader", "Unique Technology", "Automated Testing", and "Advanced Techniques". The screen photographs are similar: "Bar Charts", "Flow Charts", "HTML reports" and "Status percentages". It is imagination numbing.

Precisely what is Software Assessment?

All of us who may have done program testing recognize that testing comes in many tastes. For ease, we will work with three terms in this paper:

System Assessment
Integration Tests
Unit Examining
Everyone does some amount of program testing wherever they do a few of the same factors with this that the customers will do with it. Realize that we reported "some" rather than "all. inches One of the most basic causes of applications being fielded with insects is that unpredicted, and therefore untested, combinations of inputs are encountered by your application the moment in the field.

Significantly less many folks do integration assessment, and even fewer do model testing. In case you have done the use or system testing, you are probably painfully aware of the amount of check code that should be produced to separate a single record or selection of files from rest of the app. At the most stringent levels of assessment, it is not uncommon for the number of test software written to be larger than the number of application code being tested. As a result, these kinds of levels of tests are generally placed on mission and safety critical applications through markets such as aviation, skilled device, and railway.

What Does "Automated Testing" Mean?

It is well known which the process of system and whole body testing hand is very high-priced and time consuming; as a result every single tool that is certainly being sold inside this market is going to trumpet "Automated Testing" as their benefit. But some of us wonder what is "automated testing"? Software means different things to different people. To many planners the guarantee of "automated testing" implies that they can press a button and they will either get a "green check" proving the fact that their software is correct, or maybe a "red x" indicating failure.

Unfortunately it does not can be found. More importantly, in the event this tool do exist, will you want to employ it? Contemplate it. What could it mean for your tool to tell you that this code is normally "Ok"? Wouldn't it mean that the code is usually formatted beautifully? Maybe. Wouldn't it mean that the idea conforms to all your coding requirements? Maybe. Could it mean that your code is suitable? Emphatically Not any!

Completely automated testing will be attainable nor is it desired. Automation will need to address the parts of the testing process that happen to be algorithmic in nature and labor intensive. The following frees the software engineer to do higher benefits testing work such as creating better plus more complete lab tests.

The plausible question being asked every time evaluating tools is: "How much automation of tasks does this tool provide? inches This is the large gray place and the primary area of uncertainty when an firm attempts to calculate an ROI intended for tool expenditure.

Anatomy from Test Tools

Test Equipment generally supply a variety of overall performance. The names providers use will change for different tools, and some features may be lost from a bit of tools. For your common shape of reference, we have preferred the following details for the "modules" which may exist from the test tools you are studying:

Parser: The parser module allows the tool to comprehend your software. It reads the program, and creates an more advanced representation intended for the bad element (usually within a tree structure). Basically the comparable to the compiler does. The output, or "parse data" is frequently saved within an intermediate terminology (IL) computer file.

CodeGen: The code electrical generator module uses the "parse data" to set up the test control source bad element.

Test Funnel: While the check harness will be specifically section of the tool; the decisions manufactured in the test funnel architecture affect all other highlights of the software. So the funnel architecture is very important when assessing a tool.

Compiler: The compiler module enables the test tool to employ the compiler to make and web page link the test safety belt components.

Objective: The target component allows checks to be quickly run in several runtime conditions including support for emulators, simulators, inlayed debuggers, and commercial RTOS.

Test Editor tool: The test collector allows the user to use either a scripting vocabulary or a advanced graphical user interface (GUI) to setup preconditions and predicted values (pass/fail criteria) designed for test situations.

Coverage: The coverage component allows the user to get accounts on what parts of the code happen to be executed by each test.

Reporting: The reporting module allows the several captured data to be put together into job documentation.

CLI: A demand line interface (CLI) permits further automating of the use of the application, allowing the tool to generally be invoked via scripts, try to make, etc .

Regression: The regression module lets tests that are created from one type of the app to be re-run against brand-new versions.

Integrations: Integrations with third-party tools can be an interesting way to leverage your investment in a test instrument. Common integrations are with configuration managing, requirements operations tools, and static research tools.

Afterwards sections will elaborate on how you will should assess each of these adventures in your aspirant tools.

Classes of Test out Tools hcg diet plan Levels of Automation

Since every tools do not include almost all functionality or modules defined above and in addition because there is an extensive difference between tools in the level of robotisation provided, we are created the subsequent broad classes of test out tools. Aspirant test equipment will fall under one of these different types.

"Manual" equipment generally build an empty platform for the test harness, and require you to hand-code the test data and reasoning required to implement the test cases. Often , they will provide a scripting language and a set of selection functions which can be used to do prevalent things like evaluation assertions as well as create formatted reports designed for test paperwork.

"Semi-Automated" tools may placed a visual interface with some Automated functionality supplied by a "manual" tool, but will still call for hand-coding and/or scripting in-order to test more technical constructs. In addition , a "semi-automated" tool may perhaps be missing several of the modules that an "automated" program has. Inbuilt support to get target deployment for example.

"Automated" tools definitely will address every single functional areas or themes listed in the previous section. Equipment in this type will not need manual hands coding all of which will support all language constructs as well various target deployments.

Subtle Tool Differences

Moreover to checking tool features and automating levels, additionally, it is important to examine and review the test procedure used. This could hide dissimulé defects inside the tool, so it is important to not load the code in to the tool, but to also make an effort to build several simple evaluation cases for every method in the class that you will be testing. Will the tool produce a complete test out harness? Are usually stubs built automatically? Seeking the GUI to identify parameters and global data for quality cases and/or you necessary to write matrix as you could if you were examining manually?

In a similar fashion target assist varies greatly around tools. Be wary if a vendor says: "We support each and every one compilers and all targets out of your box". They are code text for: "You do all the work to make your tool operate your environment".

How to Evaluate Test Tools

This particular few sections will explain, in detail, information that you should analyze during the analysis of a application testing program. Ideally you should confirm this info with hands-on testing of each and every tool becoming considered.

Ever since the rest of that paper is very technical, we would like to explain several of the conventions applied. For each section, we have some title the fact that describes an issue to be considered, a description of why the problem is important, and a "Key Points" section to summarize solid items to consider.

Also, whilst we are speaking about conventions, our nation also make note of lingo. The term "function" refers to whether C efficiency or a C++ class method, "unit" represents a City (c) file or a C++ elegance. Finally, please remember, almost every tool can certainly somehow support the items pointed out in the "Key Points" parts, your job is usually to evaluate just how automated, simple to operate, and complete the support is usually.

Parser and Code Creator

It is relatively simple to build a parser for City (c); however it is incredibly difficult to create a complete parser for C++. One of the questions to be solved during instrument evaluation have to be: "How sturdy and older is the parser technology"? A bit of tool companies use professional parser technology that they license from parser technology corporations and some include homegrown parsers that they have constructed themselves. The robustness with the parser and code turbine can be affirmed by assessing the tool with complex code constructs that are associated with the bad element to be used for your project.

Tips:

- Is a parser technology commercial or homegrown?
-- What dialects are recognized?
- Are tool versions for City and C++ the same instrument or numerous?
- Is definitely the entire C++ language put in place, or are their particular restrictions?
- Does the device work with your most complicated code?

The Test Driver

The Test Golf club is the "main program" the fact that controls the test. Here is a straight forward example of a fabulous driver designed to test the sine celebration from the standard C local library:

#include

#include

int essential ()

float local;

local = sin (90.0);

if (local == 1.0) printf ("My Test Passed!n");

else printf ("My Test Failed!n");

return 0;



Although this is certainly a pretty straight forward example, a fabulous "manual" tool might require you to type (and debug) this kind of little minor amount of software by hand, a good "semi-automated" program might give you some sort of scripting language or hassle-free GUI to enter the incitement value meant for sine. An "automated" package would have a full-featured GUI for construction test scenarios, integrated code coverage examination, an integrated debugger, and an integrated target application.

I imagine you remarked that this driver and passengers has a pester. The irritate is that the trouble function actually uses radians not deg for the input direction.

Key Points

- Is the new driver automatically made or will i write the malware?
- Am i able to test the following without authoring any matrix:
- Evaluating over a choice of values
supports Combinatorial Assessment
- Info Partition Tests (Equivalence Sets)
- Email lists of knowledge values
-- Lists in expected beliefs
- Exclusions as expected values
- Stick handling
supports Can I arrange a sequence in calls in order to methods from the same check?

Stubbing Type Functions

Setting up replacements pertaining to dependent operates is necessary when you want to control the values that your dependent labor returns in a test. Stubbing is a very important part of the usage and device testing, because doing so allows you to separate the code under test from other aspects of your application, plus more easily activate the performance of the unit or sub-system of interest.

Plenty of tools call for the manual generation from the test program to make a stub do anything more than return a good static scalar value (return 0; )

Key Points

- Arestubs automatically generated, until now write bad element for them?
supports Are complex outputs recognized automatically (structures, classes)?
-- Can every single call of the stub come back a different benefits?
- Will the stub keep track of how many circumstances it was termed?
- Does the stub keep track of the type parameters above multiple calls?
- Are you able to stub calls to the regular C catalogue functions like malloc?

Evaluation Data

You will find two basic approaches that "semi-automated" and "automated" equipment use to use test scenarios. One is a fabulous "data-driven" architectural mastery, and the different is a "single-test" architecture.

For the data-driven buildings, the test safety belt is created for all of you units underneath test and supports all of the capabilities defined on those items. When a test is to be function, the instrument simply affords the stimulus info across an information stream say for example file take care of or a physical interface like a UART.

For any "single-test" buildings, each time a test is operate, the program will build the test drivers for that evaluation, and make and web page link it inside an executable. A couple of points on this; first of all, all the extra code creation required by single-test technique, and gathering and leading will take more hours at test execution time; second, you get building a split test control for each test case.

This means a candidate software might may actually work for a few nominal cases but might not exactly work accurately for more elaborate tests.

Tips

- May be the test safety belt data pushed?
- How much time does it take to execute a check case (including any malware generation and compiling time)?
- Can the test instances be modified outside of quality tool IDE?
- In cases where not, experience I conducted enough free play with the tool with complex program examples to know any restriction?

Automated Generation of Check Data

A few "automated" programs provide a level of automated test case addition. Different methods are used to do that. The following paragraphs describe a few of these approaches:

Min-Mid-Max (MMM) Test Cases testing will pressure a function at the bounds with the input info types. City (c) and C++ code often will not secure itself from out-of-bound advices. The electrical engineer has some efficient range within their mind and so they often do not protect themselves against in view of range inputs.

Equivalence Classes (EC) tests create "partitions" for each info type and select a sample of values right from each canton. The presumption is that ideals from the common partition can stimulate the applying in a similar way.

Arbitrary Values (RV) tests will certainly set blends of unique values per of the guidelines of a efficiency.

Basic Routes (BP) exams use the grund path examination to examine the first paths which exist through a operation. BP exams can instantly create a dangerous of branch coverage.

The main element thing to be aware of when considering automatic test out case development is the purpose that it assists. Automated checks are good intended for testing the robustness of this application code, but not the correctness. For correctness, you have to create tests that are depending on what the request is supposed to do, not what it does do.

Compiler Integration

The time of the compiler integration is normally two-fold. A single point is usually to allow the check harness elements to be compiled and attached automatically, without the user requiring you to figure out the compiler alternatives needed. The other level is to enable the test software to exclusive chance any terminology extensions that will be unique for the compiler being used. Especially with cross-compilers, it is very regular for the compiler to supply extensions that are not part of the C/C++ language specifications. Some equipment use the strategy of #defining these proxy to null strings. This kind of very unsavory approach is rather bad because it changes the thing code that compiler provides. For example , consider the following world-wide extern which has a GCC capability:

extern int MyGlobal __attribute__ ((aligned (16)));

If your prospect tool is not going to maintain the feature when denoting the global target MyGlobal, then code definitely will behave in another way during testing than it is going to when deployed because the storage area will not be lined up the same.

Key Points

- Does the tool easily compile and link the test harness?
-- Does the tool honor and implement compiler-specific language proxy?
- Which kind of interface could there be to the compiler (IDE, CLI, etc . )?
- Does the tool own an interface to import work settings out of your development setting, or need to they come to be manually brought in?
- If your tool does import venture settings, are these claims import aspect general purpose or maybe limited to specific compiler, or perhaps compiler young families?
- May be the tool included with your debugger to allow you to debug tests?

Assist for Examining on an Inserted Target

This particular section i will use the term "Tool Chain" to refer into the total cross development setting including the cross-compiler, debug interface (emulator), goal board, and Real-Time Operating System (RTOS). It is important to consider if the candidate tools have sturdy target integrations for your application chain, and to understand what in the tool should change if you migrate even to another tool chain.

Additionally , it is important to understand the automation level and robustness from the target whole body. As mentioned before: If a business says: "we support most compilers and everything targets away from the box. " They mean: "You do all of the checking to make your tool work in your setting. "

Preferably, the program that you pick out will allow for "push button" evaluation execution just where all of the sophistication of installing to the focus on and capturing the test effects back to the host is usually abstracted into the "Test Execution" feature so that no unique user activities are required.

An additional complication with embedded pin testing is usually hardware access. Often , the hardware are being developed in parallel while using software, or perhaps there is limited hardware supply. A key have is the capacity to start testing in a local environment and later transition for the actual hardware. Ideally, the tool artifacts are computer hardware independent.

Tips

- Is normally my instrument chain recognized? If certainly not, can it be supported? What does "supported" mean?
- Can I build tests on a host system and later try them for target testing?
-- How does the test harness get downloaded for the target?
-- How are test results snagged back to the host?
supports What locates, cross compilers, and RTOS are held off-the-shelf?
- Who creates the assist for a new tool chain?
- Is usually any portion of the tool cycle integration individual configurable?

Check Case Manager

Obviously, quality case collector is you choose to spend almost all of your online time by using a test program. If there is right automation from the previous products mentioned in this paper, then a amount of time due to setting up the test environment, as well as the target attachment should be nominal. Remember what we said at the beginning, you want to use the engineer's time for you to design better and more finish tests.

The main factor element to evaluate is how much difficulty is it to put together test input and anticipated values intended for non-trivial constructs. All equipment in this marketplace provide selected easy way to setup scalar values. For example , does your candidate tool provide a simple and intuitive way to create a class? Consider an chuck way to setup an STL container; such as a vector or maybe a map? These are definitely the things to judge in the evaluation case editor tool.

As with the rest of this newspaper there is "support" and then you can find "automated support". Take this into account when analyzing constructs that will be of interest for you.

Key Points

- Are allowed ranges to get scalar beliefs shown
supports Are array sizes revealed?
- Is it easy to make Min and Max ideals with tags rather than amount? This is important to keep the condition of the test if a type changes.
supports Are personal floating issue numbers reinforced (e. g. NaN, +/- Infinity)
- Can you can combinatorial assessments (vary your five parameters spanning a range and possess the tool perform all combos of those values)?
- Is a editor "base aware" to be able to easily go into values in alternate is build like hex, octal, and binary?
supports For anticipated results, would you easily enter into absolute tolerances (e. g. +/- zero. 05) and relative tolerances (e. g. +/- 1%) for floating point values?
- Can easily test data be easily brought in from other sources like Surpass?

Code Insurance policy coverage

Most "semi-automated" tools all the things "automated" equipment have some matrix coverage facility built in lets you see metrics which demonstrate portion of the application that is carried out by your evaluation cases. Several tools present this information through table form. Some show flow graphs, and some show annotated resource listings. Even though tables are good as a synopsis, if you are looking to achieve fully code insurance coverage, an annotated source directory site is the best. A really listing reveals the original reference code record with peinture for coated, partially covered, and open constructs. This allows you to immediately see the supplemental test conditions that are had to reach 100 percent coverage.

It is important to understand the effect of arrangement the added instrumentation on your app. There are two considerations: you are the increase dimensions of the objective code, and the other is a run-time overhead. It is important to understand if your app is storage or real-time limited (or both). This will aid you target which item is most essential for your application.

Tips

-What is a code specifications increase for each and every type of arrangement?
- What is the run-time increase for each type of arrangement?
- May possibly instrumentation be integrated into your "make" or maybe "build" program?
- Exactly how are the policy results provided to the customer? Are there annotated listings that has a graphical insurance coverage browser, or just tables of metrics?
supports How certainly is the coverage tips retrieved on the target? Certainly is the process flexible? Can info be buffered in RANDOM ACCESS MEMORY?
- Will be statement, side branch (or decision) and MC/DC coverage helped?
- Razer Basilisk Ultimate Driver be more captured within a execution?
supports Can policy data always be shared across multiple test out environments (e. g. can some insurance be snagged during system testing and grow combined with the insurance from device and integration testing)?
-- Can you stage through the evaluation execution making use of the coverage info to see the pass of influence through your utility without using a debugger?
-- Can you obtain aggregate insurance for all test runs in an report?
- Can the program be certified for DO-178B and for Medical Device supposed use?

Regression Testing

There must be two fundamental goals for adopting an experiment tool. The key goal is always to save period testing. And supply the solutions read this significantly, we imagine that you accept that! The secondary objective is to permit the created assessments to be leveraged over the existence cycle in the application. Which means that that the time invested in building tests should result in lab tests that are re-usable as the utility changes eventually and easy to configuration manage. The major matter to evaluate in the candidate program is what particular things should be "saved" in order to run the same tests down the road and how the re-running in tests is certainly controlled.

Key Points

> What record or files need to be configuration managed to regression test?
> Does the tool have a complete and documented Command line Line Software (CLI)?
> Are these files plain textual content or binary? This influences your power to use a diff utility to judge changes as time passes.
> Do the harness files resulted in by the application have to be construction managed?
> Perhaps there is integration with configuration management tools?
> Produce a test to get a unit, right now change the identity of a variable, and re-build your test environment. How long does this consider? Is it difficult?
> Does the instrument support database technology and statistical chart to allow pattern analysis from test achievement and program coverage eventually?
> Can you test multiple baselines of bad element with the exact set of test out cases quickly?
> Is allocated testing backed to allow amounts of the checks to be run using different physical machines to speed up trying?

Reporting

A good number of tools provides similar coverage. Minimally, they should create a simpleto understand report showing the inputs, predicted outputs, real outputs and a comparison with the expected and actual beliefs.

Key Points

> What output formats are supported? HTML? Text message? CSV? XML?
> Is it easy to get both equally a high level (project-wide) report and a detailed article for a one function?
> Certainly is the report articles user configurable?
> Is the statement format user configurable?

Whole body with Other Equipment

Regardless of the level of quality or usefulness of any particular program, all tools need to run in a multi-vendor environment. A lot of time any money has become spent simply by big companies ordering little firms with an idea of giving "the tool" that will carry out everything for everybody. The interesting thing is always that most often with the mega software suites, the entire is a lot below the value of the parts. It seems that firms often take on 4-5 really cool modest tools and integrate all of them into one cumbersome and bogus tool.

Key Points

> Which tools does your prospect tool incorporate with out-of-the-box, and can the end-user add more integrations?

Added Desirable Features for a Assessment Tool

The prior sections each and every one describe efficiency that should be in any tool this really is considered an automated test program. In the next couple of sections we will list some desirable features, along with a purpose for the benefit of the attribute. These features may possess varying enhanced applicability to all your particular venture.

True Whole body Testing hcg diet plan Multiple Products Under Check

Integration tests is an expansion of device testing. It truly is used to check interfaces around units and requires you to combine units that make up some sensible process. A large number of tools claims to support integration testing by linking the article code meant for real models with the test harness. This technique builds multiple files inside test control executable however , provides no more ability to encourage the capabilities within these kinds of additional items. Ideally, you can stimulate any kind of function inside any device, in any buy within a one test circumstance. Testing the interfaces somewhere between units can generally discover a lot of invisible assumptions and bugs from the application. Actually integration assessment may be a superb first step for those projects that contain no good unit tests.

Key Points

> Am i allowed to include multiple units from the test environment?
> Can I build complex test scenarios for people classes in which we promote a sequence from functions around multiple products within a single test case?
> Can I shoot code policy metrics meant for multiple systems?

Dynamic Stubbing

Dynamic stubbing means that you can change individual action stubs don / doff dynamically. This permits you to generate a test for a single function with all other functions stubbed (even whenever they exist in the equal unit simply because the function less than test). To get very difficult code, this is exactly a great have and it makes testing much easier to execute.

Key Points

> May stubs stay chosen at the function level, or only the unit level?
> Can function stubs be started up an off per test case?
> Are classified as the function stubs automatically resulted in (see products in previous section)?

Collection and Program Level Carefully thread Testing (System Testing)

One of many challenges of system testing is that the evaluation stimulus furnished to the completely integrated software may require a user pushing buttons, flipping changes, or writing at a console. If the application is definitely embedded the inputs might be even more complicated to control. Presume you could stimulate your fully involved application with the function level, similar to just how integration tests is done. This can allow you to build complex test out scenarios the fact that rely only on the API of the utility.

Some of the more contemporary tools allow you to test in this way. An additional benefit for this mode in testing is that you do not need the fundamental cause code to try the application. Simply need the meaning of the API (generally the header files). This strategy allows testers an automated and scriptable way to perform system testing.

Snello Testing and Test Motivated Development (TDD)

Test Motivated Development pledges to bring assessment into the creation process ahead of ever before. Instead of writing software code primary and then your unit testing as an afterthought, you build your testing before the application code. This can be a popular new approach to production and enforces a test initial and check often approach. Your programmed tool might support this technique of examining if you plan to use an Kbvkj Development method.

Bi-directional Utilization with Requirements Tools

If you care about associating requirements with test conditions, then it is usually desirable for any test program to combine with a wants management application. If you are considering this characteristic, it is important that the interface be bi-directional, so that when requirements are labeled to test cases, the test circumstance information that include test identity and move / neglect status might be pushed time for your requirements data bank. This will allow one to get a good sense of the completeness of your requirements testing.

Device Qualification

Should you be operating in some regulated natural environment such as professional aviation or perhaps Class 3 medical devices then you are obligated to "qualify" the event tools utilized to build and test your program.

The degree involves saving what the tool is supposed to carry out and testing that provide evidence that the package operates in obedience with the ones requirements. If at all possible a supplier will have these kinds of materials off-the-shelf and a brief history of customers which may have used the qualification data for your sector.

Key Points

> Does the tool dealer offer qualifying measures materials that are made for your particular target natural environment and program chain?
> What projects have successfully made use of these components?
> How are the materials accredited?
> How are the materials tailored and approved for a particular challenge?
> If this is a great FAA assignment have the degree materials really been successfully accustomed to certify to DO-178B Level A?
> Should it be an FDA project, have the tools also been qualified meant for "intended use"?

Conclusion

With any luck , this newspaper provides useful information in order to you to get around the tools of check tool companies. The comparative importance of all the items raised will be different several projects. Our final suggestions are:

> Measure the candidate equipment on program that is representative of the complexness of the program in your software
> Evaluate the nominee tools with all the same software chain which is used for building your project
> Talk to long-lasting customers of the vendor and inquire them a lot of the questions raised in this newspaper
> Ask about the tool tech support team team. Try them away by sending some concerns directly to all their support (rather than to the sales representative)

Finally, bear in mind most every tool can certainly somehow support the items talked about in the "Key Points" areas. Your job is always to evaluate the best way automated, easy to use, and complete the support is certainly.
Website: /
     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.