Standardisering søknad builds

Philip Brown introduserer sin spalte og beskriver hvordan du sikrer at søknader er utarbeidet correctly.Standardising Application BuildsHopefully jeg vil være i stand til å gjøre dette til en interessant og stimulerende serien, utforske mange fasetter av Delphi utvikling. Først, la meg presentere meg selv. Jeg er en IT-konsulent og aktiv programmerer i nesten to tiår, akkurat i tide til å fange bortfallet av hullkort og innvarsle bruk av relativt tilgjengelig og billig datakraft. Over disse årene har jeg brukt mange språk, og det er min tro at Delphi er best generell Windows utviklingsverktøy tilgjengelig for øyeblikket, med en god blanding av kraftige konstruksjoner, brukergrensesnitt verktøy og støtte for sterke objektorientert utvikling teknikker. Ingen sølv kuler
Det er en funksjon i vår bransje som mange leverandører prøver å selge oss "silver bullet" løsninger til applikasjonsutvikling. Vi er kontinuerlig bombardert med informasjon forsøker å overbevise oss om at hvis vi bruker dette selskapets verktøy, at selskapets mellomvare eller neste selskapets database, så alle problemene rundt applikasjonsutvikling vil forsvinne. Over natten, vil vi være i stand til å produsere komplekse systemer på tid og innenfor budsjett, selv i nærvær av utilstrekkelig design dokumentasjon og endrede brukerkrav. I løpet av årene høyt nivå språk, software engineering, strukturerte metoder, 4GL-er, objektorientering, klient /server, mellomvare, rask programdesign og Java har alle blitt utropt av sine evangelister som komplette løsninger til programvareutvikling - listen fortsetter. Bitter erfaring viser at det er ingen magisk løsning, og det er ned til oss, som applikasjons designere og utviklere, å akseptere at i en verden der kundene har stadig høye forventninger til stadig mer komplekse systemer, må vi kontinuerlig med å forbedre kvaliteten på våre arbeid. I disse dager er det få programmer lever isolert og må samhandle med andre systemer i komplekse måter. Utvikling av moderne programmer blir vanskeligere heller enn lettere, og det er galt å anta at noen tilnærming gir answer.My spesiell interesse, som jeg håper å utforske i dette og fremtidige kolonner, er å fremme utviklingen av bedre Delphi applikasjoner. Anta to uavhengige programmerings lag får samme kort til å utvikle et program fra et komplett system krav dokument, og at både produsere en bug-gratis program (merk at vi er allerede i realms av programvareutvikling fantasy). Kan to forskjellige men funksjonelt identiske programmer skilles når det gjelder kvalitet? Hva gjør en søknad bedre enn en annen? I praksis vil hver enkelt beslutning gjort under utviklingen har en innvirkning på kvaliteten på programmet. Brukergrensesnitt beslutninger vil påvirke hvordan brukervennlig (eller fiendtlige) programmet er. Tilsynelatende enkle ting som knapper med lignende funksjoner som har samme navn gjennom hele programmet kan ha en fundamental innvirkning på hvor lett brukere vil bli kjent driften av programmet. Valget av database, enkel installasjon, kompatibilitet med andre programmer, selv utformingen av koden i enheter og variable navnekonvensjoner (eller fraværet av dem) kan alle ha en betydelig innvirkning eller det som oppfattes eller målbare begrepet hvor god en søknad er . Utviklere og brukere vil alle skjema oppfatninger om den relative kvaliteten på en gitt applikasjon, uten nødvendigvis å være i stand til å finne eller begrunne hvorfor de har tatt dette synet. Vurdere kvaliteten på et program omfatter nesten hvert eneste aspekt og implementering vedtak, og målet med denne kolonnen er å introdusere og diskutere måter som kvaliteten på leverte systemer kan bli betydelig høyere. Dette vil dekke begreper som brukergrensesnitt stil, dataregistrering og validering, vedvarende lagring av informasjon, og en stor mengde tid vil bli brukt diskutere program architecture.Studies har vist at den største enkeltstående bidrag i løpet av de siste tjue årene til å øke programkvalitet er begrepet data skjul. Objektorientering er den reneste uttrykk så langt i dette konseptet og denne kolonnen vil fremme gode OO teknikker hele. Vi vil utforske bygging av virkelig objektorienterte systemer og vise hvordan de fører til programmer som er betydelig raskere å utvikle og lettere å vedlikeholde. Underveis vil vi utfordre aksepterte måter å skrive Delphi programmer og demonstrere hvorfor alternative tilnærminger er ofte bedre. Konsistens er konge
Hvis det er en enkelt måte å vurdere kvaliteten på et program, ville min definisjon være "Er det konsekvent? " Konsistens kan anvendes på praktisk talt alle aspekter av et program, og i nesten alle tilfeller er det bedre å være mer konsistent enn mindre. I samsvar med hva? Vel, det kommer an på hva som blir evaluert. Tenk brukergrensesnittet: Har hver form vises skjermen sentrert, eller blir noen igjen på design tid koordinater? Er alle knappene samme størrelse og vises på en konsekvent horisontalt eller vertikalt plan? Er alle "OK" -knappen for å sette som standard for form (og noen merket "Ok")? Har alle former svare riktig når brukeren endrer Windows-innstillinger for skriftstørrelse og farger? For den saks skyld, ikke programmet se ut og oppføre seg som andre Windows-programmer? Er verktøylinjeikoner de samme som i andre programmer som utfører en lignende funksjon? Har de alle har et verktøytips? Skal lignende komponenter som brukes for samme funksjon i hele programmet eller er en eklektisk blanding av redigeringsbokser, maskert redigere, kalendere og dato /klokkeslett plukke kontroller alle brukt for brukerundersøkelser av datoer? En lignende sett av spørsmål kan rettes mot alle andre aspekter ved systemet. Har alle tabeller og felt har lignende navnekonvensjoner? Er kildekoden innrykk standard det samme i hver enhet? I alle tilfeller er det å foretrekke for disse faktorene til å være lik i hele programmet. Det betyr mye mindre nøyaktig hvilke standarder har blitt valgt, så lenge det som standard er valgt er allestedsnærværende (selv om det er ofte bedre valg enn andre, og disse vil bli diskutert). Automatisere Bygger
En liten, men veldig viktig, er faktor i vurderingen av konsistens slik at du alltid levere det samme produktet til kundene dine (med nye funksjoner intakt og noen bugs fjernet, forhåpentligvis). Fundamental til denne prosessen er konseptet med en build. Dette er definert som forbereder alle leveranser til en kjent tilstand før du sender dem til en klient. For de mest trivielle programmer leveransen kan være en enkelt kjørbar, men for flere betydelige systemer en build kan inkludere en rekke kjør, dynamiske koblinger biblioteker, hjelp fil, ressursfiler, konfigurasjonsinformasjon, databasetabeller og så videre. Hvordan kan vi sikre at alle disse filene er opprettet på riktig måte i hvert bygg, slik at eventuelle endringer som er gjort siden forrige build gjenspeiles på riktig måte? Bare innlasting av programmet i Delphi og tvinge en Build All garanterer ikke at du alltid vil levere et riktig program suite.Considering bare situasjonen for Delphi kjørbare, kan kompilatoren innstillingene har blitt endret siden forrige gang du gjorde en utgivelse for klienten. Hvis du glemmer å endre disse innstillingene tilbake (for eksempel deaktivere feilsøke symboler), vil du levere et fundamentalt annet program. Noen ganger er dette ikke noe å si, men hvis søknaden er avhengig av en bestemt stack størrelse eller optimalisering alternativ å fungere riktig så du kan støte på betydelige issues.Every søknad om offentlige versjonen skal ha en dokumentert byggeprosessen, fortrinnsvis en som er fullstendig automatisert. Størrelsen av anvendelsen og antall filer som skal produseres vil diktere kompleksiteten av denne prosess; for enkle applikasjoner en enkel batch-fil kan være alt som er nødvendig, men i ekstreme situasjoner kan trenge en dedikert miljø som skal gis (byggeprosessen for Windows NT brukes til å ta den beste delen av dagen på en quad-prosessor maskin) .I Delphi verden er det en rekke alternativer for å automatisere de fleste bygge prosesser: en batch-fil (DOS eller Windows Script) som kaller Delphi kommandolinje kompilatoren, ved hjelp av en "make" -verktøyet eller et egendefinert program dedikert til å bygge en bestemt pakke med deliverables.Inprise levere en versjon av den ærverdige "gjøre" utility med Delphi. "Make" utilities operere fra en tekstfil som beskriver kildefilene som et mål avhenger, og kommandoen (e) som kreves for å samle dem. I de tidlige dagene av programmering i C, bruk av "make" utilities var grunnleggende for å forbedre kvaliteten på utgitte programmer. Men en av de viktigste fordelene med "lage" var at det ga en måte å beskrive de avhengighetsforhold i C kildefiler, noe som Delphi (Pascal) "bruker" klausul gjør det svært bra. Derfor, lære litt uforståelige syntaks av filene som "gjør" avhenge har færre fordeler for Delphi programmers.For mange systemer som er skrevet med Delphi, vil et enkelt parti fil tilstrekkelig for et byggeprosessen. Denne batch-filen vil inneholde alle kommandoene som er nødvendige for å sikre at et komplett system er kompilert. Dette skal ikke bare inneholde kommandoer til å kompilere ressursfiler og Delphi prosjekter, men også for å sikre at den versjonen kontrolldatabasen er ferdig (du bruker kildekoden kontroll, ikke sant?) Figur 1 viser et eksempel DOS batch script for å sette sammen en bestemt prosjekt, som viser noen av de typer oppføringer typiske i et byggeprosessen. Den første delen av skriptet sikrer at alle kildekode enheter har blitt sjekket inn i versjonskontroll database - en viktig scene for å hindre kompilere et prosjekt mens utviklerne ikke har gjort sine endringer globalt tilgjengelig. Versjonskontrollsystemet som vises her er Source, men nesten alle kommersielle-grade systemer kan kjøres fra kommando line.After sikre alle filene er sjekket inn til kildekoden system, er hele kildekoden hentet og lagret i en ny katalog treet på maskinen utfører bygge. Selvfølgelig, for å bygge den nyeste versjonen av programmet alle de nyeste filene er nødvendige. Et interessant poeng her er at det er anbefalt at hvis maskinen utfører bygge er også en utviklers arbeidsstasjon, og deretter en annen katalog treet brukes til å holde kildekoden snarere enn den som brukes av utbygger. Grunnen til dette er at den bygger vil typisk kompilere programmet uten debuginformasjon og de fleste optimaliseringer på. Hvis katalogbanen ble delt med utviklingsmiljøet da programmereren trenger å huske å utstede en Build Alt for å unngå å knytte i enheter som ville være vanskelig å debug.Having hentet alle de siste kildekode, søknaden (e) bør da kompileres. For Delphi prosjekter kommandolinjen versjonen av kompilatoren (finnes i Delphi bin) kalt bør brukes dcc32. Denne versjonen av kompilatoren gjenkjenner mange parametere å tillate full kontroll fra kommandolinjen. Alternativt kan et sett av kompilatoren alternativer styres fra en konfigurasjonsfil (filtype CFG) med samme navn som selve prosjektet, som ofte er en mer synlig måte å kontrollere kompilering. Merk at Delphi 5 overskriver denne filen fra utviklingsmiljøet, en annen god grunn for å holde bygge kildekatalogen atskilt fra det for utvikling. Det er et spesielt nyttig flagg (-E) for dcc32 som flytter målfilen til en ny katalog, vanligvis peker til en ny katalog som vil inneholde bare de kompilerte filene som utgjør build.Of selvfølgelig mange systemer består av flere filer slike ressursfiler, hjelpefiler og så videre. Du kan bruke hva kommandolinje verktøy som er aktuelle for å kompilere målfilene; igjen, gir Delphi et kommandolinje kompilatoren for ressursfiler i brcc32.A DOS batch fil eller Windows Script kan være tilstrekkelig for mindre anlegg, men mer komplekse de krever kompleks logikk og kontroll kan ha nytte av å ha sitt eget byggeprosessen skrevet som en tilpasset søknad. Slike programmer kan skallet ut til kommandolinje versjoner av kompilatoren verktøy, men ofte kjøre dem gjennom en COM-grensesnitt som gir mer fleksibilitet og kontroll. I begge tilfeller begrepet byggeprosessen er den samme - å garantere at alle målfilene er samlet inn i en kjent og konsistent tilstand. Du kan bygge de tiltak du vil inn i byggeprosessen - for eksempel varsle utvikling eller QA teamet via e-post at build lyktes, og at en ny søknad suite er klar for testing eller delivery.It er en god politikk for å utføre en bygge på kjente og regelmessige intervaller. Å vite når en bygge skyldes tillater utvikling team for å jobbe mot dette målet og sikre at en konsistent sett av andeler er sjekket inn på versjonskontroll suite. Med mindre byggeprosessen tar så lang tid at det ville være upassende, er det en god regel å hindre arbeidet med søknaden til byggingen er fullført. Etter byggingen er ferdig, er det vanlig å kreve at alle utviklere å få den nyeste versjonen av alle enheter for å sikre at de ikke fungerer fra utdatert kildekoden. Konseptet bak en bygge er at det ikke er en del av utviklingen og testing prosessen - alt bygger forventes å kompilere riktig uten feil og generelt uten advarsler. "Breaking the build" ved å sende kodeendringer som deretter føre til at byggeprosessen mislykkes bør betraktes som en avskyelig forbrytelse å bli korrigert tidligst opportunity.All applikasjoner skrevet for generell meldingen bør ha sin egen automatisert byggeprosessen, som garanterer at en konsekvent sett leveranser utarbeides hver gang en utgivelse er gjort. Neste måned, vil vi se på verdiøkende funksjoner som kan settes inn i byggeprosessen for å lette sporing av mange versjoner av programmer co-eksisterende "i naturen" .Figure 1 - Eksempel DOS Batch script for å bygge enkelt kjørbar og ressurs fileFigure 2 - Eksempel filtype CFG filen kontrollere Delphi program compilationNext i serie