150 likes | 159 Views
Discover the key Software Engineering & QA practices at ALMA/ACS focusing on process, tools, testing, integration, and documentation. Explore makefile structures and module separation techniques for efficient development.
E N D
ALMA/ACS Software Engineering M. Zamparelli European Southern Observatory ACS Course Japan, July 2005
Software Engineering • Software Engineering and Quality Assurance activities: • Software Process • Document Reviews, Format, Templates • Development Environment • Integration Procedure • Coding Standards • Code Inspection • Configuration Management • Testing framework and assessment • Change Management ALMA/ACS Software Engineering
Major SE deliverables to ALMA • the tool to build the software with (Makefile) - in maintenance • the version controlled storage area where the software is (CVS) – in maintenance • the problem tracking system (Action Remedy) we use to track faults and change requests - pending replacement/upgrade • the system you document your software with (both inline and online – doxygen, TWiki) – in maintenance • The automated Night Reporting Infrastructure (NRI) which checks standards compliance– in maintenance • generic CASE tools (UML Modeling, Editors, Quality Control) – being updated, reviewed • standards for mostly all the process phases and deliverables ALMA/ACS Software Engineering
<module>/ws/src <module>/ws/object <module>/ws/include <module>/ws/lib <module>/ws/test <module>/ws/man <module>/lcu/src <module>/lcu/include <module>/lcu/man ……. Separation of WS from LCU code Separation of source from headers (for C,C++) Separation of application code from test code ownership assignment, homogeneity Directory Structure ALMA/ACS Software Engineering
esoMakefile • a project wide set of rules, centrally stored and managed. • every developer has to add only the module specific part: the name of the files to be treated! • allows exceptions (it is a normal Makefile) Based on the features of GNUmake and strictly correlated with the environment variable set up and the directory and Software Module standards. ALMA/ACS Software Engineering
<modName>/src/Makefile For every software modules: • defines what has to be build as a list of variables • includes the project-wide rules ($ACSROOT/include/acsMakefile) • defines the standard targets: all, man, install, clean (if necessary, they can be customized) ALMA/ACS Software Engineering
esoMakefile example USER_CFLAGS = USER_LIB = -lACE -lTAO -lTAO_DsLogAdmin -lTAO_CosNaming -lTAO_IORTable -lTAO_PortableServer -lTAO_Svc_Utils -lTAO_CosTrading -lTAO_DynamicAny -lTAO_CosProperty -lTAO_IFR_Client -lacsutil -lcdb -llogging -lCCS -lrecovery -lacserr INCLUDES = baciDevIO.h baciDevIOMem.h baciExport.h …. LIBRARIES = baci baci_OBJECTS = baciDevIOMem baciError \ baci baciTime baciThread baciValue baciDB \ baciRecovery baciCORBA baciDLL baciC baciS …… DBL_CLASSES = acsDefine acsDistributedObject acsProperty IDL_FILES = baci USER_IDL = -I$(ACE_ROOT)/TAO/orbsvcs/orbsvcs/ EXECUTABLES = maciActivate maciManager maciManagerShutdown maciActivatorShutdown \ nslist nsadd maciActivate_OBJECTS = maciActivate maciActivate_LIBS = maci maciManager_OBJECTS = maciManager maciManager_LIBS = maci JARFILES = abeansgen abeansgen_DIRS = si/ijs/kgb/generators ALMA/ACS Software Engineering
IDL_FILES ACE/TAO Omniorb JacORB C++ Stubs Java Stubs Python Stubs Real Time Linux Kernel Modules XSDBIND(XSDBIND_INCLUDE) Java Entity Classes RTAI_MODULES Java Component Helper Classes COMPONENT_HELPERS ABEANS Abeans Support Classes ACSERRDEF XML_IDL ACS XmlIdl compiler C++ Java Python Java Component Wrappers for Container Hierarchical Include directories BACK ALMA/ACS Software Engineering
Integration Layers : ALMA/ACS Software Engineering
Quality Assurance Tools ALMA/ACS Software Engineering
Automated Inspections (NRI) • Build reports (GO/NO-GO) • Tests (availability, execution results GO/NO-GO, coverage, memory behaviour) • Coding Standards (ALMA, MISRA, Motorola, Scott Meyers, Sun) • Inline documentation sufficiency • lines of code (total, per language, per module, production vs test code) • Algorithmic Complexity (McCabe) • module dependency diagrams • SPR statistics, number of commits, number of unused files • Java duplicate classes verification • Events and Channels in use • metrics on design quality (Robert C. Martin, for Java) ALMA/ACS Software Engineering
Configuration Management Codewizard JTest sloccount cmt/cmtjava JDepend doxygen graphviz Purify splint JContract NRI source reports Database WebServer Static Inspection (dynamic inspection machines) host1 host2 host3 ALMA/ACS Software Engineering
TEST OUTCOME DETERMINATION Purify Compiled Test DIR Makefile Purify Make all UNDETERMINED UNDETERMINED TAT test target TAT Purify make test test output success failure FAILED PASSED ALMA/ACS Software Engineering
Data archival for trend analysis NRI ALMA/ACS Software Engineering
LINKS • http://websqa.hq.eso.org/alma/snapshot/main entry page • http://websqa.hq.eso.org/alma/snapshotSL//ACS-Reports/TestCoverage-Linux/to see memory inspection for C/C++ and coverage for some modules ALMA/ACS Software Engineering