📅  最后修改于: 2021-01-07 06:28:09             🧑  作者: Mango
在本章中,我们将研究编程方法,文档和软件实现中的挑战。
在编码过程中,代码行不断增加,因此,软件的大小增加了。逐渐地,记住程序的流程几乎变得不可能了。如果忘记了软件及其基础程序,文件,程序的构造方式,那么共享,调试和修改程序将变得非常困难。解决方案是结构化编程。它鼓励开发人员使用子例程和循环,而不是在代码中使用简单的跳转,从而使代码更清晰并提高效率。结构化编程还有助于程序员减少编码时间并正确组织代码。
结构化编程说明了如何对程序进行编码。结构化编程使用三个主要概念:
自上而下的分析-总是制作一种软件来执行一些合理的工作。这种合理的工作在软件方面被称为问题。因此,了解如何解决该问题非常重要。在自上而下的分析下,问题被分解成小块,每一个都有重要意义。每个问题都得到单独解决,并且明确说明了有关解决问题的步骤。
模块化编程-进行编程时,代码被分解为较小的指令组。这些组称为模块,子程序或子例程。基于对自上而下分析的理解的模块化编程。它不鼓励在程序中使用“ goto”语句跳转,这通常会使程序流不可追踪。禁止跳转,并在结构化编程中鼓励使用模块化格式。
结构化编码-参考自上而下的分析,结构化编码按执行顺序将模块细分为更小的代码单元。结构化编程使用控制结构来控制程序的流程,而结构化编码使用控制结构来以可定义的模式组织其指令。
函数式编程是一种编程语言,它使用数学函数的概念。数学函数在接受相同的参数时应始终产生相同的结果。在过程语言中,程序的流程贯穿过程,即程序的控制权转移到被调用的过程。当控制流从一个过程转移到另一个过程时,程序将更改其状态。
在过程编程中,使用相同的参数调用过程可能会产生不同的结果,因为程序本身在调用时可能处于不同的状态。这是过程编程的一个属性,也是一个缺点,其中过程执行的顺序或时间变得很重要。
函数式编程提供了作为数学函数的计算手段,无论程序状态如何,都可以产生结果。这使得可以预测程序的行为。
函数式编程使用以下概念:
第一类和高阶函数-这些函数具有接受另一个函数作为参数或返回其他函数作为结果的功能。
纯函数-这些函数不包括破坏性更新,也就是说,它们不影响任何I / O或内存,如果不使用它们,则可以很容易地删除它们而不会妨碍程序的其余部分。
递归-递归是一种编程技术,其中函数调用自身并在其中重复程序代码,除非某些预定义条件匹配。递归是在函数式编程中创建循环的方式。
严格评估-一种评估作为参数传递给函数的表达式的方法。函数式编程有两种评估方法,严格(急切)或非严格(懒惰)。严格求值总是在调用函数之前对表达式求值。除非需要,否则非严格评估不评估表达式。
λ演算-大多数函数式编程语言都将λ演算用作其类型系统。通过评估λ表达式的出现来执行它们。
Common Lisp,Scala,Haskell,Erlang和F#是功能编程语言的一些示例。
编程风格是一组编码规则,所有程序员都遵循该规则来编写代码。当多个程序员在同一个软件项目上工作时,他们经常需要使用其他开发人员编写的程序代码。如果所有开发人员都不遵循某种标准的编程风格来编写程序,那么这将变得乏味或有时是不可能的。
适当的编程样式包括使用与预期任务相关的函数和变量名称,使用适当位置的缩进,注释代码以方便读者阅读和代码整体呈现。这使得程序代码对所有人都是可读和可理解的,从而使调试和错误解决更加容易。同样,正确的编码样式也有助于简化文档记录和更新。
编码风格的实践因组织,操作系统和编码本身的语言而异。
可以根据组织的编码准则定义以下编码元素:
命名约定-本节定义如何命名函数,变量,常量和全局变量。
缩进-这是行首剩余的空间,通常为2-8空格或单个制表符。
空格-通常在行尾省略。
运算符-定义编写数学,赋值和逻辑运算符的规则。例如,赋值运算符’=’前后应有空格,如“ x = 2”。
控制结构-仅以嵌套方式编写if-then-else,case-switch,while-until和控制流语句的规则。
行长和换行-定义一行中应该有多少个字符,大多数情况下,一行长80个字符。包装定义了如果太长,应该如何包装一条线。
函数-定义如何在有参数和无参数的情况下声明和调用函数。
变量-提到如何声明和定义不同数据类型的变量。
注释-这是重要的编码组件之一,因为代码中包含的注释描述了代码实际执行的操作以及所有其他相关描述。本节还有助于为其他开发人员创建帮助文档。
软件文档是软件过程的重要组成部分。一个写得很好的文档为了解软件过程提供了一个很好的工具和信息存储库。软件文档还提供有关如何使用产品的信息。
维护良好的文档应包括以下文档:
需求文档-该文档是软件设计师,开发人员和测试团队执行各自任务的关键工具。本文档包含目标软件的所有功能,非功能和行为描述。
该文档的来源可以是以前存储的有关该软件的数据,已经在客户端运行的软件,客户的访谈,调查表和研究。通常,它由高端软件管理团队以电子表格或文字处理文档的形式存储。
本文档是要开发的软件的基础,主要用于验证和确认阶段。大多数测试用例都是直接从需求文档中构建的。
软件设计文档-这些文档包含构建软件所需的所有必要信息。它包含: (a)高级软件体系结构, (b)软件设计细节, (c)数据流程图, (d)数据库设计
这些文档充当开发人员实施软件的存储库。尽管这些文档没有提供有关如何编码程序的任何详细信息,但它们提供了编码和实现所需的所有必要信息。
技术文档-这些文档由开发人员和实际编码人员维护。这些文档总体上表示有关代码的信息。在编写代码时,程序员还提到代码的目标,编写者,要求的位置,其作用和方式,代码使用的其他资源等等。
技术文档增加了从事同一代码的各种程序员之间的了解。它增强了代码的重用能力。它使调试容易且可追溯。
有各种各样的自动化工具可用,其中一些是编程语言本身附带的。例如,Java附带的JavaDoc工具可生成代码的技术文档。
用户文档-该文档与上述所有内容均不同。保留所有以前的文档,以提供有关软件及其开发过程的信息。但是用户文档说明了该软件产品应如何工作以及应如何使用它来获得所需的结果。
这些文档可能包括软件安装过程,操作指南,用户指南,卸载方法和特殊参考,以获取更多信息,例如许可证更新等。
在实施软件时,开发团队面临着一些挑战。下面提到其中一些:
代码重用-当今语言的编程接口非常复杂,并具有巨大的库功能。尽管如此,为了降低最终产品的成本,组织管理层还是希望重用早先为某些其他软件创建的代码。程序员在兼容性检查以及决定重用多少代码方面面临着巨大的问题。
版本管理-每次向客户发布新软件时,开发人员都必须维护与版本和配置有关的文档。该文档需要高度准确并且要准时可用。
目标主机-组织中正在开发的软件程序,需要为客户端的主机设计。但是有时,不可能设计出可以在目标机器上运行的软件。