2017-2018-1 20179215 《构建之法》第一章总结

《构建之法》第一章总结

1.程序=数据结构+算法、 软件=程序+软件工程

?客户们对程序员的需求从一个简单的程序,扩展到一个满足各种功能的应用软件,再扩展到一个能保证维修的软件服务程序,在这里指的是源程序,就是一行行的代码。仔细看过去,它们的确是建立在数据结构上的一些算法程序还要对数据进行操作,这些数据有些是静态的(例如软件的图标、提示信息),有些是动态的(例如程序生成的随机数字、程序通过网络下载的数据、用户的文字或语音输入等)但是光有代码和静态数据还是不行,工程师要把它们构建为机器能懂的可执行代码。构建不仅仅是cc和link命令一个复杂的软件不但要有合理的软件架构(Software Architecture)、软件设计与实现(Software Design, Implementation and Debug),还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,等等。这些都是软件构建的过程。

?源代码管理(Source Code Control)的问题—有时候也叫配置管理(Software Configuration Management)有一系列的工具和程序来保证程序的正确性,这些工具流程和程序本身应该更正确,才能保证别的软件的质量。这就是质量保障(Quality Assurance),具体的验证过程叫做软件测试(Testing)软件团队要从需求分析(Re-quirement Analysis)开始,把合适的需求梳理出来,然后逐步展开后续工作,如设计(软件架构)、实现(写数据结构和算法)、测试,到最后发布软件软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计,这叫程序理解(Pro-gramComprehension)软件在运行过程中还会出这样那样的问题,也许我们要时不时给软件打一个补丁,或者维护众多的服务器,团队的新老成员要一起工作,修复各种各样的问题,这叫软件维护(Software Maintenance),或者服务运营(Service Operation)。

?这一系列过程就是软件的生命周期(Software Life Cycle,SLC),有人得负责软件项目的管理(Project Management)一个好的软件,即使功能和同类软件区别不大,但是会让人感觉到非常好用。这就是软件的用户体验(User Experience)。用户体验和数据结构、算法没有直接的关系,但是很多非常成功的软件就赢在这个方面上面这些和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容,是软件工程的核心部分。广义上的软件工程也包括用户体验、用户界面设计(User Interface Design)等。所以,一个推论是:软件 = 程序 + 软件工程。一个扩展的推论是:软件企业 = 软件 + 商业模式。程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。

2.软件开发、软件工程

?2.1软件开发的不同阶段

?2.2软件工程

?软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

?人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”。软件开发流程的目的是为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。

?软件是可以运行在计算机及电子设备中的指令和数据的有序集合,软件有各种形式:

- 系统软件:操作系统、设备驱动程序、工具软件等

- 应用软件:用户使用它们来完成工作,从管理核电厂到写文章,或者是通信、游戏、浏览网页、播放视频等

- 恶意软件:软件病毒等软件

1. 复杂性(Complexity)

?软件可以说是人类创造的最复杂的系统类型,软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长

2. 不可见性(Invisibility)

?工程师是“看”不到自己的源代码如何具体地在用户的机器上被执行的

3. 易变性(Changeability)

?人们自然地期待软件能在下面两种情况下“改变”: a) 让软件做新的事情;b) 让软件适应新的硬件

4. 服从性(Conformity)

?软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求

5. 非连续性(Discontinuity)

?输入上很小的变化,会引起输出上极大的变化

3.简单的四则运算

?根据指定随机出题,小学的四则运算。使用rand()函数及srand()函数,查了下相关使用方法:rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。 rand()返回一随机数值的范围在0至RAND_ MAX 间。RAND_ MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。用户未设定随机数种子时,系统默认的随机数种子为1。rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它(下面这段代码测试了下两者的不同):

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
    int i;
    //srand((unsigned)time(NULL)); //初始化随机数种子
    for (i=0; i<10; i++)      //产生10个随机数
    {
        cout<<rand()<<" ";
    }
    cout<<endl;
    return 0;
}

四则运算代码:

include <stdio.h>
include <stdlib.h>
include <time.h>
include <math.h>

int main()
{
     int i=0;
     int n=0;
     int x=0;
     int type;
     char flag;
     int left, right;
     float result;
     printf("请输入要出的题目数量\n");
     scanf("%d",&n);
     srand(unsigned(time(NULL)));
        while(x<n)
        {
             type = rand() % 4;
            left = rand() % 100;
            right = rand() % 100;
            switch(type)
            {
                 case 0:
                     printf("%d + %d = ?\n", left, right);
                     break;
                 case 1:
                     printf("%d - %d = ?\n", left, right);
                     break;
                 case 2:
                     printf("%d * %d = ?\n", left, right);
                     break;
                 case 3:
                     printf("%d / %d = ?\n", left, right);
                     break;
            }

            i++;
             while(i>=n)
                 {
                    printf("一共 %d 题\n",i);
                    printf("继续?[Y/N]\n");
                    fflush(stdin);
                    scanf("%c",&flag);
                    if(flag==‘Y‘||flag==‘y‘)
                    {
                        printf("请输入要出的题目数量\n");
                        scanf("%d",&n);
                        i=0;
                        break;
                    }
            printf("谢谢使用!\n");
            fflush(stdin);
            getchar();
            return 0;
    }
  }
}

结果如图:

??????

时间: 2024-11-10 03:21:11

2017-2018-1 20179215 《构建之法》第一章总结的相关文章

阅读构建之法第一章有感

今天阅读了构建之法第一章,感觉到自己其实玩具的阶段都不到,离研究阶段更是差的有段距离.了解到程序其实只是一个藏在你电脑里的数据结构加算法,要想成为软件还得经历软件工程这一阶段,软件工程便是把系统的.有序的,可量化的方法应用到软件开发,运营和维护上的过程中.首先我要进行软件需求分析,一个成功的软件是要有市场需求作为背景的,没有需求你做的软件就是无用的东西,有了需求然后我们对软件进行设计使之安全 可行 基本满足市场的需求.然后我们便对我们的软件进行测试.最后软件在用户手中运行,但是十全十美的软件是不

构建之法第一章

本章为概论,主要讲解计算机科学的领域.软件工程和计算机科学的关系.软件的特性.软件工程的定义与组成部分等内容. 一.软件: 程序=数据结构+算法 软件=程序+软件工程 软件工程的核心部分: 1.构建管理 2.源代码管理 3.软件设计 4.软件测试 5.项目管理 软件开发有玩具阶段.业余爱好阶段.探索阶段.成熟的产业阶段等四个阶段. 二.软件工程: 软件具有复杂性.不可见性.易变性.服从性.非连续性等. 计算机科学与软件工程的区别(侧重点) 计算机科学: 1.发现和研究长期的.客观的真理 2.理想

构建之法第一章读后感

首先,文章对于程序.用户需求.工程等等概念用了阿超给儿子编写的一个出题程序来分别解释了个中的含义,尤其是程序和工程的区别,程序大概就是用很多语言或工具编写的一个简单能实现目标要求的一行行代码,而工程就是在这个程序的基础上不断满足用户的需求.修复程序的bug.提供后续维护等服务. 需求分析:梳理需求,逐步展开后续工作,如设计(软件架构).实现(写数据结构和算法),测试,发布软件 软件=程序+软件工程(软件企业=软件+商业模式) 软将工程的核心部分:构建管理.源代码管理.软件设计.软件测试.项目管理

构建之法 第一章 概论

软件与程序的区别,恐怕就是实用性与理想性的区别.软件=程序+软件工程:程序=数据结构+算法.我们现在学的,只是后者的构成,而从理想迈向实用的最关键的一步,就是软件工程. 1.概念 1)软件构建:除了代码和静态数据,还有各种文件和数据来描述各个程序文件之间的依赖关系等: 2)源代码管理/配置管理:保证代码的平台兼容性.配置兼容性等: 3)质量保障(软件测试):保证软件的质量在修改过程中可以不断提高,或者至少可以保持: 4)项目管理:软件维护和服务运营 5)生命周期:以上称为软件的生命周期SLC 2

读构建之法 第一章:概论

软件=程序+软件工程 软件企业=软件+商业模式 工程师的宗旨是:我构建,故我在 程序在这里指的是源程序,就是一行行的代码,它们是建立在数据结构上的一些算法.程序对数据进行操作,工程师把它们构建为机器能懂的可执行代码.构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构.软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系.编译参数.链接参数,等等.这些都是软件构建的过程.      软件工程:和软件开发活动(构建管理.源代码管理.软件设计.软件测试.项目管理)相关

构建之法第一章总结

软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上.软件工程包括:软件需求分析,软件构建,软件设计,软件测试和软件维护. 首先,从软件二字理解,软件是可以运行在计算机上及电子设备中的指令和数据的有序集合.软件以下特性:复杂性,不可见性,易变性,服从性,非连续性.这些特性让软件开发变得有点困难,软件可以说是人类创造的最复杂的系统类型.其次,工程通常是指创造性地运用科学原理,设计和实现建筑,机器,安装或生产过程,或者是在实践中使用一个或多个上述实体,或者是实现这些实体的过程.根据

构建之法--第一篇

这一周,我学习了<构建之法>中第一章的内容,对<构建之法>这本书有了一个大概认识. 首先,我们从第一章中,能得出其中两个等式: 1.软件=程序+软件工程.我们该怎么去理解这个等式呢?如果是以一个程序员的立场来看,我们想要做出一个可以推广出去并且能过投入市场的软件,要经过几道必要的步骤.程序员要利用自己所擅长的语言来编写出客户需要的程序,待客户满意这一个程序的基本需求后,才算勉强形成一个胚子.后续,还需要随客户的要求而增加相应的功能来满足客户的需求,这是一个庞大的工程.从简单的程序,

构建之法——第一篇

通过两周的学习,在<构建之法>的前两章中,了解到软件的概述以及单元测试的重要性. 通过第一章"软件=程序+软件工程"使我对于软件工程有了一个相对来说比较宏观的定义,即软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上的过程.为此我也了解到软件有很多种,就以三个我比较感兴趣的举例来说吧! ShrinkWrap:是最强大的软件保护工具,其强大的反调试检测让所有调试器均无法加载 Internal Software:即就是企业或学校或某组织内部的软件 Mobil

构建之法第一、二、十六章

<构建之法>第一.二.十六章疑问 我通过阅读发现这是一本十分有趣的书.不同于别的书的晦涩难懂,<构建之法>利用浅显易懂的语言,贴近生活的例子向我们讲述了软件工程的内容. 第一章  概论 软件=程序+软件工程 扩展:软件企业=软件+商业模式 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营.和维护上的过程.软件的特殊性有a.复杂性 b.不可见性 c.易变性 d.服从性 e.非连续性.软件工程与计算机科学的区别:计算机科学中与实践相关的部分,都和数据以及其他学科发生关系:

构建之法第一篇阅读笔记

程序=算法+数据结构这句话我估计应该深入每个计算机系学生的心里了,但是就像书中所说的一样除了上数据结构课程我们没有用过任何与数据结构有关的东西,难道老师讲的都是错的吗?构建之法给了我明确的答案,这都是我们就业后所要面临的问题,因此,软件工程概论这门课就显得尤为重要了,它可以帮助我们了解软件工程整体结构,了解其中的各个流程,使我们能够了解到我们今后将会遇到的问题,提前让我们熟悉这个行业,意识到自身所学真正的作用. 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.它包含