BEST PRACTICES AND RECOMMENDATIONS FOR WRITING GOOD SOFTWARE
Writing good software is not an easy task, it requires a lot of coding experience and skills. Therefore, inexperienced software developers or newbies suffer from this critical task. In this paper, we provide guidelines to help in this important context. It presents the most important best practices and recommendations of writing good software from software engineering perspective regardless of the software domain (whether for desktop, mobile, web, or embedded), software size, and software complexity. The best practices provided in this paper are organized in taxonomy of many categories to ease the process of considering them while developing software. Furthermore, many useful, practical, and actionable recommendations are given mostly in each category to be considered by software developers
 L. Baresi, E. Di Nitto, and C. Ghezi, “Toward open-world software: Issues and challenges”, Computer, vol. 39, no. 10, pp. 36-43, 2006.
 R. Kitchin and M. Dodge, The Nature of Software, 1st edition of Code/Space: Software and Everyday Life, MIT Press, 2011.
 T. F. Kusumasari, I. Supriana, K. Surendro, and H. Sastramihardja, “Collaboration Model of Software Development”, International Conference on Electrical Engineering and Informatics (ICEEI), pp. 1-6, 2011.
 S. Bansal and A. Goyal, “An Innovative Research on Software Development Life Cycle Model”, International Journal of Innovation Research in Computer and Communication Engineering (IJIRCCE), vol. 3, no. 11, pp. 10445-10451, 2015.
 M. Grottke, L. M. Karg, and A. Beckhaus, “Team Factors and Failure Processing Efficiency: An Exploratory Study of Closed and Open Source Software Development”, IEEE 34th Annual Computer Software and Applications Conference, pp. 188-197, 2010.
 S. Basri and R. V. O’Connor, “Software Development Team Dynamics in SPI: A VSE Context”, The 19th Asia-Pacific Software Engineering Conference, vol. 2, pp. 1-8, 2012.
 Live Coding Television, https://www.livecoding.tv/, accessed 01/08/2018.
 M. Storey, C. Treude, A. van Deursen, and L.-T. Cheng, “The Impact of Social Media on Software Engineering Practices and Tools”, The FSE/SDP workshop on Future of Software Engineering Research (FoSER), pp. 359-364, 2000.
 S. Kishore and R. Naik, Software Requirements and Estimation, Eighth reprint 2007, Tata Mc Graw Hill, 2001.
 H. Sarker, F. Faruque, U. Hossen, and A. Rahman, “A Survey of Software Development Process Models in Software Engineering”, International Journal of Software Engineering and Its Applications, vol. 9, no. 11, pp. 55-70, 2015.
 R. Land, “A Brief Survey of Software Architecture”, Mälardalen Real-Time Research Center (MRTC) Report, Mälardalen University, Sweden, 2002.
 C. STRIMBEI, O. DOSPINESCU, R.-M. STRAINU, and A. NISTOR, “Software Architectures - Present and Visions”, Informatica Economica, vol. 19, no. 4, pp. 13-27, 2015.
 R. Terra, M. T. Valente, and R. S. Bigonha, “An approach for extracting modules from monolithic software architectures”, IX Workshop de Manutenção de Software Moderna (WMSWM), pp. 1-18, 2012.
 D. Namiot and M. Sneps-Sneppe, “On Micro-services Architecture”, International Journal of Open Information Technologies, vol. 2, no. 9, pp. 24-27, 2014.
 C. Wohlin, “Is prior knowledge of a programming language important for software quality?”, Proceedings of International Symposium on Empirical Software Engineering, pp. 27-34, 2002.
 F. Montesi, C. Guidi, and G. Zavattaro, “Service-oriented programming with Jolie”, Web Services Foundations, pp. 81-107, 2014.
 M. Ben-Ari, Understanding Programming Languages, John Wiley and Sons, 1st edition, 2007.
 M. Bruch, E. Bodden, M. Monperrus, and M. Mezini, “IDE 2.0: Collective Intelligence in Software Development”, The FSE/SDP workshop on Future of Software Engineering Research (FoSER), 2010.
 NetBeans IDE, https://netbeans.org/, accessed 01/08/2018.
 W. O. Galitz, The Essential Guide to An User Interface Design, John Wiley and Sons, 2nd edition, 2002.
 Ş. Çetiner, “Effects of Office Environment on Software Developer’s Productivity”, 2012, http://scstrider.blogspot.com/
 K. Henney, 97 Things Every Programmer Should Know, 1st edition, O’Reilly, 2010.
 Apache Software Foundation, Apache Log4j v. 2.5 User’s Guide, 2015.
 P. Goodliffe, Code Craft: The Practice of Writing Excellent Code, 1st edition, No Starch Press, 2006.
 Google Java Style Documentation, http://checkstyle.sourceforge.net/reports/google-java-style.html, accessed 01/08/2018.
 Code Conventions Documentation, http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html, accessed 01/08/2018.
 Java Coding Standard Checker Tool, http://jcsc.sourceforge.net/, accessed 01/08/2018.
 Checkstyle Tool, http://checkstyle.sourceforge.net/, accessed 01/08/2018.
 Y. Li and H. Yang, “Simplicity: A key engineering concept for program understanding”, IEEE Workshop on Program Comprehension, pp. 98-107, 2001.
 R. Keswani, S. Joshi, and A. Jatain, “Software Reuse in Practice”, The 4th International Conference on Advanced Computing and Communication Technologies, pp. 159-162, 2014.
 Source Code Search Engine, https://searchcode.com/, accessed 01/08/2018.
 H. Zhu, “From OOP to SOP: What Improved?”, IEEE International Conference on Service Operations and Logistics, and Informatics, pp. 956-961, 2005.
 N. M. A. Munassar and A. Govardhan, “Comparison study between traditional and object-oriented approaches to develop all projects in software engineering”, The 5th Malaysian Conference in Software Engineering (MySEC), pp. 48-54, 2011.
 M. Rieger, S. Ducasse, and M. Lanza, “Insights into system-wide code duplication”, The 11th Working Conference on Reverse Engineering, pp. 100-109, 2004.
 J. L. Freitas, D. da Cruz, and P. R. Henriques, “A Comment Analysis Approach for Program Comprehension”, The 35th Annual IEEE Software Engineering Workshop, pp. 11-20, 2012.
 Javadoc Tool, http://www.oracle.com/technetwork/articles/java/index-jsp-135444.html, accessed 01/08/2018.
 M. Cataldo, A. Mockus, J. A. Roberts, and J. D. Herbsleb, “Software dependencies, work dependencies, and their impact on failures”, IEEE Transactions on Software Engineering, vol. 35, no. 6, pp. 864-878, 2009.
 M. W. Godfrey and D. M. German, “The Past, Present, and Future of Software Evolution”, Frontiers of Software Maintenance, pp. 129-138, 2008.
 M. Bernhart and T. Grechenig, “On the understanding of programs with continuous code reviews”, IEEE International Conference on Program Comprehension, pp. 192-198, 2013.
 Bac chelli and C. Bird, “Expectations, outcomes, and challenges of modern code review”, International Conference on Software Engineering, pp. 712-721, 2013.
 S. H. Trivedi, “Software Testing Techniques”, International Journal of Advanced Research in Computer Science and Software Engineering, vol. 2, no. 10, pp. 433-439, 2012.
 S. Shenoy, N. A. A. Bakar, and R. Swamy, “An adaptive framework for web services testing automation using JMeter”, IEEE 7th International Conference on Service-Oriented Computing and Applications (SOCA), pp. 314-318, 2014.
 M. Wahid and A. Almalaise, “JUnit framework: An Interactive Approach for Basic Unit Testing Learning in Software Engineering”, The 3rd International Congress on Engineering Education (ICEED), pp. 159-164, 2011.
 K. H. Bennett and V. T. Rajlich, “Software Maintenance and Evolution: a Roadmap”, The International Conference on The future of Software engineering (ICSE), pp. 73-87, 2000.
 C. F. Kemerer, “Software Complexity and Software Maintenance: A Survey of Empirical Research”, Annals of Software Engineering, vol. 1, no. 1, pp. 1-22, 1995.
 Y. Murakami and Y. Hori, “Automatic Generation of Usage Manuals for Open-Source Software”, The 6th International Conference on Complex, Intelligent, and Software Intensive Systems (CISIS), pp. 671-676, 2012.
 Dr.Explain Tool, http://www.drexplain.com/, accessed 01/08/2018.
 T. F. Bissyande, F. Thung, D. Lo, L. Jiang, and L. Reveillere, “Orion: A Software Project Search Engine with Integrated Diverse Software Artifacts”, The 18th International Conference on Engineering of Complex Computer Systems (ICECCS), pp. 242-245, 2013.
 Q. I. Sarhan, “Web Applications and Web Services: A Comparative Study”, Science Journal of University of Zakho (JUOZ), vol. 6, no. 1, pp. 35-41, 2018.
 Ron Jeffries, The Nature of Software Development: Keep It Simple, Make It Valuable, Build It Piece by Piece, 1st Edition, Pragmatic Bookshelf, 2015.
 Eagle Mode Zoomable User Interface, http://eaglemode.sourceforge.net/, accessed 01/08/2018.
 Cortana Voice User Interface, https://www.microsoft.com/en-in/windows/cortana, accessed 17/02/2019.
 Amazon Alexa Voice User Interface, https://www.amazon.com/b?node=17934671011, accessed 17/02/2019.
 Apple Siri Voice User Interface, https://www.apple.com/siri/, accessed 17/02/2019.
It is the policy of the Journal of Duhok University to own the copyright of the technical contributions. It publishes and facilitates the appropriate re-utilize of the published materials by others. Photocopying is permitted with credit and referring to the source for individuals use.
Copyright © 2017. All Rights Reserved.