在这一章我们学习关于计算机编程方,文档和软件实现中的挑战.
在程序编码的过程中,代码行不断增加,因此该软件增加大小。渐渐地,它变得几乎不可能记住程序的流程。如果忘记了如何软件和它的底层程序,文件,程序构造它,然后变得非常难以共享,调试和修改程序。该解决方案是结构化编程. 它允许开发人员使用的子程序,而不是在代码中使用简单的跳转,从而带来清晰的代码中,提高其效率结构化编程循环还可以帮助程序员减少编码时间和组织代码号令.
结构化程序设计告诉如何程序被编码的。结构化程序设计采用三个主要概念:
自顶向下的分析 - 软件还总是要进行一些理性的工作。这种合理的工作被称为软件中用语问题。因此,我们知道如何解决的问题是非常重要的。下自顶向下的分析,该问题被分解成小块,其中每一个具有一定的意义。每个问题都单独解决,步骤明确说明如何解决该问题。
模块化编程 - 编程时,代码被分解成较小的组的指令。这些基团被称为模块,子程序或子例程。基于自顶向下的分析理解模块化编程。它不鼓励使用“转到”在节目中,这往往使程序流程的非可追溯报表跳跃。跳跃是禁止的,模块化的形式鼓励在结构化编程.
结构化编码 - 在自顶向下分析参考时,结构编码的子划分的模块插入的代码还小的单位在其执行的顺序。结构化程序使用控制结构,其控制程序的流程,而结构化的编码使用控制结构来组织中定义的模式的指示.
函数式编程的编程语言把它使用数学函数的概念,方法。在数学中的函数应该总是产生在收到相同的参数相同的结果。在程序语言中,程序的流程通过程序运行时,例如,程序的控制被转移到被调用的过程。而控制流从一个程序到另一个传输,程序改变其状态。.
在程序编程,有可能为一个程序在执行中的相同参数的时间产生不同的结果,因为程序本身可以在不同的状态。这是一个属性,以及一个缺点的过程编程的,其中,所述程序执行的顺序或定时变得很重要.
函数式编程提供了计算的数学函数,其产生的程序状态的结果,不论手段。这使得能够预测程序的行为.
函数式编程使用以下概念:
第一级和高阶功能 - 这些功能有能力接受另一个函数作为参数或返回他们的其他功能的效果.
纯函数 - 这些函数不包括破坏性的更新,即,它们不影响任何I / O或存储器,如果它们不使用时,它们可以很容易地在不妨碍该程序的其余部分移除.
递归 - 递归是一种函数就是函数调用自身,重复的程序代码中,除非一些预先定义的条件相匹配的编程技术。递归是建立在函数式编程循环的方式.
严格的评价 - 它是评价传递给一个函数作为参数的表达式的方法。函数式编程有两种评价方法,严格的(渴望)还是非严格(偷懒)。严格评价调用该函数之前,请务必计算表达式。非严格的评估不计算表达式,除非它是必要的.
λ-演算 - 大多数函数式编程语言使用λ演算它们的类型系统。 λ-表达式被所发生的评估他们处决.
Common Lisp,斯卡拉,哈斯克尔,二郎和F#是函数式编程语言的一些例子.
编程风格设定的编码规则之后所有的程序员写的代码。当多个程序员在同一个软件项目工作,它经常需要与写的其他一些开发者的程序代码工作。这变得乏味,或有时是不可能的,如果所有的开发人员不遵守一些标准的编程风格编写程序.
适当的编程风格,包括使用函数和变量名相关的预期任务,用精心布置的缩进,注释代码阅读器和代码的整体表现带来的便利。这使得程序代码阅读和理解所有,这又使得求解更容易调试和错误。此外,适当的编码风格有助于缓解文档和升级.
编码风格的变化与组织,操作系统和语言.
在一个组织的编码规则如下编码元件可以被定义:
命名约定s - 这部分定义如何命名函数,变量,常量和全局变量.
缩进 - 这是留在一行的开头的空间,通常2-8空白或单一标签.
空白 - 它通常被删去,在一行的末尾.
运营商 - 定义写数学,分配和逻辑运算符的规则。例如,赋值运算符'='应具有空间之前和之后,如在“X= 2”。.
控制结构 - 写IF-THEN-ELSE,区分开关的规则,同时,直到和控制流语句仅在嵌套的方式。.
线路长度和包装 - 定义多少个字应该是有一条线,大多是一行是80个字符长。包装定义了一条线要包好,如果太长.
功能 - 此功能定义应如何申报和调用,使用和不使用参数.
变量 - 这提到了不同的数据类型的变量是如何声明和定义.
注释 - 这提到了不同的数据类型的变量是如何声明和定义.
软件文档是软件过程的一个重要组成部分。良好的书面文件提供一个很好的工具和信息资源库的方式要了解软件的过程。软件文档还提供了有关如何使用该产品的信息.
维护良好的文件应包括下列文件
需求文档 - 本文档可以作为软件设计,开发和测试团队,以履行各自的任务关键工具。本文件包含的意软件的所有功能,非功能性和行为的描述.
S本文件的来源可以事先存储的数据有关的软件,已经运行的软件在客户端结束的时候,客户的访谈,问卷调查和研究。通常它被存储在与高端软件管理团队的电子表格或字处理文档的形式.
本文档可以作为基础进行开发的软件和验证和确认阶段使用。大多数的测试案例是直接从需求文档建立.
软件设计文档 - 这些单证包括所有必要的信息,这些信息来构建软件的需要. 它包括:: (a) 一)高级软件架构, (b) 软件的设计细节, (c)数据流图, (d) 数据库设计.
这些文件的存储库工作的开发者实现软件。尽管这些文件没有提供有关如何编写程序的任何细节,他们给所需要的编码和执行所有必要的信息.
技术文件 - 这些文件已经由开发商和实际编码器维持。这些文件中,作为一个整体,表示有关代码的信息。在写代码的程序员也不在话下代码,是谁写的,在那里将它需要客观,它做什么,它是如何做,该代码使用什么其他的资源,等等.
技术文档增加了工作的相同的代码不同程序员之间的了解。它增强了代码的复用能力。这使得调试方便,可追溯.
有可用的各种自动化的工具和一些自带的编程语言本身。比如java的自带的JavaDoc工具生成代码的技术文档.
用户文档 - 本文档是不同的,从所有上述解释。所有以前的文件已经以提供约软件及其发展过程的信息。但是,用户文档介绍了软件产品应该如何工作,以及应该如何使用,以获得理想的效果.
这些单证包括,软件安装程序,操作指南,用户指南,卸载方法和特殊的引用,以获得更多象牌的信息等.
有在实施软件所面临的开发团队的一些挑战。其中一些被提及如下:
代码重用 - 当代语言的编程接口是非常复杂的,配备巨大的库函数。静止,以使成本最终产物向下,组织管理倾向于重新使用的代码,这是早为一些其它软件创建的。有兼容性检查面临的程序员,并决定多少代码再利用巨大的问题.
版本管理 - 新的软件发给客户的每一次,开发商必须保持版本和配置相关的文件。这个文档需要高度精确,可利用时间.
目标 - 主机 - 软件程序,它正在开发的组织,需要被设计为主机上的客户端。但有时,不可能设计出在目标计算机上的可用的软件.