Site blog

Halaman: () 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 39 ()
Gambar dari MOHAMMAD NAZIR ARIFIN 5116201014
by MOHAMMAD NAZIR ARIFIN 5116201014 - Wednesday, 21 December 2016, 21:44
Anyone in the world

In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.

 

Uses of Design Pattern

Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. Reusing design patterns helps to prevent subtle issues that can cause major problems and improves code readability for coders and architects familiar with the patterns.

Often, people only understand how to apply certain software design techniques to certain problems. These techniques are difficult to apply to a broader range of problems. Design patterns provide general solutions, documented in a format that doesn't require specifics tied to a particular problem.

In addition, patterns allow developers to communicate using well-known, well understood names for software interactions. Common design patterns can be improved over time, making them more robust than ad-hoc designs.

 

 
Anyone in the world

Yes—because today, everyone’s a programmer…

We are bobbing on a sea of data, using our electronic devices to stay mobile and afloat. Each device requires software in order to operate, and the sheer number of users imagining new ways to use these gadgets—and the ease of creating instructions that tell the hardware what to do—almost guarantees that software will always be a step ahead of the machines running it.

“Pretty much everyone is able to write software these days,” says Srini Devadas, a professor in MIT’s Department of Electrical Engineering and Computer Science. “They may not realize it, but formatting in a word processing program or writing commands and scripts in Excel is doing a kind of rudimentary programming.”

It’s second nature for digital natives to spend an afternoon updating and reconfiguring their Facebook presence, and they can easily share their creations with their friends—who modify them even further. Conversely, “designing hardware from scratch or even redesigning it is very difficult for the ordinary person,” says Devadas. “In order to build something like an iPad or even the integrated circuits that go into our devices requires design knowledge, raw materials, and a manufacturing technology.” Plus, Devadas add, “It’s harder to share hardware. If I build a radio, I’d have to give you the physical object. But I could email you—and 10,000 other people—a program I’ve written, and they could all improve it.”

One challenge Devadas regularly sets for his students is to improve the efficiency of software so that every increase in functionality does not require an upgrade in hardware. Devadas teaches a course on software engineering (where students do a bit more than post updates on FB or create spreadsheets), and encourages his students to think through the challenges of hardware performance, which can inhibit the proper display of their creations that include games. “The hardware lags because it’s not capable of running the functionality fast enough,” he says.

When it comes to gaming and a software solution just won’t cut it (or you’re not able to take Devadas’s class and figure it out), he suggests you employ a partial hardware solution: “Just pop out the graphics card and replace it with a new one,” he says. New cards provide enough processing power to achieve the high speed required in gaming.—Sarah Jensen

source: http://engineering.mit.edu/ask/computer-software-always-step-ahead-hardware

Associated Kursus: KI142303BKI142303B
 
Gambar dari ACHMAD ANIM FAHMI 5116201060
by ACHMAD ANIM FAHMI 5116201060 - Wednesday, 21 December 2016, 17:25
Anyone in the world

There are four types of maintenance, namely, corrective, adaptive, perfective, and preventive. Corrective maintenance is concerned with fixing errors that are observed when the software is in use. Adaptive maintenance is concerned with the change in the software that takes place to make the software adaptable to new environment such as to run the software on a new operating system. Perfective maintenance is concerned with the change in the software that occurs while adding new functionalities in the software. Preventive maintenance involves implementing changes to prevent the occurrence of errors. The distribution of types of maintenance by type and by percentage of time consumed.

Types of Software Maintenance

Corrective maintenance

Corrective maintenance deals with the repair of faults or defects found in day-today system functions. A defect can result due to errors in software design, logic and coding. Design errors occur when changes made to the software are incorrect, incomplete, wrongly communicated, or the change request is misunderstood. Logical errors result from invalid tests and conclusions, incorrect implementation of design specifications, faulty logic flow, or incomplete test of data. All these errors, referred to as residual errors, prevent the software from conforming to its agreed specifications. Note that the need for corrective maintenance is usually initiated by bug reports drawn by the users.

In the event of a system failure due to an error, actions are taken to restore the operation of the software system. The approach in corrective maintenance is to locate the original specifications in order to determine what the system was originally designed to do. However, due to pressure from management, the maintenance team sometimes resorts to emergency fixes known as patching. Corrective maintenance accounts for 20% of all the maintenance activities.

Adaptive Maintenance

Adaptive maintenance is the implementation of changes in a part of the system, which has been affected by a change that occurred in some other part of the system. Adaptive maintenance consists of adapting software to changes in the environment such as the hardware or the operating system. The term environment in this context refers to the conditions and the influences which act (from outside) on the system. For example, business rules, work patterns, and government policies have a significant impact on the software system.

For instance, a government policy to use a single 'European currency' will have a significant effect on the software system. An acceptance of this change will require banks in various member countries to make significant changes in their software systems to accommodate this currency. Adaptive maintenance accounts for 25% of all the maintenance activities.

Perfective Maintenance

Perfective maintenance mainly deals with implementing new or changed user requirements. Perfective maintenance involves making functional enhancements to the system in addition to the activities to increase the system's performance even when the changes have not been suggested by faults. This includes enhancing both the function and efficiency of the code and changing the functionalities of the system as per the users' changing needs.

Examples of perfective maintenance include modifying the payroll program to incorporate a new union settlement and adding a new report in the sales analysis system. Perfective maintenance accounts for 50%, that is, the largest of all the maintenance activities.

Preventive Maintenance

Preventive maintenance involves performing activities to prevent the occurrence of errors. It tends to reduce the software complexity thereby improving program understandability and increasing software maintainability. It comprises documentation updating, code optimization, and code restructuring. Documentation updating involves modifying the documents affected by the changes in order to correspond to the present state of the system. Code optimization involves modifying the programs for faster execution or efficient use of storage space. Code restructuring involves transforming the program structure for reducing the complexity in source code and making it easier to understand.

Preventive maintenance is limited to the maintenance organization only and no external requests are acquired for this type of maintenance. Preventive maintenance accounts for only 5% of all the maintenance activities.

source: http://ecomputernotes.com/software-engineering/types-of-software-maintenance

Associated Kursus: KI142303BKI142303B
[ Mengubah: Wednesday, 21 December 2016, 17:29 ]
 
Gambar dari ACHMAD ANIM FAHMI 5116201060
by ACHMAD ANIM FAHMI 5116201060 - Wednesday, 21 December 2016, 17:23
Anyone in the world

Software maintenance involves modifying the existing software system and recording all the modifications made to it. For this, various maintenance tools are used. One of the commonly used maintenance tool is text editor. This tool creates a copy of the documentation or the code. The key feature of this tool is that it provides a medium to roll back (when required) from the current version of a file to the previous one. Several other tools used in software maintenance are listed in Table.

Table Software Maintenance Tools

NameDescription

File comparator

Compares two files or systems and maintains the record of the differences in the files. In addition, it determines whether the two files or the systems are identical.

Compiler and linker

Compilers are used to check syntax errors and in some cases, locate the type of errors. When the code is compiled, the linker is used to link the code with other components, which are required for the program execution. Linkers sometimes are used to track the version numbers of the components so that appropriate versions are linked together.

Debugger

Allows tracing the logic of the program and examines the contents of the registers and memory areas.

Cross-reference generator

Assures that the changes in code are in compliance with the existing code. When a change to a requirement is requested, this tool enables to know which other requirements, design, and code components will be affected.

Static code analyzer

Measures information about the code attributes such as the number of lines of code, number of spanning paths, and so on. This can be calculated when the new versions of the system are developed.

source: http://ecomputernotes.com/software-engineering/tools-for-software-maintenance

Associated Kursus: KI142303BKI142303B
[ Mengubah: Wednesday, 21 December 2016, 17:31 ]
 
Anyone in the world

Dalam rekayasa perangkat lunak, siklus hidup adalah urutan hidup sebuah perangkat lunak berdasarkan perkembangan perangkat lunak yang ditentukan oleh pengembang perangkat lunak itu sendiri. Sedangkan, proses adalah sekumpulan aktifitas maupun metode yang digunakan pengembang perangkat lunak. Proses merupakan bagian dari siklus hidup dalam rekayasa perangkat lunak.

Capture.PNG

Banyak sekali macam-macam siklus hidup perangkat lunak, tetapi yang paling terkenal adalah Waterfall Model. Waterfall merupakan sebuah proses hidup perangkat lunak memiliki proses yang linier dan sekuensial. Selain Waterfall, ada juga Spiral Model, yang merupakan sebuah proses hidup perangkat lunak yang menjurus dari besar ke kecil. Proses perangkat lunak yang terkenal adalah CMMI (Capability Maturity Model Integration) yang menganggap bahwa sebuah perangkat lunak harus terus-menerus mengalami pematangan proses hingga tiba saatnya untuk melakukan optimasi perangkat lunak itu sendiri.

 
Gambar dari KRISTOFORUS FALLO 5116201042
by KRISTOFORUS FALLO 5116201042 - Wednesday, 21 December 2016, 00:12
Anyone in the world

SOFTWARE TESTING

  1. Introduction

Pengujian adalah kegiatan penting dalam rekayasa perangkat lunak. Dalam istilah sederhana, itu dilakukan untuk mengamati eksekusi dari sistem perangkat lunak untuk memvalidasi apakah itu berperilaku sebagaimana dimaksud dan mengidentifikasi potensi kerusakan. Pengujian banyak digunakan dalam industri untuk jaminan kualitas: memang, oleh langsung meneliti perangkat lunak dalam pelaksanaan, ia menyediakan umpan balik yang realistis dari perilaku dan karena itu tetap pelengkap tak terhindarkan untuk teknik analisis lainnya.

 

KOMPONEN-KOMPONEN SOFTWARE TESTING DAN CIRI-CIRINYA

No

Nama Testing

Definisi

Ciri – ciri

1

Regression test

pengujian ulang terhadap unit, component, proses, atau keseluruhan aplikasi setelah perbaikan suatu kesalahan dilakukan.

  • setelah perbaikan suatu kesalahan dilakukan
  • melakukan pemantauan kualitas dari output yang dihasilkan
  • memantau ukuran file
  • waktu yang dibutuhkan untuk melakukan tes & kompilasi

2

Volume Testing

Pengujian Volume memverifikasi apakah sistem dapat menangani volume besar
dari data

  • sistemyang menggunakanruang diskuntuk menyimpan filesementara
  • beberapa sistemmungkin menjadilambat ketika
    volume tinggi
  • export atau import database
  • pencarian yang mengambilbanyak waktu

3

Stress Testing

bertujuan untuk melihat apakah perangkat lunak secara keseluruhan mampu menangani kebutuhan sumberdaya yang tidak normal (mencakup kuantitas, frekuensi / volume)

meskipun perangkat lunak sudah berjalan baik di setiap fiturnya, pastikan juga perangkat lunak tetap berjalan baik saat diberi ‘beban berat’

4

Usability Testing

Bertujuan untuk menentukan apakah sistem tersebut user friendly apa tidak.

  • Mengajukan beberapa pertanyaan kepada user
  • Berdasarkan pengalaman dan edukasi dan pemahaman bahasa user
  • Menguji inkonsisten pada sistem UI (screen layout, mouse click dll)
  • Redudansi pada input data

5

Security Testing

test untuk memastikan pengamanan sudah baik

Mengusahakan untuk membuat sistem yang minimal lama untuk dibobol

6

Performance Testing

untuk mengukur performa sistem yang dibangun, menentukan kecepatan atau efektivitas.

  • Melakukan tes dengan pengukuran dan evaluasi jaringan program computer, perangkat lunak atau perangkat
  • waktu respon kepada sistem (user request)
  • jumlah waktu proses CPU (time required)

7

Storage Testing

Pengecekan object penyimpanan

 

8

Configuration Testing

Untuk mengecek kegagalan sistem dan kinerja kombinasi antara hardware dan software

Gabungan hardware dan software

9

Compatibility Testing

Berhubungan dengan masalah konversi. Misalnya ada sebuah program lama, kemudian akan diganti dengan program yang baru

Apakah program baru bisa bekerja dengan program lama dan membaca data lama

10

Reliability Testing

hubungan penting dengan banyak aspek, termasuk struktur, dan jumlah pengujian telah ditujukan.

Berdasarkan profil operasional

11

Recovery Testing

Jika ada suatu produk mengeluarkan error, produk itu akan melakukan recovery.

Recover test akan melihat gagal tidaknya prosedur untuk recover seluruh file.

 

  1. Regression

Pengujian regresi memvalidasi apakah fitur yang seharusnya untuk tidak terpengaruh oleh rilis baru masih bekerja sebagaimana mestinya. Tes ini membantu menghindari “Satu langkah maju, dua langkah mundur” masalah: modifikasi pemrograman dirancang untuk memperbaiki satu masalah tidak sengaja membuat yang baru. Berapa banyak regresi pengujian harus Anda lakukan? Itu tergantung pada tingkat risiko. Seringkali, organisasi menciptakan papan ulasan masalah untuk menetapkan standar untuk pengujian regresi dan untuk mengevaluasi pada kasus-per-kasus tingkat pengujian regresi diperlukan.

Merupakan bagian penting dari masing-masing tahap proses testing. Regression Testing mencakup pengujian ulang terhadap unit, component, proses, atau keseluruhan aplikasi setelah perbaikan suatu kesalahan dilakukan. Regression Testing memastikan permasalahan yang terjadi telah ditanggulangi, dan tidak terdapat permasalahan baru yang timbul sebagai efek perbaikan tersebut. Selain itu, tahap ini tidak hanya berguna untuk melakukan pengujian aplikasi, tetapi dapat juga digunakan untuk melakukan pemantauan kualitas dari output yang dihasilkan. Sebagai contoh, Regression Testing memantau ukuran file, waktu yang dibutuhkan untuk melakukan suatu tes, waktu yang dibutuhkan untuk melakukan kompilasi,danlainsebagainya.

  1. Volume

Pengujian Volume memverifikasi apakah sistem dapat menangani volume besar dari data.Why ini perlu? Beberapa sistem memecah hanya ketika volume tinggi, seperti sistem yang menggunakan ruang disk untuk menyimpan file sementara selama semacam itu. Ketika volume tinggi, sistem crash karena tidak ada cukup ruang untuk file-file sementara. Juga, beberapa sistem mungkin menjadi tak tertahankan lambat ketika volume tinggi. Seringkali, hal ini disebabkan fakta bahwa tabel data menjadi begitu besar bahwa pencarian dan pencarian mengambil banyak waktu.

Menguji sistem dengan nilai yang melebihi maksimum load. Stressing suatu sistem menyebabkan tidak mudah kerusakan dengan mencek kehilangan service yang tidak diduga ataupun data yang hilang. Test ini mirip dengan stress testing. Bedanya adalah ini datanya besar. Contohnya: export atau import database…import data sebesar 10GB.

  1. Stress testing

adalah salah satu jenis pengujian sistem (system testing). Pengujian ini bertujuan untuk melihat apakah perangkat lunak secara keseluruhan mampu menangani kebutuhan sumberdaya yang tidak normal (mencakup kuantitas, frekuensi, maupun volume).  Apakah data dalam jumlah sangat besar, dengan frekuensi sangat tinggi, serta volume yang sangat besar mengakibatkan performansi atau bahkan fungsionalitas perangkat lunak terganggu atau tidak…

Jadi, meskipun perangkat lunak anda sudah berjalan baik di setiap fiturnya, pastikan juga perangkat lunak tetap berjalan baik saat diberi ‘beban berat’. Jangan hanya menguji dengan data uji yang terbatas… Stress testing itu mahal, kenapa mahal? Karena sesuai tujuan testing yaitu mengetest seberapa handal suatu produk, jadi jika kita akan mengetest suatu produk dengan menggunakan stress test maka kita harus menggunakan produk aslinya yang sudah jadi lalu kita benar-benar mengetestnya.

Contohnya: suatu perusahaan melakukan stress test iPhone, mereka akan mengetes kekuatan iPhone dan klaim-klaim apple tentang iPhone (layar anti gores). Caranya? Perusahaan itu membeli iPhone, lalu salah satu tester menjatuhkan iPhone dari ketinggian, setelah dijatuhkan dinyalakan lagi, ternyata bisa. Walaupun layar hancur / pecah ternyata iPhone masih bias dinyalakan. Kemudian tester mencoba  anti goresnya dengan menggoreskan kunci, beton dan benda-benda tumpul atau tajam ke layar iPhone.

Stress test memang mahal, tapi dari situ kita benar-benar membuktikan apabila produk yang ditest itu bagus. Stress test sering dilakukandi luar negeri, karena mereka mempunyai modal yang banyak untuk melakukan stress test ini.

  1. SECURITY

Teknologi semakin berkembang dan tidak akan habis, semakin kompleks. Begitu juga dengan security atau keamanan. Security test adalah suatu test untuk memastikan pengamanan sudah baik. Sebisa mungkin walaupun masih bisa dibobol, kita harus bisa membuat si pembobol itu lama membobolnya. Jadi kita bisa memperbaiki sistem kita dan pembobol itu tidak jadi  membobol sistem kita.

Banyak sekali cara atau metode yang digunakan dalam security testing ini. Antara lain:

  • Brute Force
    biasa digunakan untuk membobol password atau cryptograpy, tapi prosesnya lama karena menggunakan model random
  • Fuzzing
  • Reverse engineering
    biasa digunakan untuk membobol aplikasi close source
  • Data injection
    caranya adalah dengan cara memasukkan data atau inputan secara random
  • Sniffing
    melacak, mencuri dan masih banyak lagi
  1. Performance testing

Test ini berfungsi untuk mengukur performa sistem yang dibangun. Bisa menggunakan aplikasi benchmark atau profiler. Dengan benchmark kita bisa mengukur performa Hardisk, VGA card, browser, dan lain-lain. Bahkan, kita bisa melakukan perbandingan (compire) antar suatu perangkat lunak atau keras.

Performance Testing merupakan proses menentukan kecepatan atau efektivitas, jaringan program computer, perangkat lunak atau perangkat. Proses ini dapat melibatkan test kuantitatif yang dilakukan di laboratorium, seperti mengukur waktu respon atau jumlah MIPS (Millions of Intructions per Second) pada fungsi sistem. Atribut kualitatif seperti kehandalan, skalabilitas dan interoperabilitas juga dapat dievaluasi. Performance Testing sering dilakukan dalam hubungannya dengan stress testing. Performance Testing dapat memverifikasi bahwa sistem memenuhi spesifikasi diklaim oleh produsen atau vendor. Proses ini dapat membandingkan dua atau lebih perangkat atau program dalam hal parameter seperti kecepatan, kecepatan transfer data, bandwidth, throughput, efisiensi atau keandalan.

Performance Testing juga dapat digunakan sebagai alat bantu diagnostik dalam menemukan kemacetan komunikasi. Seringkali sistem akan bekerja jauh lebih baik jika masalah ini diselesaikan di satu titik atau dalam komponen tunggal. Misalnya, bahkan komputer tercepat akan berfungsi buruk di Web hari ini jika koneksi terjadi di hanya 40 sampai 50 Kbps (kilobit per detik). Lambatnya kecepatan transfer mungkin dapat juga disebabkan pada hardware, tetapi juga dapat berhubungan dengan masalah perangkat lunak, seperti :

  • Terlalu banyak aplikasi yang berjalan pada waktu yang sama
  • Sebuah file yang rusak pada WEB browser
  • Adanya eksploitasi keamanan
  • Perangkat lunak Anti-virus
  • Adanya malware aktif pada harddisk
  1. Compatibility testing

Test ini berhubungan dengan masalah konversi. Misalnya ada sebuah program lama, kemudian akan diganti dengan program yang baru. Apakah program baru bisa bekerja dengan program lama dan membaca data lama. Seperti aplikasi office Microsoft Office, kita membuat aplikasi format text di Ms.Office 2003 bisa dibuka di Ms.Office 2007, tapi jika kita membuka file 2007 tidak bisa dibuka di Ms.Office 2003. Masih banyak lagi contoh lainnya.

  1. Recovery testing

Jika ada suatu produk mengeluarkan error, produk itu akan melakukan recovery. Contohnya dalam aplikasi corel draw. Jika waktu proses membuat desain tiba-tiba aplikasi error dan terpaksa harus ditutup dan kita belum menyimpan file tersebut atau belum update file tersebut maka aplikasi corel ini akan melakukan recovery. Ketika kita membuka corel kembali, setelah merestart atau refresh komputer kita maka corel akan memberikan dan menawarkan kepada kita apakah kita akan melakukan recovery. Jika iya, maka corel akan mengembalikan posisinya saat desain kita tadi sebelum error. Biasanya suatu produk yang mempunya fitur recovery bisa mempunyai setting recovery yang berbeda-beda.

  1. Software reliability

Memiliki hubungan penting dengan banyak aspek, termasuk struktur, dan jumlah pengujian telah ditujukan. Berdasarkan profil operasional, pengujian dapat digunakan sebagai metode sampling statistik untuk memperoleh data kegagalan untuk tujuan estimasi keandalan.

 REFERENSI

Antonia Bertolino (http://www.isti.cnr.it/People/A.Bertolino) is Software Testing Research: Achievements, Challenges, Dreams

https://sweetzarina.wordpress.com/2014/10/23/software-testing/

 

 
Anyone in the world

Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya,

Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik peranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

 
Gambar dari DINIAL UTAMI NURUL QOMARIAH 5116201026
by DINIAL UTAMI NURUL QOMARIAH 5116201026 - Tuesday, 20 December 2016, 21:42
Anyone in the world

Statechart diagram is one of the five UML diagrams used to model dynamic nature of a system. They define different states of an object during its lifetime. And these states are changed by events. So Statechart diagrams are useful to model reactive systems. Reactive systems can be defined as a system that responds to external or internal events.

Statechart diagram describes the flow of control from one state to another state. States are defined as a condition in which an object exists and it changes when some event is triggered. So the most important purpose of Statechart diagram is to model life time of an object from creation to termination.

Statechart diagrams are also used for forward and reverse engineering of a system. But the main purpose is to model reactive system.

Following are the main purposes of using Statechart diagrams:

    To model dynamic aspect of a system.

    To model life time of a reactive system.

    To describe different states of an object during its life time.

    Define a state machine to model states of an object.

 
Gambar dari DINIAL UTAMI NURUL QOMARIAH 5116201026
by DINIAL UTAMI NURUL QOMARIAH 5116201026 - Tuesday, 20 December 2016, 21:40
Anyone in the world

In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects.

The class diagram is the main building block of object-oriented modelling. It is used both for general conceptual modelling of the systematics of the application, and for detailed modelling translating the models into programming code. Class diagrams can also be used for data modeling.[1] The classes in a class diagram represent both the main elements, interactions in the application, and the classes to be programmed.

 
Gambar dari DINIAL UTAMI NURUL QOMARIAH 5116201026
by DINIAL UTAMI NURUL QOMARIAH 5116201026 - Tuesday, 20 December 2016, 21:39
Anyone in the world

A Sequence diagram is an interaction diagram that shows how objects operate with one another and in what order. It is a construct of a message sequence chart.

A sequence diagram shows object interactions arranged in time sequence. It depicts the objects and classes involved in the scenario and the sequence of messages exchanged between the objects needed to carry out the functionality of the scenario. Sequence diagrams are typically associated with use case realizations in the Logical View of the system under development. Sequence diagrams are sometimes called event diagrams or event scenarios.

A sequence diagram shows, as parallel vertical lines (lifelines), different processes or objects that live simultaneously, and, as horizontal arrows, the messages exchanged between them, in the order in which they occur. This allows the specification of simple runtime scenarios in a graphical manner.

 
Halaman: () 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 39 ()